L2SkillChangeWeapon.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package com.l2jserver.gameserver.skills.l2skills;
  16. import com.l2jserver.gameserver.model.Elementals;
  17. import com.l2jserver.gameserver.model.L2Object;
  18. import com.l2jserver.gameserver.model.L2Skill;
  19. import com.l2jserver.gameserver.model.StatsSet;
  20. import com.l2jserver.gameserver.model.actor.L2Character;
  21. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  22. import com.l2jserver.gameserver.model.item.L2Weapon;
  23. import com.l2jserver.gameserver.model.item.instance.L2ItemInstance;
  24. import com.l2jserver.gameserver.model.itemcontainer.Inventory;
  25. import com.l2jserver.gameserver.network.SystemMessageId;
  26. import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
  27. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  28. /**
  29. *
  30. * @author nBd
  31. */
  32. public class L2SkillChangeWeapon extends L2Skill
  33. {
  34. /**
  35. * @param set
  36. */
  37. public L2SkillChangeWeapon(StatsSet set)
  38. {
  39. super(set);
  40. }
  41. /**
  42. * @see com.l2jserver.gameserver.model.L2Skill#useSkill(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.L2Object[])
  43. */
  44. @Override
  45. public void useSkill(L2Character caster, L2Object[] targets)
  46. {
  47. if(caster.isAlikeDead())
  48. return;
  49. if (!(caster instanceof L2PcInstance))
  50. return;
  51. L2PcInstance player = (L2PcInstance)caster;
  52. if (player.isEnchanting())
  53. return;
  54. L2Weapon weaponItem = player.getActiveWeaponItem();
  55. if (weaponItem == null)
  56. return;
  57. L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  58. if (wpn == null)
  59. wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  60. if (wpn != null)
  61. {
  62. if (wpn.isAugmented())
  63. return;
  64. int newItemId = 0;
  65. int enchantLevel = 0;
  66. Elementals elementals = null;
  67. if (weaponItem.getChangeWeaponId() != 0)
  68. {
  69. newItemId = weaponItem.getChangeWeaponId();
  70. enchantLevel = wpn.getEnchantLevel();
  71. elementals = wpn.getElementals() == null ? null : wpn.getElementals()[0];
  72. if (newItemId == -1)
  73. return;
  74. L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(wpn.getItem().getBodyPart());
  75. InventoryUpdate iu = new InventoryUpdate();
  76. for (L2ItemInstance item: unequiped)
  77. iu.addModifiedItem(item);
  78. player.sendPacket(iu);
  79. if (unequiped.length > 0)
  80. {
  81. byte count = 0;
  82. for (L2ItemInstance item: unequiped)
  83. {
  84. if (!(item.getItem() instanceof L2Weapon))
  85. {
  86. count++;
  87. continue;
  88. }
  89. SystemMessage sm = null;
  90. if (item.getEnchantLevel() > 0)
  91. {
  92. sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
  93. sm.addNumber(item.getEnchantLevel());
  94. sm.addItemName(item);
  95. }
  96. else
  97. {
  98. sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISARMED);
  99. sm.addItemName(item);
  100. }
  101. player.sendPacket(sm);
  102. }
  103. if (count == unequiped.length)
  104. return;
  105. }
  106. else
  107. {
  108. return;
  109. }
  110. L2ItemInstance destroyItem = player.getInventory().destroyItem("ChangeWeapon", wpn, player, null);
  111. if (destroyItem == null)
  112. return;
  113. L2ItemInstance newItem = player.getInventory().addItem("ChangeWeapon", newItemId, 1, player, destroyItem);
  114. if (newItem == null)
  115. return;
  116. if (elementals != null && elementals.getElement() != -1 && elementals.getValue() != -1)
  117. newItem.setElementAttr(elementals.getElement(), elementals.getValue());
  118. newItem.setEnchantLevel(enchantLevel);
  119. player.getInventory().equipItem(newItem);
  120. SystemMessage msg = null;
  121. if (newItem.getEnchantLevel() > 0)
  122. {
  123. msg = SystemMessage.getSystemMessage(SystemMessageId.S1_S2_EQUIPPED);
  124. msg.addNumber(newItem.getEnchantLevel());
  125. msg.addItemName(newItem);
  126. }
  127. else
  128. {
  129. msg = SystemMessage.getSystemMessage(SystemMessageId.S1_EQUIPPED);
  130. msg.addItemName(newItem);
  131. }
  132. player.sendPacket(msg);
  133. InventoryUpdate u = new InventoryUpdate();
  134. u.addRemovedItem(destroyItem);
  135. u.addItem(newItem);
  136. player.sendPacket(u);
  137. player.broadcastUserInfo();
  138. }
  139. }
  140. }
  141. }