SummonPet.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /*
  2. * Copyright (C) 2004-2013 L2J DataPack
  3. *
  4. * This file is part of L2J DataPack.
  5. *
  6. * L2J DataPack is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J DataPack is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package handlers.effecthandlers;
  20. import java.util.logging.Level;
  21. import com.l2jserver.gameserver.datatables.NpcTable;
  22. import com.l2jserver.gameserver.datatables.PetDataTable;
  23. import com.l2jserver.gameserver.model.L2PetData;
  24. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  25. import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
  26. import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
  27. import com.l2jserver.gameserver.model.effects.EffectTemplate;
  28. import com.l2jserver.gameserver.model.effects.L2Effect;
  29. import com.l2jserver.gameserver.model.effects.L2EffectType;
  30. import com.l2jserver.gameserver.model.holders.PetItemHolder;
  31. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  32. import com.l2jserver.gameserver.model.stats.Env;
  33. import com.l2jserver.gameserver.network.SystemMessageId;
  34. import com.l2jserver.gameserver.network.serverpackets.PetItemList;
  35. /**
  36. * @author UnAfraid
  37. */
  38. public class SummonPet extends L2Effect
  39. {
  40. public SummonPet(Env env, EffectTemplate template)
  41. {
  42. super(env, template);
  43. }
  44. @Override
  45. public L2EffectType getEffectType()
  46. {
  47. return L2EffectType.SUMMON_PET;
  48. }
  49. @Override
  50. public boolean onStart()
  51. {
  52. if ((getEffector() == null) || (getEffected() == null) || !getEffector().isPlayer() || !getEffected().isPlayer() || getEffected().isAlikeDead())
  53. {
  54. return false;
  55. }
  56. final L2PcInstance player = getEffector().getActingPlayer();
  57. if (player.isInOlympiadMode())
  58. {
  59. player.sendPacket(SystemMessageId.THIS_SKILL_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT);
  60. return false;
  61. }
  62. if ((player.hasSummon() || player.isMounted()))
  63. {
  64. player.sendPacket(SystemMessageId.YOU_ALREADY_HAVE_A_PET);
  65. return false;
  66. }
  67. final PetItemHolder holder = player.removeScript(PetItemHolder.class);
  68. if (holder == null)
  69. {
  70. _log.log(Level.WARNING, "Summoning pet without attaching PetItemHandler!", new Throwable());
  71. return false;
  72. }
  73. final L2ItemInstance item = holder.getItem();
  74. if (player.getInventory().getItemByObjectId(item.getObjectId()) != item)
  75. {
  76. _log.log(Level.WARNING, "Player: " + player + " is trying to summon pet from item that he doesn't owns.");
  77. return false;
  78. }
  79. final L2PetData petData = PetDataTable.getInstance().getPetDataByItemId(item.getItemId());
  80. if ((petData == null) || (petData.getNpcId() == -1))
  81. {
  82. return false;
  83. }
  84. final L2NpcTemplate npcTemplate = NpcTable.getInstance().getTemplate(petData.getNpcId());
  85. final L2PetInstance pet = L2PetInstance.spawnPet(npcTemplate, player, item);
  86. pet.setShowSummonAnimation(true);
  87. if (!pet.isRespawned())
  88. {
  89. pet.setCurrentHp(pet.getMaxHp());
  90. pet.setCurrentMp(pet.getMaxMp());
  91. pet.getStat().setExp(pet.getExpForThisLevel());
  92. pet.setCurrentFed(pet.getMaxFed());
  93. }
  94. pet.setRunning();
  95. if (!pet.isRespawned())
  96. {
  97. pet.store();
  98. }
  99. player.setPet(pet);
  100. pet.spawnMe(player.getX() + 50, player.getY() + 100, player.getZ());
  101. pet.startFeed();
  102. item.setEnchantLevel(pet.getLevel());
  103. if (pet.getCurrentFed() <= 0)
  104. {
  105. pet.unSummon(player);
  106. }
  107. else
  108. {
  109. pet.startFeed();
  110. }
  111. pet.setFollowStatus(true);
  112. pet.getOwner().sendPacket(new PetItemList(pet.getInventory().getItems()));
  113. pet.broadcastStatusUpdate();
  114. return true;
  115. }
  116. @Override
  117. public boolean onActionTime()
  118. {
  119. return false;
  120. }
  121. }