L2Decoy.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /*
  2. * Copyright (C) 2004-2015 L2J Server
  3. *
  4. * This file is part of L2J Server.
  5. *
  6. * L2J Server 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 Server 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 com.l2jserver.gameserver.model.actor;
  20. import java.util.Collection;
  21. import com.l2jserver.gameserver.enums.InstanceType;
  22. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  23. import com.l2jserver.gameserver.model.actor.templates.L2CharTemplate;
  24. import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
  25. import com.l2jserver.gameserver.model.items.L2Weapon;
  26. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  27. import com.l2jserver.gameserver.network.SystemMessageId;
  28. import com.l2jserver.gameserver.network.serverpackets.CharInfo;
  29. import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
  30. import com.l2jserver.gameserver.taskmanager.DecayTaskManager;
  31. public abstract class L2Decoy extends L2Character
  32. {
  33. private final L2PcInstance _owner;
  34. /**
  35. * Creates an abstract decoy.
  36. * @param template the decoy template
  37. * @param owner the owner
  38. */
  39. public L2Decoy(L2CharTemplate template, L2PcInstance owner)
  40. {
  41. super(template);
  42. setInstanceType(InstanceType.L2Decoy);
  43. _owner = owner;
  44. setXYZInvisible(owner.getX(), owner.getY(), owner.getZ());
  45. setIsInvul(false);
  46. }
  47. @Override
  48. public void onSpawn()
  49. {
  50. super.onSpawn();
  51. sendPacket(new CharInfo(this));
  52. }
  53. @Override
  54. public void updateAbnormalEffect()
  55. {
  56. Collection<L2PcInstance> plrs = getKnownList().getKnownPlayers().values();
  57. for (L2PcInstance player : plrs)
  58. {
  59. if (player != null)
  60. {
  61. player.sendPacket(new CharInfo(this));
  62. }
  63. }
  64. }
  65. public void stopDecay()
  66. {
  67. DecayTaskManager.getInstance().cancel(this);
  68. }
  69. @Override
  70. public void onDecay()
  71. {
  72. deleteMe(_owner);
  73. }
  74. @Override
  75. public boolean isAutoAttackable(L2Character attacker)
  76. {
  77. return _owner.isAutoAttackable(attacker);
  78. }
  79. @Override
  80. public L2ItemInstance getActiveWeaponInstance()
  81. {
  82. return null;
  83. }
  84. @Override
  85. public L2Weapon getActiveWeaponItem()
  86. {
  87. return null;
  88. }
  89. @Override
  90. public L2ItemInstance getSecondaryWeaponInstance()
  91. {
  92. return null;
  93. }
  94. @Override
  95. public L2Weapon getSecondaryWeaponItem()
  96. {
  97. return null;
  98. }
  99. @Override
  100. public final int getId()
  101. {
  102. return getTemplate().getId();
  103. }
  104. @Override
  105. public int getLevel()
  106. {
  107. return getTemplate().getLevel();
  108. }
  109. public void deleteMe(L2PcInstance owner)
  110. {
  111. decayMe();
  112. getKnownList().removeAllKnownObjects();
  113. owner.setDecoy(null);
  114. }
  115. public synchronized void unSummon(L2PcInstance owner)
  116. {
  117. if (isVisible() && !isDead())
  118. {
  119. if (getWorldRegion() != null)
  120. {
  121. getWorldRegion().removeFromZones(this);
  122. }
  123. owner.setDecoy(null);
  124. decayMe();
  125. getKnownList().removeAllKnownObjects();
  126. }
  127. }
  128. public final L2PcInstance getOwner()
  129. {
  130. return _owner;
  131. }
  132. @Override
  133. public L2PcInstance getActingPlayer()
  134. {
  135. return _owner;
  136. }
  137. @Override
  138. public L2NpcTemplate getTemplate()
  139. {
  140. return (L2NpcTemplate) super.getTemplate();
  141. }
  142. @Override
  143. public void sendInfo(L2PcInstance activeChar)
  144. {
  145. activeChar.sendPacket(new CharInfo(this));
  146. }
  147. @Override
  148. public void sendPacket(L2GameServerPacket mov)
  149. {
  150. if (getOwner() != null)
  151. {
  152. getOwner().sendPacket(mov);
  153. }
  154. }
  155. @Override
  156. public void sendPacket(SystemMessageId id)
  157. {
  158. if (getOwner() != null)
  159. {
  160. getOwner().sendPacket(id);
  161. }
  162. }
  163. }