瀏覽代碼

BETA: Unhardcoding isEnchantable, isElementable from core now it will use enchant_enabled / element_enabled.
Also all 0/1 values replaced by booleans

Rumen Nikiforov 13 年之前
父節點
當前提交
76ece3c09c

+ 17 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2ItemInstance.java

@@ -461,7 +461,16 @@ public final class L2ItemInstance extends L2Object
 		this.changeCount(null, count, creator, reference);
 	}
 	
-	
+	/**
+	 * Return true if item can be enchanted
+	 * @return boolean
+	 */
+	public boolean isEnchantable()
+	{
+		if (getLocation() == ItemLocation.INVENTORY || getLocation() == ItemLocation.PAPERDOLL)
+			return getItem().isEnchantable();
+		return false;
+	}
 	
 	/**
 	 * Returns if item is equipable
@@ -1934,6 +1943,13 @@ public final class L2ItemInstance extends L2Object
 		return getItem().isQuestItem();
 	}
 	
+	public boolean isElementable()
+	{
+		if (getLocation() == ItemLocation.INVENTORY || getLocation() == ItemLocation.PAPERDOLL)
+			return getItem().isElementable();
+		return false;
+	}
+	
 	public boolean isFreightable()
 	{
 		return getItem().isFreightable();

+ 0 - 38
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/AbstractEnchantPacket.java

@@ -21,7 +21,6 @@ import java.util.Arrays;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.L2ItemInstance;
 import com.l2jserver.gameserver.templates.item.L2Item;
-import com.l2jserver.gameserver.templates.item.L2WeaponType;
 
 
 public abstract class AbstractEnchantPacket extends L2GameClientPacket
@@ -342,41 +341,4 @@ public abstract class AbstractEnchantPacket extends L2GameClientPacket
 	{
 		return _supports.get(item.getItemId());
 	}
-	
-	/**
-	 * @param item 
-	 * @return true if item can be enchanted
-	 */
-	protected static final boolean isEnchantable(L2ItemInstance item)
-	{
-		if (item.isHeroItem())
-			return false;
-		if (item.isShadowItem())
-			return false;
-		if (item.isCommonItem())
-			return false;
-		if (item.isEtcItem())
-			return false;
-		if (item.isTimeLimitedItem())
-			return false;
-		// rods
-		if (item.getItem().getItemType() == L2WeaponType.FISHINGROD)
-			return false;
-		// bracelets
-		if (item.getItem().getBodyPart() == L2Item.SLOT_L_BRACELET)
-			return false;
-		if (item.getItem().getBodyPart() == L2Item.SLOT_R_BRACELET)
-			return false;
-		if (item.getItem().getBodyPart() == L2Item.SLOT_BACK)
-			return false;
-		// blacklist check
-		if (Arrays.binarySearch(Config.ENCHANT_BLACKLIST, item.getItemId()) >= 0)
-			return false;		
-		// only items in inventory and equipped can be enchanted
-		if (item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY
-				&& item.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL)
-			return false;
-		
-		return true;
-	}
 }

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestEnchantItem.java

@@ -104,7 +104,7 @@ public final class RequestEnchantItem extends AbstractEnchantPacket
 		}
 		
 		// first validation check
-		if (!scrollTemplate.isValid(item, supportTemplate) || !isEnchantable(item))
+		if (!scrollTemplate.isValid(item, supportTemplate) || !item.isEnchantable())
 		{
 			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION));
 			activeChar.setActiveEnchantItem(null);
@@ -155,7 +155,7 @@ public final class RequestEnchantItem extends AbstractEnchantPacket
 			
 			// last validation check
 			if (item.getOwnerId() != activeChar.getObjectId()
-					|| !isEnchantable(item)
+					|| !item.isEnchantable()
 					|| chance < 0)
 			{
 				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION));

+ 7 - 22
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java

@@ -24,9 +24,6 @@ import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
 import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
-import com.l2jserver.gameserver.templates.item.L2ArmorType;
-import com.l2jserver.gameserver.templates.item.L2Item;
-import com.l2jserver.gameserver.templates.item.L2WeaponType;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
@@ -87,25 +84,6 @@ public class RequestExEnchantItemAttribute extends L2GameClientPacket
 			player.setActiveEnchantAttrItem(null);
 			return;
 		}
-		if ((item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY) && (item.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL))
-		{
-			player.setActiveEnchantAttrItem(null);
-			return;
-		}
-		
-		//can't enchant rods, shadow items, adventurers', Common Items, PvP items, hero items, cloaks, bracelets, underwear (e.g. shirt), belt, necklace, earring, ring
-		if (item.getItem().getItemType() == L2WeaponType.FISHINGROD || item.isShadowItem() || item.isCommonItem() || item.isPvp() || item.isHeroItem() || item.isTimeLimitedItem() ||
-				(item.getItemId() >= 7816 && item.getItemId() <= 7831) || (item.getItem().getItemType() == L2WeaponType.NONE) ||
-				item.getItem().getItemGradeSPlus() != L2Item.CRYSTAL_S || item.getItem().getBodyPart() == L2Item.SLOT_BACK ||
-				item.getItem().getBodyPart() == L2Item.SLOT_R_BRACELET || item.getItem().getBodyPart() == L2Item.SLOT_UNDERWEAR ||
-				item.getItem().getBodyPart() == L2Item.SLOT_BELT || item.getItem().getBodyPart() == L2Item.SLOT_NECK ||
-				(item.getItem().getBodyPart() & L2Item.SLOT_R_EAR) != 0 || (item.getItem().getBodyPart() & L2Item.SLOT_R_FINGER) != 0 ||
-				item.getItem().getElementals() != null || item.getItemType() == L2ArmorType.SHIELD || item.getItemType() == L2ArmorType.SIGIL)
-		{
-			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ELEMENTAL_ENHANCE_REQUIREMENT_NOT_SUFFICIENT));
-			player.setActiveEnchantAttrItem(null);
-			return;
-		}
 		
 		switch (item.getLocation())
 		{
@@ -127,6 +105,13 @@ public class RequestExEnchantItemAttribute extends L2GameClientPacket
 			}
 		}
 		
+		if (!item.isElementable())
+		{
+			player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ELEMENTAL_ENHANCE_REQUIREMENT_NOT_SUFFICIENT));
+			player.setActiveEnchantAttrItem(null);
+			return;
+		}
+		
 		int stoneId = stone.getItemId();
 		byte elementToAdd = Elementals.getItemElement(stoneId);
 		// Armors have the opposite element

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestExTryToPutEnchantTargetItem.java

@@ -57,7 +57,7 @@ public class RequestExTryToPutEnchantTargetItem extends AbstractEnchantPacket
 			// template for scroll
 			EnchantScroll scrollTemplate = getEnchantScroll(scroll);
 			
-			if (!scrollTemplate.isValid(item) || !isEnchantable(item))
+			if (!scrollTemplate.isValid(item) || !item.isEnchantable())
 			{
 				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.DOES_NOT_FIT_SCROLL_CONDITIONS));
 				activeChar.setActiveEnchantItem(null);

+ 23 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/templates/item/L2Item.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.templates.item;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.logging.Logger;
 
@@ -176,6 +177,8 @@ public abstract class L2Item
 	private final boolean _destroyable;
 	private final boolean _tradeable;
 	private final boolean _depositable;
+	private final boolean _enchantable;
+	private final boolean _elementable;
 	private final boolean _questItem;
 	private final boolean _freightable;
 	private final boolean _is_oly_restricted;
@@ -225,12 +228,15 @@ public abstract class L2Item
 		_destroyable = set.getBool("is_destroyable", true);
 		_tradeable = set.getBool("is_tradable", true);
 		_depositable = set.getBool("is_depositable", true);
+		_elementable = set.getBool("element_enabled", false);
+		_enchantable = set.getBool("enchant_enabled", false);
 		_questItem = set.getBool("is_questitem", false);
 		_freightable = set.getBool("is_freightable", false);
 		_is_oly_restricted = set.getBool("is_oly_restricted", false);
 		
 		//_immediate_effect - herb
-		_ex_immediate_effect = set.getInteger("ex_immediate_effect", 0) > 0;
+		_ex_immediate_effect = set.getBool("ex_immediate_effect", false);
+		
 		//used for custom type select
 		_defaultAction = set.getEnum("default_action", L2ActionType.class, L2ActionType.none);
 		_useSkillDisTime = set.getInteger("useSkillDisTime", 0);
@@ -627,6 +633,22 @@ public abstract class L2Item
 		return _depositable;
 	}
 	
+	/**
+	 * @return {@code true} if the item can be enchanted, {@code false} otherwise.
+	 */
+	public final boolean isEnchantable()
+	{
+		return _enchantable && Arrays.binarySearch(Config.ENCHANT_BLACKLIST, getItemId()) == 0;
+	}
+	
+	/**
+	 * @return {@code true} if the item can be elemented, {@code false} otherwise.
+	 */
+	public final boolean isElementable()
+	{
+		return _elementable;
+	}
+	
 	/**
 	 * Returns if item is common
 	 * @return boolean