PlainsOfLizardman.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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 ai.group_template;
  16. import com.l2jserver.gameserver.ai.CtrlIntention;
  17. import com.l2jserver.gameserver.datatables.SkillTable;
  18. import com.l2jserver.gameserver.handler.ISkillHandler;
  19. import com.l2jserver.gameserver.handler.SkillHandler;
  20. import com.l2jserver.gameserver.model.L2CharPosition;
  21. import com.l2jserver.gameserver.model.L2Skill;
  22. import com.l2jserver.gameserver.model.actor.L2Attackable;
  23. import com.l2jserver.gameserver.model.actor.L2Character;
  24. import com.l2jserver.gameserver.model.actor.L2Npc;
  25. import com.l2jserver.gameserver.model.actor.L2Playable;
  26. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  27. import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
  28. /**
  29. ** @author Gnacik
  30. **
  31. */
  32. public class PlainsOfLizardman extends L2AttackableAIScript
  33. {
  34. private static final int[] _MOBS = { 18864, 18865, 18866, 18868 };
  35. private static final int FANTASY_MUSHROOM = 18864;
  36. private static final int FANTASY_MUSHROOM_SKILL = 6427;
  37. private static final int RAINBOW_FROG = 18866;
  38. private static final int RAINBOW_FROG_SKILL = 6429;
  39. private static final int STICKY_MUSHROOM = 18865;
  40. private static final int STICKY_MUSHROOM_SKILL = 6428;
  41. private static final int ENERGY_PLANT = 18868;
  42. private static final int ENERGY_PLANT_SKILL = 6430;
  43. public PlainsOfLizardman(int questId, String name, String descr)
  44. {
  45. super(questId, name, descr);
  46. registerMobs(_MOBS, QuestEventType.ON_ATTACK);
  47. }
  48. public static void main(String[] args)
  49. {
  50. new PlainsOfLizardman(-1, "PlainsOfLizardman", "ai");
  51. }
  52. @Override
  53. public String onAdvEvent (String event, L2Npc npc, L2PcInstance player)
  54. {
  55. if (player != null && !player.isAlikeDead())
  56. {
  57. boolean isPet = false;
  58. if (event.endsWith("_pet") && player.getPet() != null && !player.getPet().isDead())
  59. isPet = true;
  60. if (event.startsWith("rainbow_frog"))
  61. {
  62. triggerSkill(npc, isPet ? player.getPet() : player, RAINBOW_FROG_SKILL, 1);
  63. }
  64. else if (event.startsWith("energy_plant"))
  65. {
  66. triggerSkill(npc, isPet ? player.getPet() : player, ENERGY_PLANT_SKILL, 1);
  67. }
  68. else if (event.startsWith("sticky_mushroom"))
  69. {
  70. triggerSkill(npc, isPet ? player.getPet() : player, STICKY_MUSHROOM_SKILL, 1);
  71. }
  72. else if (event.startsWith("fantasy_mushroom"))
  73. {
  74. L2Skill skill = SkillTable.getInstance().getInfo(FANTASY_MUSHROOM_SKILL, 1);
  75. npc.doCast(skill);
  76. for(L2Character target : npc.getKnownList().getKnownCharactersInRadius(200))
  77. {
  78. if (target != null && target instanceof L2Attackable && target.getAI() != null)
  79. {
  80. skill.getEffects(npc, target);
  81. attackPlayer((L2Attackable) target, isPet ? player.getPet() : player);
  82. }
  83. }
  84. npc.doDie(player);
  85. }
  86. }
  87. return super.onAdvEvent(event,npc,player);
  88. }
  89. @Override
  90. public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
  91. {
  92. if (npc.isDead())
  93. return null;
  94. if (npc.getNpcId() == RAINBOW_FROG)
  95. {
  96. if (isPet)
  97. startQuestTimer("rainbow_frog_pet", 2000, npc, attacker);
  98. else
  99. startQuestTimer("rainbow_frog", 2000, npc, attacker);
  100. npc.doDie(attacker);
  101. }
  102. else if (npc.getNpcId() == STICKY_MUSHROOM)
  103. {
  104. if (isPet)
  105. startQuestTimer("sticky_mushroom_pet", 2000, npc, attacker);
  106. else
  107. startQuestTimer("sticky_mushroom", 2000, npc, attacker);
  108. npc.doDie(attacker);
  109. }
  110. else if (npc.getNpcId() == ENERGY_PLANT)
  111. {
  112. if (isPet)
  113. startQuestTimer("energy_plant_pet", 2000, npc, attacker);
  114. else
  115. startQuestTimer("energy_plant", 2000, npc, attacker);
  116. npc.doDie(attacker);
  117. }
  118. else if (npc.getNpcId() == FANTASY_MUSHROOM)
  119. {
  120. for(L2Character target : npc.getKnownList().getKnownCharactersInRadius(1000))
  121. {
  122. if (target != null && target instanceof L2Attackable && target.getAI() != null)
  123. {
  124. target.setIsRunning(true);
  125. target.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(npc.getX(),npc.getY(), npc.getZ(), 0 ));
  126. }
  127. }
  128. if (isPet)
  129. startQuestTimer("fantasy_mushroom_pet", 3000, npc, attacker);
  130. else
  131. startQuestTimer("fantasy_mushroom", 3000, npc, attacker);
  132. }
  133. return super.onAttack(npc, attacker, damage, isPet);
  134. }
  135. private void triggerSkill(L2Character caster, L2Playable playable, int skill_id, int skill_level)
  136. {
  137. L2Character[] targets = new L2Character[1];
  138. targets[0] = playable;
  139. L2Skill trigger = SkillTable.getInstance().getInfo(skill_id, skill_level);
  140. if (trigger != null
  141. && playable.isInsideRadius(caster, trigger.getCastRange(), true, false)
  142. && playable.getInstanceId() == caster.getInstanceId())
  143. {
  144. playable.broadcastPacket(new MagicSkillUse(playable, playable, skill_id, skill_level, 0, 0));
  145. ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(trigger.getSkillType());
  146. if (handler != null)
  147. handler.useSkill(playable, trigger, targets);
  148. else
  149. trigger.useSkill(playable, targets);
  150. }
  151. }
  152. private void attackPlayer(L2Attackable npc, L2Playable playable)
  153. {
  154. npc.setIsRunning(true);
  155. npc.addDamageHate(playable, 0, 999);
  156. npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, playable);
  157. }
  158. }