Bladeren bron

BETA: Minor items rework:
* Removed isConsumable() support, too hardcoded and hardly used.
* Removed custom etc item type HERB.
* Replaced with `hasExImmediateEffect()`.
* Added/replaced multiple !JavaDocs.
* Added support for immediate_effect item attribute.

Zoey76 11 jaren geleden
bovenliggende
commit
a8425e7b68

+ 0 - 1
L2J_Server_BETA/dist/game/config/Rates.properties

@@ -17,7 +17,6 @@ RateSp = 1
 RatePartyXp = 1
 # Skill points multiplier (Party)
 RatePartySp = 1
-RateConsumableCost = 1
 RateDropItems = 1
 RateRaidDropItems = 1
 RateDropSpoil = 1

+ 0 - 5
L2J_Server_BETA/java/com/l2jserver/Config.java

@@ -852,7 +852,6 @@ public final class Config
 	public static float RATE_SP;
 	public static float RATE_PARTY_XP;
 	public static float RATE_PARTY_SP;
-	public static float RATE_CONSUMABLE_COST;
 	public static float RATE_HB_TRUST_INCREASE;
 	public static float RATE_HB_TRUST_DECREASE;
 	public static float RATE_EXTRACTABLE;
@@ -2117,7 +2116,6 @@ public final class Config
 			RATE_SP = RatesSettings.getFloat("RateSp", 1);
 			RATE_PARTY_XP = RatesSettings.getFloat("RatePartyXp", 1);
 			RATE_PARTY_SP = RatesSettings.getFloat("RatePartySp", 1);
-			RATE_CONSUMABLE_COST = RatesSettings.getFloat("RateConsumableCost", 1);
 			RATE_EXTRACTABLE = RatesSettings.getFloat("RateExtractable", 1);
 			RATE_DROP_ITEMS = RatesSettings.getFloat("RateDropItems", 1);
 			RATE_DROP_ITEMS_BY_RAID = RatesSettings.getFloat("RateRaidDropItems", 1);
@@ -2871,9 +2869,6 @@ public final class Config
 			case "ratepartyxp":
 				RATE_PARTY_XP = Float.parseFloat(pValue);
 				break;
-			case "rateconsumablecost":
-				RATE_CONSUMABLE_COST = Float.parseFloat(pValue);
-				break;
 			case "rateextractable":
 				RATE_EXTRACTABLE = Float.parseFloat(pValue);
 				break;

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/ItemsAutoDestroy.java

@@ -27,7 +27,6 @@ import com.l2jserver.gameserver.enums.ItemLocation;
 import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.items.type.L2EtcItemType;
 
 public class ItemsAutoDestroy
 {
@@ -85,7 +84,7 @@ public class ItemsAutoDestroy
 						}
 					}
 				}
-				else if (item.getItemType() == L2EtcItemType.HERB)
+				else if (item.getItem().hasExImmediateEffect())
 				{
 					if ((curtime - item.getDropTime()) > Config.HERB_AUTO_DESTROY_TIME)
 					{

+ 5 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/RecipeController.java

@@ -347,8 +347,7 @@ public class RecipeController
 				// if still not empty, schedule another pass
 				if (!_items.isEmpty())
 				{
-					// divided by RATE_CONSUMABLES_COST to remove craft time increase on higher consumables rates
-					_delay = (int) ((Config.ALT_GAME_CREATION_SPEED * _player.getMReuseRate(_skill) * GameTimeController.TICKS_PER_SECOND) / Config.RATE_CONSUMABLE_COST) * GameTimeController.MILLIS_IN_TICK;
+					_delay = (int) (Config.ALT_GAME_CREATION_SPEED * _player.getMReuseRate(_skill) * GameTimeController.TICKS_PER_SECOND * GameTimeController.MILLIS_IN_TICK);
 					
 					// FIXME: please fix this packet to show crafting animation (somebody)
 					MagicSkillUse msk = new MagicSkillUse(_player, _skillId, _skillLevel, _delay, 0);
@@ -606,19 +605,17 @@ public class RecipeController
 			
 			for (L2RecipeInstance recipe : recipes)
 			{
-				int quantity = _recipeList.isConsumable() ? (int) (recipe.getQuantity() * Config.RATE_CONSUMABLE_COST) : recipe.getQuantity();
-				
-				if (quantity > 0)
+				if (recipe.getQuantity() > 0)
 				{
 					L2ItemInstance item = inv.getItemByItemId(recipe.getItemId());
 					long itemQuantityAmount = item == null ? 0 : item.getCount();
 					
 					// check materials
-					if (itemQuantityAmount < quantity)
+					if (itemQuantityAmount < recipe.getQuantity())
 					{
 						sm = SystemMessage.getSystemMessage(SystemMessageId.MISSING_S2_S1_TO_CREATE);
 						sm.addItemName(recipe.getItemId());
-						sm.addItemNumber(quantity - itemQuantityAmount);
+						sm.addItemNumber(recipe.getQuantity() - itemQuantityAmount);
 						_target.sendPacket(sm);
 						
 						abort();
@@ -626,9 +623,7 @@ public class RecipeController
 					}
 					
 					// make new temporary object, just for counting purposes
-					
-					TempItem temp = new TempItem(item, quantity);
-					materials.add(temp);
+					materials.add(new TempItem(item, recipe.getQuantity()));
 				}
 			}
 			

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/ItemsOnGroundManager.java

@@ -33,7 +33,6 @@ import com.l2jserver.gameserver.ItemsAutoDestroy;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.items.type.L2EtcItemType;
 import com.l2jserver.util.L2FastList;
 
 /**
@@ -132,7 +131,7 @@ public final class ItemsOnGroundManager implements Runnable
 					{
 						if (dropTime > -1)
 						{
-							if (((Config.AUTODESTROY_ITEM_AFTER > 0) && (item.getItemType() != L2EtcItemType.HERB)) || ((Config.HERB_AUTO_DESTROY_TIME > 0) && (item.getItemType() == L2EtcItemType.HERB)))
+							if (((Config.AUTODESTROY_ITEM_AFTER > 0) && !item.getItem().hasExImmediateEffect()) || ((Config.HERB_AUTO_DESTROY_TIME > 0) && item.getItem().hasExImmediateEffect()))
 							{
 								ItemsAutoDestroy.getInstance().addItem(item);
 							}

+ 0 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2RecipeList.java

@@ -170,18 +170,6 @@ public class L2RecipeList
 		return _successRate;
 	}
 	
-	/**
-	 * @return true if the Item crafted with this L2RecipeList is consumable (shot, arrow,...).
-	 */
-	public boolean isConsumable()
-	{
-		return (((_itemId >= 1463) && (_itemId <= 1467)) // Soulshots
-			|| ((_itemId >= 2509) && (_itemId <= 2514)) // Spiritshots
-			|| ((_itemId >= 3947) && (_itemId <= 3952)) // Blessed Spiritshots
-		|| ((_itemId >= 1341) && (_itemId <= 1345)) // Arrows
-		);
-	}
-	
 	/**
 	 * @return the Identifier of the Item crafted with this L2RecipeList.
 	 */

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Npc.java

@@ -75,7 +75,6 @@ import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.L2Weapon;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.items.type.L2EtcItemType;
 import com.l2jserver.gameserver.model.olympiad.Olympiad;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -2016,7 +2015,7 @@ public class L2Npc extends L2Character
 			// Add drop to auto destroy item task.
 			if (!Config.LIST_PROTECTED_ITEMS.contains(itemId))
 			{
-				if (((Config.AUTODESTROY_ITEM_AFTER > 0) && (item.getItemType() != L2EtcItemType.HERB)) || ((Config.HERB_AUTO_DESTROY_TIME > 0) && (item.getItemType() == L2EtcItemType.HERB)))
+				if (((Config.AUTODESTROY_ITEM_AFTER > 0) && !item.getItem().hasExImmediateEffect()) || ((Config.HERB_AUTO_DESTROY_TIME > 0) && item.getItem().hasExImmediateEffect()))
 				{
 					ItemsAutoDestroy.getInstance().addItem(item);
 				}

+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -3491,7 +3491,7 @@ public final class L2PcInstance extends L2Playable
 				return null;
 			}
 			// Sends message to client if requested
-			if (sendMessage && ((!isCastingNow() && (item.getItemType() == L2EtcItemType.HERB)) || (item.getItemType() != L2EtcItemType.HERB)))
+			if (sendMessage && ((!isCastingNow() && item.getItem().hasExImmediateEffect()) || !item.getItem().hasExImmediateEffect()))
 			{
 				if (count > 1)
 				{
@@ -3528,7 +3528,7 @@ public final class L2PcInstance extends L2Playable
 			}
 			
 			// Auto-use herbs.
-			if (item.getItemType() == L2EtcItemType.HERB)
+			if (item.getItem().hasExImmediateEffect())
 			{
 				final IItemHandler handler = ItemHandler.getInstance().getHandler(item.getEtcItem());
 				if (handler == null)
@@ -4636,7 +4636,7 @@ public final class L2PcInstance extends L2Playable
 	 */
 	public void doAutoLoot(L2Attackable target, int itemId, long itemCount)
 	{
-		if (isInParty() && (ItemTable.getInstance().getTemplate(itemId).getItemType() != L2EtcItemType.HERB))
+		if (isInParty() && !ItemTable.getInstance().getTemplate(itemId).hasExImmediateEffect())
 		{
 			getParty().distributeItem(this, itemId, itemCount, false, target);
 		}
@@ -4775,7 +4775,7 @@ public final class L2PcInstance extends L2Playable
 		}
 		
 		// Auto use herbs - pick up
-		if (target.getItemType() == L2EtcItemType.HERB)
+		if (target.getItem().hasExImmediateEffect())
 		{
 			IItemHandler handler = ItemHandler.getInstance().getHandler(target.getEtcItem());
 			if (handler == null)

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java

@@ -64,7 +64,6 @@ import com.l2jserver.gameserver.model.itemcontainer.PetInventory;
 import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.L2Weapon;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.items.type.L2EtcItemType;
 import com.l2jserver.gameserver.model.skills.AbnormalType;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
 import com.l2jserver.gameserver.model.skills.EffectScope;
@@ -615,7 +614,7 @@ public class L2PetInstance extends L2Summon
 		}
 		
 		// Herbs
-		if (target.getItemType() == L2EtcItemType.HERB)
+		if (target.getItem().hasExImmediateEffect())
 		{
 			IItemHandler handler = ItemHandler.getInstance().getHandler(target.getEtcItem());
 			if (handler == null)

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/PcInventory.java

@@ -36,7 +36,6 @@ import com.l2jserver.gameserver.model.TradeList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.items.type.L2EtcItemType;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
 import com.l2jserver.gameserver.network.serverpackets.ItemList;
@@ -876,7 +875,7 @@ public class PcInventory extends Inventory
 	public boolean validateCapacity(L2ItemInstance item)
 	{
 		int slots = 0;
-		if (!item.isStackable() || (getInventoryItemCount(item.getId(), -1) <= 0) || (item.getItemType() != L2EtcItemType.HERB))
+		if (!item.isStackable() || (getInventoryItemCount(item.getId(), -1) <= 0) || !item.getItem().hasExImmediateEffect())
 		{
 			slots++;
 		}

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/PetInventory.java

@@ -23,7 +23,6 @@ import com.l2jserver.gameserver.enums.ItemLocation;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.items.type.L2EtcItemType;
 
 public class PetInventory extends Inventory
 {
@@ -70,7 +69,7 @@ public class PetInventory extends Inventory
 	{
 		int slots = 0;
 		
-		if (!(item.isStackable() && (getItemByItemId(item.getId()) != null)) && (item.getItemType() != L2EtcItemType.HERB))
+		if (!(item.isStackable() && (getItemByItemId(item.getId()) != null)) && !item.getItem().hasExImmediateEffect())
 		{
 			slots++;
 		}

+ 0 - 14
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/L2EtcItem.java

@@ -59,11 +59,6 @@ public final class L2EtcItem extends L2Item
 			}
 		}
 		
-		if (is_ex_immediate_effect())
-		{
-			_type = L2EtcItemType.HERB;
-		}
-		
 		_type1 = L2Item.TYPE1_ITEM_QUESTITEM_ADENA;
 		_type2 = L2Item.TYPE2_OTHER; // default is other
 		
@@ -133,15 +128,6 @@ public final class L2EtcItem extends L2Item
 		return _type;
 	}
 	
-	/**
-	 * @return {@code true} if the item is consumable, {@code false} otherwise.
-	 */
-	@Override
-	public final boolean isConsumable()
-	{
-		return ((getItemType() == L2EtcItemType.SHOT) || (getItemType() == L2EtcItemType.POTION)); // || (type == L2EtcItemType.SCROLL));
-	}
-	
 	/**
 	 * @return the ID of the Etc item after applying the mask.
 	 */

+ 26 - 20
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/L2Item.java

@@ -61,7 +61,6 @@ import com.l2jserver.util.StringUtil;
  * <li>L2EtcItem</li>
  * <li>L2Weapon</li>
  * </ul>
- * @version $Revision: 1.7.2.2.2.5 $ $Date: 2005/04/06 18:25:18 $
  */
 public abstract class L2Item implements IIdentifiable
 {
@@ -221,6 +220,7 @@ public abstract class L2Item implements IIdentifiable
 	private final boolean _common;
 	private final boolean _heroItem;
 	private final boolean _pvpItem;
+	private final boolean _immediate_effect;
 	private final boolean _ex_immediate_effect;
 	private final int _defaultEnchantLevel;
 	private final L2ActionType _defaultAction;
@@ -274,10 +274,9 @@ public abstract class L2Item implements IIdentifiable
 		_is_oly_restricted = set.getBoolean("is_oly_restricted", false);
 		_for_npc = set.getBoolean("for_npc", false);
 		
-		// _immediate_effect - herb
+		_immediate_effect = set.getBoolean("immediate_effect", false);
 		_ex_immediate_effect = set.getBoolean("ex_immediate_effect", false);
 		
-		// used for custom type select
 		_defaultAction = set.getEnum("default_action", L2ActionType.class, L2ActionType.none);
 		_useSkillDisTime = set.getInt("useSkillDisTime", 0);
 		_defaultEnchantLevel = set.getInt("enchanted", 0);
@@ -407,7 +406,8 @@ public abstract class L2Item implements IIdentifiable
 	public abstract L2ItemType getItemType();
 	
 	/**
-	 * @return {@code true} if the weapon is magic, {@code false} otherwise.
+	 * Verifies if the item is a magic weapon.
+	 * @return {@code true} if the weapon is magic, {@code false} otherwise
 	 */
 	public boolean isMagicWeapon()
 	{
@@ -678,14 +678,6 @@ public abstract class L2Item implements IIdentifiable
 		return _stackable;
 	}
 	
-	/**
-	 * @return {@code true} if the item is consumable, {@code false} otherwise.
-	 */
-	public boolean isConsumable()
-	{
-		return false;
-	}
-	
 	/**
 	 * @return {@code true} if the item can be equipped, {@code false} otherwise.
 	 */
@@ -699,7 +691,7 @@ public abstract class L2Item implements IIdentifiable
 	 */
 	public final int getReferencePrice()
 	{
-		return (isConsumable() ? (int) (_referencePrice * Config.RATE_CONSUMABLE_COST) : _referencePrice);
+		return _referencePrice;
 	}
 	
 	/**
@@ -1045,8 +1037,8 @@ public abstract class L2Item implements IIdentifiable
 	}
 	
 	/**
-	 * Returns the name of the item
-	 * @return String
+	 * Returns the name of the item followed by the item ID.
+	 * @return the name and the ID of the item
 	 */
 	@Override
 	public String toString()
@@ -1055,13 +1047,24 @@ public abstract class L2Item implements IIdentifiable
 	}
 	
 	/**
-	 * @return the _ex_immediate_effect
+	 * Verifies if the item has effects immediately.<br>
+	 * <i>Used for herbs mostly.</i>
+	 * @return {@code true} if the item applies effects immediately, {@code false} otherwise
 	 */
-	public boolean is_ex_immediate_effect()
+	public boolean hasExImmediateEffect()
 	{
 		return _ex_immediate_effect;
 	}
 	
+	/**
+	 * Verifies if the item has effects immediately.
+	 * @return {@code true} if the item applies effects immediately, {@code false} otherwise
+	 */
+	public boolean hasImmediateEffect()
+	{
+		return _immediate_effect;
+	}
+	
 	/**
 	 * @return the _default_action
 	 */
@@ -1076,7 +1079,8 @@ public abstract class L2Item implements IIdentifiable
 	}
 	
 	/**
-	 * @return the Reuse Delay of item.
+	 * Gets the item reuse delay time in seconds.
+	 * @return the reuse delay time
 	 */
 	public int getReuseDelay()
 	{
@@ -1084,7 +1088,9 @@ public abstract class L2Item implements IIdentifiable
 	}
 	
 	/**
-	 * @return the shared reuse group.
+	 * Gets the shared reuse group.<br>
+	 * Items with the same reuse group will render reuse delay upon those items when used.
+	 * @return the shared reuse group
 	 */
 	public int getSharedReuseGroup()
 	{
@@ -1093,7 +1099,7 @@ public abstract class L2Item implements IIdentifiable
 	
 	/**
 	 * Usable in HTML windows.
-	 * @return the icon link in client files.
+	 * @return the icon link in client files
 	 */
 	public String getIcon()
 	{

+ 0 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java

@@ -824,15 +824,6 @@ public final class L2ItemInstance extends L2Object
 		return true;
 	}
 	
-	/**
-	 * Returns if item is consumable
-	 * @return boolean
-	 */
-	public boolean isConsumable()
-	{
-		return _item.isConsumable();
-	}
-	
 	public boolean isPotion()
 	{
 		return _item.isPotion();

+ 13 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/type/L2EtcItemType.java

@@ -21,7 +21,6 @@ package com.l2jserver.gameserver.model.items.type;
 /**
  * Description of EtcItem Type
  */
-
 public enum L2EtcItemType implements L2ItemType
 {
 	NONE(1, "none"),
@@ -58,18 +57,17 @@ public enum L2EtcItemType implements L2ItemType
 	RUNE(32, "rune"),
 	
 	// L2J CUSTOM, BACKWARD COMPATIBILITY
-	SHOT(33, "Shot"),
-	HERB(34, "Herb");
+	SHOT(33, "Shot");
 	
-	final int _id;
-	final String _name;
+	private final int _id;
+	private final String _name;
 	
 	/**
 	 * Constructor of the L2EtcItemType.
 	 * @param id : int designating the ID of the EtcItemType
 	 * @param name : String designating the name of the EtcItemType
 	 */
-	L2EtcItemType(int id, String name)
+	private L2EtcItemType(int id, String name)
 	{
 		_id = id;
 		_name = name;
@@ -84,6 +82,15 @@ public enum L2EtcItemType implements L2ItemType
 		return 0;
 	}
 	
+	/**
+	 * Gets the EtcItem type ID.
+	 * @return the EtcItem type ID
+	 */
+	public int getId()
+	{
+		return _id;
+	}
+	
 	/**
 	 * @return the name of the EtcItemType
 	 */

+ 0 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java

@@ -339,11 +339,6 @@ public final class UseItem extends L2GameClientPacket
 		}
 		else
 		{
-			if (activeChar.isCastingNow() && !(item.isPotion() || item.isElixir()))
-			{
-				return;
-			}
-			
 			final L2Weapon weaponItem = activeChar.getActiveWeaponItem();
 			if (((weaponItem != null) && (weaponItem.getItemType() == L2WeaponType.FISHINGROD)) && (((_itemId >= 6519) && (_itemId <= 6527)) || ((_itemId >= 7610) && (_itemId <= 7613)) || ((_itemId >= 7807) && (_itemId <= 7809)) || ((_itemId >= 8484) && (_itemId <= 8486)) || ((_itemId >= 8505) && (_itemId <= 8513))))
 			{