L2SkillChangeWeapon.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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.L2ItemInstance;
  18. import com.l2jserver.gameserver.model.L2Object;
  19. import com.l2jserver.gameserver.model.L2Skill;
  20. import com.l2jserver.gameserver.model.actor.L2Character;
  21. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  22. import com.l2jserver.gameserver.model.itemcontainer.Inventory;
  23. import com.l2jserver.gameserver.network.SystemMessageId;
  24. import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
  25. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  26. import com.l2jserver.gameserver.templates.StatsSet;
  27. import com.l2jserver.gameserver.templates.item.L2Weapon;
  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_LRHAND);
  60. if (wpn != null)
  61. {
  62. if (wpn.isWear())
  63. return;
  64. if (wpn.isAugmented())
  65. return;
  66. int newItemId = 0;
  67. int enchantLevel = 0;
  68. Elementals elementals = null;
  69. if (weaponItem.getChangeWeaponId() != 0)
  70. {
  71. newItemId = weaponItem.getChangeWeaponId();
  72. enchantLevel = wpn.getEnchantLevel();
  73. elementals = wpn.getElementals();
  74. if (newItemId == -1)
  75. return;
  76. L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(wpn.getItem().getBodyPart());
  77. InventoryUpdate iu = new InventoryUpdate();
  78. for (L2ItemInstance item: unequiped)
  79. iu.addModifiedItem(item);
  80. player.sendPacket(iu);
  81. if (unequiped.length > 0)
  82. {
  83. byte count = 0;
  84. for (L2ItemInstance item: unequiped)
  85. {
  86. if (!(item.getItem() instanceof L2Weapon))
  87. {
  88. count++;
  89. continue;
  90. }
  91. SystemMessage sm = null;
  92. if (item.getEnchantLevel() > 0)
  93. {
  94. sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
  95. sm.addNumber(item.getEnchantLevel());
  96. sm.addItemName(item);
  97. }
  98. else
  99. {
  100. sm = new SystemMessage(SystemMessageId.S1_DISARMED);
  101. sm.addItemName(item);
  102. }
  103. player.sendPacket(sm);
  104. }
  105. if (count == unequiped.length)
  106. return;
  107. }
  108. else
  109. {
  110. return;
  111. }
  112. L2ItemInstance destroyItem = player.getInventory().destroyItem("ChangeWeapon", wpn, player, null);
  113. if (destroyItem == null)
  114. return;
  115. L2ItemInstance newItem = player.getInventory().addItem("ChangeWeapon", newItemId, 1, player, destroyItem);
  116. if (newItem == null)
  117. return;
  118. if (elementals != null && elementals.getElement() != -1 && elementals.getValue() != -1)
  119. newItem.setElementAttr(elementals.getElement(), elementals.getValue());
  120. newItem.setEnchantLevel(enchantLevel);
  121. player.getInventory().equipItem(newItem);
  122. SystemMessage msg = null;
  123. if (newItem.getEnchantLevel() > 0)
  124. {
  125. msg = new SystemMessage(SystemMessageId.S1_S2_EQUIPPED);
  126. msg.addNumber(newItem.getEnchantLevel());
  127. msg.addItemName(newItem);
  128. }
  129. else
  130. {
  131. msg = new SystemMessage(SystemMessageId.S1_EQUIPPED);
  132. msg.addItemName(newItem);
  133. }
  134. player.sendPacket(msg);
  135. InventoryUpdate u = new InventoryUpdate();
  136. u.addRemovedItem(destroyItem);
  137. u.addItem(newItem);
  138. player.sendPacket(u);
  139. player.broadcastUserInfo();
  140. }
  141. }
  142. }
  143. }