EnergyStone.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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 net.sf.l2j.gameserver.handler.itemhandlers;
  16. import net.sf.l2j.gameserver.datatables.SkillTable;
  17. import net.sf.l2j.gameserver.handler.IItemHandler;
  18. import net.sf.l2j.gameserver.model.L2Character;
  19. import net.sf.l2j.gameserver.model.L2ItemInstance;
  20. import net.sf.l2j.gameserver.model.L2Skill;
  21. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  22. import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
  23. import net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance;
  24. import net.sf.l2j.gameserver.network.SystemMessageId;
  25. import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
  26. import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate;
  27. import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
  28. import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  29. import net.sf.l2j.gameserver.skills.effects.EffectCharge;
  30. import net.sf.l2j.gameserver.skills.l2skills.L2SkillCharge;
  31. public class EnergyStone implements IItemHandler
  32. {
  33. private static final int[] ITEM_IDS =
  34. {
  35. 5589
  36. };
  37. private EffectCharge _effect;
  38. private L2SkillCharge _skill;
  39. /**
  40. *
  41. * @see net.sf.l2j.gameserver.handler.IItemHandler#useItem(net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance, net.sf.l2j.gameserver.model.L2ItemInstance)
  42. */
  43. public void useItem(L2PlayableInstance playable, L2ItemInstance item)
  44. {
  45. L2PcInstance activeChar;
  46. if (playable instanceof L2PcInstance)
  47. {
  48. activeChar = (L2PcInstance) playable;
  49. }
  50. else if (playable instanceof L2PetInstance)
  51. {
  52. activeChar = ((L2PetInstance) playable).getOwner();
  53. }
  54. else
  55. return;
  56. if (item.getItemId() != 5589)
  57. return;
  58. int classid = activeChar.getClassId().getId();
  59. if (classid == 2 || classid == 48 || classid == 88 || classid == 114)
  60. {
  61. if (activeChar.isAllSkillsDisabled())
  62. {
  63. ActionFailed af = ActionFailed.STATIC_PACKET;
  64. activeChar.sendPacket(af);
  65. return;
  66. }
  67. if (activeChar.isSitting())
  68. {
  69. activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_MOVE_SITTING));
  70. return;
  71. }
  72. _skill = getChargeSkill(activeChar);
  73. if (_skill == null)
  74. {
  75. SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
  76. sm.addItemName(5589);
  77. activeChar.sendPacket(sm);
  78. return;
  79. }
  80. _effect = activeChar.getChargeEffect();
  81. if (_effect == null)
  82. {
  83. L2Skill dummy = SkillTable.getInstance().getInfo(_skill.getId(), _skill.getLevel());
  84. if (dummy != null)
  85. {
  86. dummy.getEffects((L2Character) null, activeChar);
  87. activeChar.destroyItemWithoutTrace("Consume", item.getObjectId(), 1, null, false);
  88. return;
  89. }
  90. return;
  91. }
  92. if (_effect.getLevel() < 2)
  93. {
  94. MagicSkillUse MSU = new MagicSkillUse(playable, activeChar, _skill.getId(), 1, 1, 0);
  95. activeChar.sendPacket(MSU);
  96. activeChar.broadcastPacket(MSU);
  97. _effect.addNumCharges(1);
  98. activeChar.sendPacket(new EtcStatusUpdate(activeChar));
  99. activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
  100. }
  101. else if (_effect.getLevel() == 2)
  102. {
  103. activeChar.sendPacket(new SystemMessage(SystemMessageId.FORCE_MAXLEVEL_REACHED));
  104. }
  105. SystemMessage sm = new SystemMessage(SystemMessageId.FORCE_INCREASED_TO_S1);
  106. sm.addNumber(_effect.getLevel());
  107. activeChar.sendPacket(sm);
  108. return;
  109. }
  110. else
  111. {
  112. SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
  113. sm.addItemName(5589);
  114. activeChar.sendPacket(sm);
  115. return;
  116. }
  117. }
  118. /**
  119. *
  120. * @param activeChar
  121. * @return
  122. */
  123. private L2SkillCharge getChargeSkill(L2PcInstance activeChar)
  124. {
  125. L2Skill[] skills = activeChar.getAllSkills();
  126. for (L2Skill s : skills)
  127. {
  128. if (s.getId() == 50 || s.getId() == 8)
  129. {
  130. return (L2SkillCharge) s;
  131. }
  132. }
  133. return null;
  134. }
  135. /**
  136. *
  137. * @see net.sf.l2j.gameserver.handler.IItemHandler#getItemIds()
  138. */
  139. public int[] getItemIds()
  140. {
  141. return ITEM_IDS;
  142. }
  143. }