Amaskari.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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.individual;
  16. import ai.group_template.L2AttackableAIScript;
  17. import com.l2jserver.gameserver.ai.CtrlIntention;
  18. import com.l2jserver.gameserver.instancemanager.HellboundManager;
  19. import com.l2jserver.gameserver.model.L2Effect;
  20. import com.l2jserver.gameserver.model.L2Skill;
  21. import com.l2jserver.gameserver.model.actor.L2Npc;
  22. import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
  23. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  24. import com.l2jserver.gameserver.network.NpcStringId;
  25. import com.l2jserver.gameserver.network.clientpackets.Say2;
  26. import com.l2jserver.gameserver.network.serverpackets.NpcSay;
  27. import com.l2jserver.gameserver.skills.SkillHolder;
  28. import com.l2jserver.util.Rnd;
  29. /**
  30. * Manages Amaskari's and minions' chat and some skill usage.
  31. * @author GKR
  32. */
  33. public class Amaskari extends L2AttackableAIScript
  34. {
  35. private static final int AMASKARI = 22449;
  36. private static final int AMASKARI_PRISONER = 22450;
  37. private static final int BUFF_ID = 4632;
  38. private static SkillHolder[] BUFF =
  39. {
  40. new SkillHolder(BUFF_ID, 1), new SkillHolder(BUFF_ID, 2), new SkillHolder(BUFF_ID, 3)
  41. };
  42. // private static SkillHolder INVINCIBILITY = new SkillHolder(5417, 1);
  43. private static final NpcStringId[] AMASKARI_NPCSTRING_ID =
  44. {
  45. NpcStringId.ILL_MAKE_EVERYONE_FEEL_THE_SAME_SUFFERING_AS_ME, NpcStringId.HA_HA_YES_DIE_SLOWLY_WRITHING_IN_PAIN_AND_AGONY, NpcStringId.MORE_NEED_MORE_SEVERE_PAIN, NpcStringId.SOMETHING_IS_BURNING_INSIDE_MY_BODY
  46. };
  47. private static final NpcStringId[] MINIONS_NPCSTRING_ID =
  48. {
  49. NpcStringId.AHH_MY_LIFE_IS_BEING_DRAINED_OUT, NpcStringId.THANK_YOU_FOR_SAVING_ME, NpcStringId.IT_WILL_KILL_EVERYONE, NpcStringId.EEEK_I_FEEL_SICKYOW
  50. };
  51. public Amaskari(int id, String name, String descr)
  52. {
  53. super(id, name, descr);
  54. addKillId(AMASKARI);
  55. addKillId(AMASKARI_PRISONER);
  56. addAttackId(AMASKARI);
  57. addSpawnId(AMASKARI_PRISONER);
  58. }
  59. @Override
  60. public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  61. {
  62. if (event.equalsIgnoreCase("stop_toggle"))
  63. {
  64. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getNpcId(), AMASKARI_NPCSTRING_ID[2]));
  65. ((L2MonsterInstance) npc).clearAggroList();
  66. ((L2MonsterInstance) npc).getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
  67. npc.setIsInvul(false);
  68. // npc.doCast(INVINCIBILITY.getSkill())
  69. }
  70. else if (event.equalsIgnoreCase("onspawn_msg") && (npc != null) && !npc.isDead())
  71. {
  72. if (Rnd.get(100) > 20)
  73. {
  74. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getNpcId(), MINIONS_NPCSTRING_ID[2]));
  75. }
  76. else if (Rnd.get(100) > 40)
  77. {
  78. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getNpcId(), MINIONS_NPCSTRING_ID[3]));
  79. }
  80. startQuestTimer("onspawn_msg", (Rnd.get(8) + 1) * 30000, npc, null);
  81. }
  82. return null;
  83. }
  84. @Override
  85. public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet, L2Skill skill)
  86. {
  87. if ((npc.getNpcId() == AMASKARI) && (Rnd.get(1000) < 25))
  88. {
  89. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getNpcId(), AMASKARI_NPCSTRING_ID[0]));
  90. for (L2MonsterInstance minion : ((L2MonsterInstance) npc).getMinionList().getSpawnedMinions())
  91. {
  92. if ((minion != null) && !minion.isDead() && (Rnd.get(10) == 0))
  93. {
  94. minion.broadcastPacket(new NpcSay(minion.getObjectId(), Say2.ALL, minion.getNpcId(), MINIONS_NPCSTRING_ID[0]));
  95. minion.setCurrentHp(minion.getCurrentHp() - (minion.getCurrentHp() / 5));
  96. }
  97. }
  98. }
  99. return super.onAttack(npc, attacker, damage, isPet, skill);
  100. }
  101. @Override
  102. public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
  103. {
  104. if (npc.getNpcId() == AMASKARI_PRISONER)
  105. {
  106. final L2MonsterInstance master = ((L2MonsterInstance) npc).getLeader();
  107. if ((master != null) && !master.isDead())
  108. {
  109. master.broadcastPacket(new NpcSay(master.getObjectId(), Say2.ALL, master.getNpcId(), AMASKARI_NPCSTRING_ID[1]));
  110. final L2Effect e = master.getFirstEffect(BUFF_ID);
  111. if ((e != null) && (e.getAbnormalLvl() == 3) && master.isInvul())
  112. {
  113. master.setCurrentHp(master.getCurrentHp() + (master.getCurrentHp() / 5));
  114. }
  115. else
  116. {
  117. master.clearAggroList();
  118. master.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
  119. if (e == null)
  120. {
  121. master.doCast(BUFF[0].getSkill());
  122. }
  123. else if (e.getAbnormalLvl() < 3)
  124. {
  125. master.doCast(BUFF[e.getAbnormalLvl()].getSkill());
  126. }
  127. else
  128. {
  129. master.broadcastPacket(new NpcSay(master.getObjectId(), Say2.ALL, master.getNpcId(), AMASKARI_NPCSTRING_ID[3]));
  130. // master.doCast(INVINCIBILITY.getSkill())
  131. master.setIsInvul(true);
  132. startQuestTimer("stop_toggle", 10000, master, null);
  133. }
  134. }
  135. }
  136. }
  137. else if (npc.getNpcId() == AMASKARI)
  138. {
  139. for (L2MonsterInstance minion : ((L2MonsterInstance) npc).getMinionList().getSpawnedMinions())
  140. {
  141. if ((minion != null) && !minion.isDead())
  142. {
  143. if (Rnd.get(1000) > 300)
  144. {
  145. minion.broadcastPacket(new NpcSay(minion.getObjectId(), Say2.ALL, minion.getNpcId(), MINIONS_NPCSTRING_ID[1]));
  146. }
  147. HellboundManager.getInstance().updateTrust(30, true);
  148. minion.deleteMe();
  149. }
  150. }
  151. }
  152. return super.onKill(npc, killer, isPet);
  153. }
  154. @Override
  155. public final String onSpawn(L2Npc npc)
  156. {
  157. if (!npc.isTeleporting())
  158. {
  159. startQuestTimer("onspawn_msg", (Rnd.get(3) + 1) * 30000, npc, null);
  160. }
  161. return super.onSpawn(npc);
  162. }
  163. public static void main(String[] args)
  164. {
  165. new Amaskari(-1, "Amaskari", "ai");
  166. }
  167. }