/* * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ package com.l2jserver.gameserver.skills.l2skills; import com.l2jserver.gameserver.model.Elementals; import com.l2jserver.gameserver.model.L2ItemInstance; import com.l2jserver.gameserver.model.L2Object; import com.l2jserver.gameserver.model.L2Skill; import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.itemcontainer.Inventory; import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate; import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.templates.StatsSet; import com.l2jserver.gameserver.templates.item.L2Weapon; /** * * @author nBd */ public class L2SkillChangeWeapon extends L2Skill { /** * @param set */ public L2SkillChangeWeapon(StatsSet set) { super(set); } /** * @see com.l2jserver.gameserver.model.L2Skill#useSkill(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.L2Object[]) */ @Override public void useSkill(L2Character caster, L2Object[] targets) { if(caster.isAlikeDead()) return; if (!(caster instanceof L2PcInstance)) return; L2PcInstance player = (L2PcInstance)caster; if (player.isEnchanting()) return; L2Weapon weaponItem = player.getActiveWeaponItem(); if (weaponItem == null) return; L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND); if (wpn == null) wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LRHAND); if (wpn != null) { if (wpn.isWear()) return; if (wpn.isAugmented()) return; int newItemId = 0; int enchantLevel = 0; Elementals elementals = null; if (weaponItem.getChangeWeaponId() != 0) { newItemId = weaponItem.getChangeWeaponId(); enchantLevel = wpn.getEnchantLevel(); elementals = wpn.getElementals(); if (newItemId == -1) return; L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(wpn.getItem().getBodyPart()); InventoryUpdate iu = new InventoryUpdate(); for (L2ItemInstance item: unequiped) iu.addModifiedItem(item); player.sendPacket(iu); if (unequiped.length > 0) { byte count = 0; for (L2ItemInstance item: unequiped) { if (!(item.getItem() instanceof L2Weapon)) { count++; continue; } SystemMessage sm = null; if (item.getEnchantLevel() > 0) { sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED); sm.addNumber(item.getEnchantLevel()); sm.addItemName(item); } else { sm = new SystemMessage(SystemMessageId.S1_DISARMED); sm.addItemName(item); } player.sendPacket(sm); } if (count == unequiped.length) return; } else { return; } L2ItemInstance destroyItem = player.getInventory().destroyItem("ChangeWeapon", wpn, player, null); if (destroyItem == null) return; L2ItemInstance newItem = player.getInventory().addItem("ChangeWeapon", newItemId, 1, player, destroyItem); if (newItem == null) return; if (elementals != null && elementals.getElement() != -1 && elementals.getValue() != -1) newItem.setElementAttr(elementals.getElement(), elementals.getValue()); newItem.setEnchantLevel(enchantLevel); player.getInventory().equipItem(newItem); SystemMessage msg = null; if (newItem.getEnchantLevel() > 0) { msg = new SystemMessage(SystemMessageId.S1_S2_EQUIPPED); msg.addNumber(newItem.getEnchantLevel()); msg.addItemName(newItem); } else { msg = new SystemMessage(SystemMessageId.S1_EQUIPPED); msg.addItemName(newItem); } player.sendPacket(msg); InventoryUpdate u = new InventoryUpdate(); u.addRemovedItem(destroyItem); u.addItem(newItem); player.sendPacket(u); player.broadcastUserInfo(); } } } }