Index: D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/config/Character.properties =================================================================== --- D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/config/Character.properties (revision 1981) +++ D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/config/Character.properties (working copy) @@ -264,6 +264,10 @@ EnchantChanceArmor = 52 EnchantChanceJewelry = 54 +BlessedEnchantChanceWeapon = 68 +BlessedEnchantChanceArmor = 52 +BlessedEnchantChanceJewelry = 54 + # This is the enchant limit, if set to 0, there will be no limit. # If this is set to 10, the maximum enchant will be 10. # The limits are in the following order: Weapon, Armor, and Jewelry. Index: D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/net/sf/l2j/Config.java =================================================================== --- D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/net/sf/l2j/Config.java (revision 1981) +++ D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/net/sf/l2j/Config.java (working copy) @@ -864,10 +864,15 @@ /** Type of set object */ public static ObjectSetType SET_TYPE; - /** Chance that an item will succesfully be enchanted */ + /** Chance that an item will successfully be enchanted */ public static int ENCHANT_CHANCE_WEAPON; public static int ENCHANT_CHANCE_ARMOR; public static int ENCHANT_CHANCE_JEWELRY; + + public static int BLESSED_ENCHANT_CHANCE_WEAPON; + public static int BLESSED_ENCHANT_CHANCE_ARMOR; + public static int BLESSED_ENCHANT_CHANCE_JEWELRY; + /** Maximum level of enchantment */ public static int ENCHANT_MAX_WEAPON; public static int ENCHANT_MAX_ARMOR; @@ -1166,6 +1171,9 @@ ENCHANT_CHANCE_WEAPON = Integer.parseInt(Character.getProperty("EnchantChanceWeapon", "68")); ENCHANT_CHANCE_ARMOR = Integer.parseInt(Character.getProperty("EnchantChanceArmor", "52")); ENCHANT_CHANCE_JEWELRY = Integer.parseInt(Character.getProperty("EnchantChanceJewelry", "54")); + BLESSED_ENCHANT_CHANCE_WEAPON = Integer.parseInt(Character.getProperty("BlessedEnchantChanceWeapon", "68")); + BLESSED_ENCHANT_CHANCE_ARMOR = Integer.parseInt(Character.getProperty("BlessedEnchantChanceArmor", "52")); + BLESSED_ENCHANT_CHANCE_JEWELRY = Integer.parseInt(Character.getProperty("BlessedEnchantChanceJewelry", "54")); ENCHANT_MAX_WEAPON = Integer.parseInt(Character.getProperty("EnchantMaxWeapon", "255")); ENCHANT_MAX_ARMOR = Integer.parseInt(Character.getProperty("EnchantMaxArmor", "255")); ENCHANT_MAX_JEWELRY = Integer.parseInt(Character.getProperty("EnchantMaxJewelry", "255")); Index: D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java =================================================================== --- D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java (revision 1981) +++ D:/Documents and Settings/Administrator/My Documents/workspace/L2_GameServer_Commit/java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java (working copy) @@ -35,351 +35,414 @@ public final class RequestEnchantItem extends L2GameClientPacket { - protected static final Logger _log = Logger.getLogger(Inventory.class.getName()); - private static final String _C__58_REQUESTENCHANTITEM = "[C] 58 RequestEnchantItem"; - private static final int[] CRYSTAL_SCROLLS = { 731, 732, 949, 950, 953, 954, 957, 958, 961, 962 }; + protected static final Logger _log = Logger.getLogger(Inventory.class.getName()); + + private static final String _C__58_REQUESTENCHANTITEM = "[C] 58 RequestEnchantItem"; - private int _objectId; - - @Override + private static final int[] ENCHANT_SCROLLS = { 729, 730, 947, 948, 951, 952, 955, 956, 959, 960 }; + private static final int[] BLESSED_SCROLLS = { 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6578 }; + + private int _objectId; + + @Override protected void readImpl() - { - _objectId = readD(); - } - - @Override + { + _objectId = readD(); + } + + @Override protected void runImpl() - { - L2PcInstance activeChar = getClient().getActiveChar(); - if (activeChar == null || _objectId == 0) return; - - L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId); - L2ItemInstance scroll = activeChar.getActiveEnchantItem(); - if (item == null || scroll == null) - { - activeChar.setActiveEnchantItem(null); - return; - } - - // can't enchant rods, hero weapons, adventurers' and shadow items - if(item.getItem().getItemType() == L2WeaponType.ROD - || item.isHeroItem() - || item.getItemId() >= 7816 && item.getItemId() <= 7831 - || item.isShadowItem()) - { - activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); - activeChar.setActiveEnchantItem(null); - return; - } - if(item.isWear()) - { - Util.handleIllegalPlayerAction(activeChar,"Player "+activeChar.getName()+" tried to enchant a weared Item", IllegalPlayerAction.PUNISH_KICK); - return; - } - - switch (item.getLocation()) - { - case INVENTORY: - case PAPERDOLL: - { - if (item.getOwnerId() != activeChar.getObjectId()) - { - activeChar.setActiveEnchantItem(null); - return; - } - break; - } - default: - { - Util.handleIllegalPlayerAction(activeChar,"Player "+activeChar.getName()+" tried to use enchant Exploit!", IllegalPlayerAction.PUNISH_KICKBAN); - return; - } - } - int itemType2 = item.getItem().getType2(); - boolean enchantItem = false; - boolean blessedScroll = false; - int crystalId = 0; - - /** pretty code ;D */ - switch (item.getItem().getCrystalType()) - { - case L2Item.CRYSTAL_A: - crystalId = 1461; - switch(scroll.getItemId()) - { - case 729: case 731: case 6569: - if(itemType2 == L2Item.TYPE2_WEAPON) - enchantItem = true; - break; - case 730: case 732: case 6570: - if((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY)) - enchantItem = true; - break; - } - break; - case L2Item.CRYSTAL_B: - crystalId = 1460; - switch(scroll.getItemId()) - { - case 947: case 949: case 6571: - if(itemType2 == L2Item.TYPE2_WEAPON) - enchantItem = true; - break; - case 948: case 950: case 6572: - if((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY)) - enchantItem = true; - break; - } - break; - case L2Item.CRYSTAL_C: - crystalId = 1459; - switch(scroll.getItemId()) - { - case 951: case 953: case 6573: - if(itemType2 == L2Item.TYPE2_WEAPON) - enchantItem = true; - break; - case 952: case 954: case 6574: - if((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY)) - enchantItem = true; - break; - } - break; - case L2Item.CRYSTAL_D: - crystalId = 1458; - switch(scroll.getItemId()) - { - case 955: case 957: case 6575: - if(itemType2 == L2Item.TYPE2_WEAPON) - enchantItem = true; - break; - case 956: case 958: case 6576: - if((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY)) - enchantItem = true; - break; - } - break; - case L2Item.CRYSTAL_S: - case L2Item.CRYSTAL_S80: - crystalId = 1462; - switch(scroll.getItemId()) - { - case 959: case 961: case 6577: - if(itemType2 == L2Item.TYPE2_WEAPON) - enchantItem = true; - break; - case 960: case 962: case 6578: - if((itemType2 == L2Item.TYPE2_SHIELD_ARMOR) || (itemType2 == L2Item.TYPE2_ACCESSORY)) - enchantItem = true; - break; - } - break; - } - - if (!enchantItem) - { - activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); - activeChar.setActiveEnchantItem(null); - return; - } - - // Get the scroll type - Yesod - if (scroll.getItemId() >= 6569 && scroll.getItemId() <= 6578) - blessedScroll = true; - else - for (int crystalscroll : CRYSTAL_SCROLLS) - if(scroll.getItemId() == crystalscroll) - { - blessedScroll = true; break; - } - - scroll = activeChar.getInventory().destroyItem("Enchant", scroll.getObjectId(), 1, activeChar, item); - if(scroll == null) - { - activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS)); - Util.handleIllegalPlayerAction(activeChar,"Player "+activeChar.getName()+" tried to enchant with a scroll he doesnt have", Config.DEFAULT_PUNISH); - activeChar.setActiveEnchantItem(null); - return; - } - - // SystemMessage sm = new SystemMessage(SystemMessageId.ENCHANT_SCROLL_CANCELLED); - // activeChar.sendPacket(sm); - - SystemMessage sm; - - int chance = 0; - int maxEnchantLevel = 0; - - if (item.getItem().getType2() == L2Item.TYPE2_WEAPON) - { - chance = Config.ENCHANT_CHANCE_WEAPON; - maxEnchantLevel = Config.ENCHANT_MAX_WEAPON; - } - else if (item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR) - { - chance = Config.ENCHANT_CHANCE_ARMOR; - maxEnchantLevel = Config.ENCHANT_MAX_ARMOR; - } - else if (item.getItem().getType2() == L2Item.TYPE2_ACCESSORY) - { - chance = Config.ENCHANT_CHANCE_JEWELRY; - maxEnchantLevel = Config.ENCHANT_MAX_JEWELRY; - } - - if (item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX - || (item.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR - && item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX_FULL)) - chance = 100; - - if (Rnd.get(100) < chance) - { - synchronized(item) - { - if (item.getOwnerId() != activeChar.getObjectId() // has just lost the item - || (item.getEnchantLevel() >= maxEnchantLevel && maxEnchantLevel != 0)) - { - activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); - activeChar.setActiveEnchantItem(null); - return; - } - if (item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY && item.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL) - { - activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); - activeChar.setActiveEnchantItem(null); - return; - } - if (item.getEnchantLevel() == 0) - { - sm = new SystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED); - sm.addItemName(item.getItemId()); - activeChar.sendPacket(sm); - } - else - { - sm = new SystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED); - sm.addNumber(item.getEnchantLevel()); - sm.addItemName(item.getItemId()); - activeChar.sendPacket(sm); - } - item.setEnchantLevel(item.getEnchantLevel()+1); - item.updateDatabase(); - } - } - else - { - if (!blessedScroll) - { - if (item.getEnchantLevel() > 0) - { - sm = new SystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_S2_EVAPORATED); - sm.addNumber(item.getEnchantLevel()); - sm.addItemName(item.getItemId()); - activeChar.sendPacket(sm); - } - else - { - sm = new SystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_EVAPORATED); - sm.addItemName(item.getItemId()); - activeChar.sendPacket(sm); - } - } - else - { - sm = new SystemMessage(SystemMessageId.BLESSED_ENCHANT_FAILED); - activeChar.sendPacket(sm); - } - - if (!blessedScroll) - { - if (item.getEnchantLevel() > 0) - { - sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED); - sm.addNumber(item.getEnchantLevel()); - sm.addItemName(item.getItemId()); - activeChar.sendPacket(sm); - } - else - { - sm = new SystemMessage(SystemMessageId.S1_DISARMED); - sm.addItemName(item.getItemId()); - activeChar.sendPacket(sm); - } - - if (item.isEquipped()) - { - L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getLocationSlot()); - InventoryUpdate iu = new InventoryUpdate(); - for (int i = 0; i < unequiped.length; i++) - { - iu.addModifiedItem(unequiped[i]); - } - activeChar.sendPacket(iu); - - activeChar.broadcastUserInfo(); - } - - int count = item.getCrystalCount() - (item.getItem().getCrystalCount() +1) / 2; - if (count < 1) count = 1; - - L2ItemInstance destroyItem = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null); - if (destroyItem == null) - { - activeChar.setActiveEnchantItem(null); - return; - } - - L2ItemInstance crystals = activeChar.getInventory().addItem("Enchant", crystalId, count, activeChar, destroyItem); - - sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S); - sm.addItemName(crystals.getItemId()); - sm.addNumber(count); - activeChar.sendPacket(sm); - - if (!Config.FORCE_INVENTORY_UPDATE) - { - InventoryUpdate iu = new InventoryUpdate(); - if (destroyItem.getCount() == 0) iu.addRemovedItem(destroyItem); - else iu.addModifiedItem(destroyItem); - iu.addItem(crystals); - - activeChar.sendPacket(iu); - } - else activeChar.sendPacket(new ItemList(activeChar, true)); - - StatusUpdate su = new StatusUpdate(activeChar.getObjectId()); - su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad()); - activeChar.sendPacket(su); - - activeChar.broadcastUserInfo(); - - L2World world = L2World.getInstance(); - world.removeObject(destroyItem); - } - else - { - item.setEnchantLevel(0); - item.updateDatabase(); - } - } - sm = null; - - StatusUpdate su = new StatusUpdate(activeChar.getObjectId()); - su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad()); - activeChar.sendPacket(su); - su = null; - - activeChar.sendPacket(new EnchantResult(item.getEnchantLevel())); //FIXME i'm really not sure about this... - activeChar.sendPacket(new ItemList(activeChar, false)); //TODO update only the enchanted item - activeChar.broadcastUserInfo(); - activeChar.setActiveEnchantItem(null); - } - - /* (non-Javadoc) - * @see net.sf.l2j.gameserver.clientpackets.ClientBasePacket#getType() - */ - @Override + { + L2PcInstance activeChar = getClient().getActiveChar(); + if (activeChar == null || _objectId == 0) + return; + + L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId); + L2ItemInstance scroll = activeChar.getActiveEnchantItem(); + if (item == null || scroll == null) + { + activeChar.setActiveEnchantItem(null); + return; + } + + // can't enchant rods, hero weapons, adventurers' and shadow items + if (item.getItem().getItemType() == L2WeaponType.ROD || item.isHeroItem() || item.getItemId() >= 7816 && item.getItemId() <= 7831 || item.isShadowItem()) + { + activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); + activeChar.setActiveEnchantItem(null); + return; + } + if (item.isWear()) + { + Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant a weared Item", IllegalPlayerAction.PUNISH_KICK); + return; + } + + switch (item.getLocation()) + { + case INVENTORY: + case PAPERDOLL: + { + if (item.getOwnerId() != activeChar.getObjectId()) + { + activeChar.setActiveEnchantItem(null); + return; + } + break; + } + default: + { + Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to use enchant Exploit!", IllegalPlayerAction.PUNISH_KICKBAN); + return; + } + } + int itemType2 = item.getItem().getType2(); + boolean enchantItem = false; + boolean blessedScroll = false; + int crystalId = 0; + + /** pretty code ;D */ + switch (item.getItem().getCrystalType()) + { + case L2Item.CRYSTAL_A: + crystalId = 1461; + switch (scroll.getItemId()) + { + case 729: + case 731: + case 6569: + if (itemType2 == L2Item.TYPE2_WEAPON) + enchantItem = true; + break; + case 730: + case 732: + case 6570: + if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) + enchantItem = true; + break; + } + break; + case L2Item.CRYSTAL_B: + crystalId = 1460; + switch (scroll.getItemId()) + { + case 947: + case 949: + case 6571: + if (itemType2 == L2Item.TYPE2_WEAPON) + enchantItem = true; + break; + case 948: + case 950: + case 6572: + if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) + enchantItem = true; + break; + } + break; + case L2Item.CRYSTAL_C: + crystalId = 1459; + switch (scroll.getItemId()) + { + case 951: + case 953: + case 6573: + if (itemType2 == L2Item.TYPE2_WEAPON) + enchantItem = true; + break; + case 952: + case 954: + case 6574: + if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) + enchantItem = true; + break; + } + break; + case L2Item.CRYSTAL_D: + crystalId = 1458; + switch (scroll.getItemId()) + { + case 955: + case 957: + case 6575: + if (itemType2 == L2Item.TYPE2_WEAPON) + enchantItem = true; + break; + case 956: + case 958: + case 6576: + if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) + enchantItem = true; + break; + } + break; + case L2Item.CRYSTAL_S: + case L2Item.CRYSTAL_S80: + crystalId = 1462; + switch (scroll.getItemId()) + { + case 959: + case 961: + case 6577: + if (itemType2 == L2Item.TYPE2_WEAPON) + enchantItem = true; + break; + case 960: + case 962: + case 6578: + if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR + || itemType2 == L2Item.TYPE2_ACCESSORY) + enchantItem = true; + break; + } + break; + } + + if (!enchantItem) + { + activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); + activeChar.setActiveEnchantItem(null); + return; + } + + // Check the scroll type, and if it functions like "blessed" set it to true for being "blessedScroll" - Yesod + if (scroll.getItemId() >= 6569 && scroll.getItemId() <= 6578) + blessedScroll = true; + + scroll = activeChar.getInventory().destroyItem("Enchant", scroll.getObjectId(), 1, activeChar, item); + if (scroll == null) + { + activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS)); + Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant with a scroll he doesn't have", Config.DEFAULT_PUNISH); + activeChar.setActiveEnchantItem(null); + return; + } + + SystemMessage sm; + + int chance = 0; + int maxEnchantLevel = 0; + + if (item.getItem().getType2() == L2Item.TYPE2_WEAPON) + { + for (int scrollId : ENCHANT_SCROLLS) + { + if (scroll.getItemId() == scrollId) + { + chance = Config.ENCHANT_CHANCE_WEAPON; + break; + } + } + for (int scrollId : BLESSED_SCROLLS) + { + if (scroll.getItemId() == scrollId) + { + chance = Config.BLESSED_ENCHANT_CHANCE_WEAPON; + break; + } + } + maxEnchantLevel = Config.ENCHANT_MAX_WEAPON; + } + else if (item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR) + { + for (int scrollId : ENCHANT_SCROLLS) + { + if (scroll.getItemId() == scrollId) + { + chance = Config.ENCHANT_CHANCE_ARMOR; + break; + } + } + for (int scrollId : BLESSED_SCROLLS) + { + if (scroll.getItemId() == scrollId) + { + chance = Config.BLESSED_ENCHANT_CHANCE_ARMOR; + break; + } + } + maxEnchantLevel = Config.ENCHANT_MAX_ARMOR; + } + else if (item.getItem().getType2() == L2Item.TYPE2_ACCESSORY) + { + for (int scrollId : ENCHANT_SCROLLS) + { + if (scroll.getItemId() == scrollId) + { + chance = Config.ENCHANT_CHANCE_JEWELRY; + break; + } + } + for (int scrollId : BLESSED_SCROLLS) + { + if (scroll.getItemId() == scrollId) + { + chance = Config.BLESSED_ENCHANT_CHANCE_JEWELRY; + break; + } + } + maxEnchantLevel = Config.ENCHANT_MAX_JEWELRY; + } + + if (item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX || item.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR && item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX_FULL) + chance = 100; + + if (Rnd.get(100) < chance) + { + synchronized (item) + { + if (item.getOwnerId() != activeChar.getObjectId() // has just lost the item + || item.getEnchantLevel() >= maxEnchantLevel && maxEnchantLevel != 0) + { + activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); + activeChar.setActiveEnchantItem(null); + return; + } + if (item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY + && item.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL) + { + activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); + activeChar.setActiveEnchantItem(null); + return; + } + if (item.getEnchantLevel() == 0) + { + sm = new SystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED); + sm.addItemName(item.getItemId()); + activeChar.sendPacket(sm); + } + else + { + sm = new SystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED); + sm.addNumber(item.getEnchantLevel()); + sm.addItemName(item.getItemId()); + activeChar.sendPacket(sm); + } + item.setEnchantLevel(item.getEnchantLevel() + 1); + item.updateDatabase(); + } + } + else + { + if (!blessedScroll) + { + if (item.getEnchantLevel() > 0) + { + sm = new SystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_S2_EVAPORATED); + sm.addNumber(item.getEnchantLevel()); + sm.addItemName(item.getItemId()); + activeChar.sendPacket(sm); + } + else + { + sm = new SystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_EVAPORATED); + sm.addItemName(item.getItemId()); + activeChar.sendPacket(sm); + } + } + else + { + sm = new SystemMessage(SystemMessageId.BLESSED_ENCHANT_FAILED); + activeChar.sendPacket(sm); + } + + if (!blessedScroll) + { + if (item.getEnchantLevel() > 0) + { + sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED); + sm.addNumber(item.getEnchantLevel()); + sm.addItemName(item.getItemId()); + activeChar.sendPacket(sm); + } + else + { + sm = new SystemMessage(SystemMessageId.S1_DISARMED); + sm.addItemName(item.getItemId()); + activeChar.sendPacket(sm); + } + + if (item.isEquipped()) + { + L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getLocationSlot()); + InventoryUpdate iu = new InventoryUpdate(); + for (int i = 0; i < unequiped.length; i++) + { + iu.addModifiedItem(unequiped[i]); + } + activeChar.sendPacket(iu); + + activeChar.broadcastUserInfo(); + } + + int count = item.getCrystalCount() - (item.getItem().getCrystalCount() + 1) / 2; + if (count < 1) + count = 1; + + L2ItemInstance destroyItem = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null); + if (destroyItem == null) + { + activeChar.setActiveEnchantItem(null); + return; + } + + L2ItemInstance crystals = activeChar.getInventory().addItem("Enchant", crystalId, count, activeChar, destroyItem); + + sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S); + sm.addItemName(crystals.getItemId()); + sm.addNumber(count); + activeChar.sendPacket(sm); + + if (!Config.FORCE_INVENTORY_UPDATE) + { + InventoryUpdate iu = new InventoryUpdate(); + if (destroyItem.getCount() == 0) + iu.addRemovedItem(destroyItem); + else + iu.addModifiedItem(destroyItem); + iu.addItem(crystals); + + activeChar.sendPacket(iu); + } + else + activeChar.sendPacket(new ItemList(activeChar, true)); + + StatusUpdate su = new StatusUpdate(activeChar.getObjectId()); + su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad()); + activeChar.sendPacket(su); + + activeChar.broadcastUserInfo(); + + L2World world = L2World.getInstance(); + world.removeObject(destroyItem); + } + else + { + item.setEnchantLevel(0); + item.updateDatabase(); + } + } + sm = null; + + StatusUpdate su = new StatusUpdate(activeChar.getObjectId()); + su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad()); + activeChar.sendPacket(su); + su = null; + + activeChar.sendPacket(new EnchantResult(item.getEnchantLevel())); + activeChar.sendPacket(new ItemList(activeChar, false)); + activeChar.broadcastUserInfo(); + activeChar.setActiveEnchantItem(null); + } + + /* + * (non-Javadoc) + * + * @see net.sf.l2j.gameserver.clientpackets.ClientBasePacket#getType() + */ + @Override public String getType() - { - return _C__58_REQUESTENCHANTITEM; - } + { + return _C__58_REQUESTENCHANTITEM; + } }