CostyKiller

Throne of Heroes Instances JAVA

Mar 12th, 2021 (edited)
493
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 24.24 KB | None | 0 0
  1. Index: dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesGoldberg.java
  2. ===================================================================
  3. --- dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesGoldberg.java (nonexistent)
  4. +++ dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesGoldberg.java (working copy)
  5. @@ -0,0 +1,210 @@
  6. +/*
  7. + * This file is part of the L2J Mobius project.
  8. + *
  9. + * This program is free software: you can redistribute it and/or modify
  10. + * it under the terms of the GNU General Public License as published by
  11. + * the Free Software Foundation, either version 3 of the License, or
  12. + * (at your option) any later version.
  13. + *
  14. + * This program is distributed in the hope that it will be useful,
  15. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17. + * General Public License for more details.
  18. + *
  19. + * You should have received a copy of the GNU General Public License
  20. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  21. + */
  22. +package instances.ThroneOfHeroes;
  23. +
  24. +import org.l2jmobius.commons.util.Chronos;
  25. +import org.l2jmobius.gameserver.model.actor.Npc;
  26. +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
  27. +import org.l2jmobius.gameserver.model.instancezone.Instance;
  28. +import org.l2jmobius.gameserver.network.NpcStringId;
  29. +import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
  30. +
  31. +import instances.AbstractInstance;
  32. +
  33. +/**
  34. + * @author CostyKiller // https://www.youtube.com/watch?v=fJWAWU5XpZk
  35. + */
  36. +public class ThroneOfHeroesGoldberg extends AbstractInstance
  37. +{
  38. +   // NPCs
  39. +   private static final int ROIENTAL = 34571;
  40. +   // Monsters
  41. +   private static final int GOLDBERG = 26250;
  42. +   private static final int[] GOLDBERG_MINIONS =
  43. +   {
  44. +       26251, // Handy Cannon Gunner
  45. +       26252, // Anchor Warrior
  46. +       26253, // Operator
  47. +       26254 // Axe Warrior
  48. +   };
  49. +   // Throne's Treasure Chest Goldberg
  50. +   private static final int TREASURE_CHEST = 26455;
  51. +  
  52. +   // World Instance
  53. +   Instance world = null;
  54. +  
  55. +   // Misc
  56. +   private static final int TEMPLATE_ID = 307;
  57. +  
  58. +   public ThroneOfHeroesGoldberg()
  59. +   {
  60. +       super(TEMPLATE_ID);
  61. +       addInstanceCreatedId(TEMPLATE_ID);
  62. +       addStartNpc(ROIENTAL);
  63. +       addTalkId(ROIENTAL);
  64. +       addAttackId(GOLDBERG);
  65. +       addKillId(GOLDBERG);
  66. +   }
  67. +  
  68. +   @Override
  69. +   public void onInstanceCreated(Instance activeInstance, PlayerInstance player)
  70. +   {
  71. +       activeInstance.setStatus(0);
  72. +       startQuestTimer("ANNOUNCE_RAID_START", 10000, null, player);
  73. +       world = activeInstance;
  74. +   }
  75. +  
  76. +   @Override
  77. +   public String onAdvEvent(String event, Npc npc, PlayerInstance player)
  78. +   {
  79. +       switch (event)
  80. +       {
  81. +           case "enterInstance":
  82. +           {
  83. +               enterInstance(player, npc, TEMPLATE_ID);
  84. +               startQuestTimer("ANNOUNCE_RAID_PREP", 20000, null, player);
  85. +               break;
  86. +           }
  87. +           case "reenterInstance":
  88. +           {
  89. +               final Instance activeInstance = getPlayerInstance(player);
  90. +               if (isInInstance(activeInstance))
  91. +               {
  92. +                   enterInstance(player, npc, activeInstance.getTemplateId());
  93. +               }
  94. +           }
  95. +           case "ANNOUNCE_RAID_START":
  96. +           {
  97. +               showOnScreenMsg(world, NpcStringId.THE_CHALLENGE_FOR_THE_THRONE_OF_HEROES_GOLDBERG_WILL_BEGIN_SHORTLY_PLEASE_GET_READY, ExShowScreenMessage.TOP_CENTER, 5000, true);
  98. +               startQuestTimer("ANNOUNCE_RAID_PREP", 15000, null, player);
  99. +               break;
  100. +           }
  101. +           case "ANNOUNCE_RAID_PREP":
  102. +           {
  103. +               showOnScreenMsg(world, NpcStringId.THE_FIGHTING_AGAINST_GOLDBERG_WILL_BEGIN_IN_10_SECONDS, ExShowScreenMessage.TOP_CENTER, 5000, true);
  104. +               startQuestTimer("ANNOUNCE_5", 5000, null, player);
  105. +               break;
  106. +           }
  107. +           case "ANNOUNCE_5":
  108. +           {
  109. +               showOnScreenMsg(world, NpcStringId.FIVE_SECONDS, ExShowScreenMessage.TOP_CENTER, 1000, true);
  110. +               startQuestTimer("ANNOUNCE_4", 1000, null, player);
  111. +               break;
  112. +           }
  113. +           case "ANNOUNCE_4":
  114. +           {
  115. +               showOnScreenMsg(world, NpcStringId.FOUR_SECONDS, ExShowScreenMessage.TOP_CENTER, 1000, true);
  116. +               startQuestTimer("ANNOUNCE_3", 1000, null, player);
  117. +               break;
  118. +           }
  119. +           case "ANNOUNCE_3":
  120. +           {
  121. +               showOnScreenMsg(world, NpcStringId.THREE_SECONDS_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  122. +               startQuestTimer("ANNOUNCE_2", 1000, null, player);
  123. +               break;
  124. +           }
  125. +           case "ANNOUNCE_2":
  126. +           {
  127. +               showOnScreenMsg(world, NpcStringId.TWO_SECONDS_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  128. +               startQuestTimer("ANNOUNCE_1", 1000, null, player);
  129. +               break;
  130. +           }
  131. +           case "ANNOUNCE_1":
  132. +           {
  133. +               showOnScreenMsg(world, NpcStringId.ONE_SECOND_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  134. +               startQuestTimer("SPAWN_GOLDBERG", 1000, null, player);
  135. +               break;
  136. +           }
  137. +           case "SPAWN_GOLDBERG":
  138. +           {
  139. +               showOnScreenMsg(world, NpcStringId.GOLDBERG_APPEARS, ExShowScreenMessage.TOP_CENTER, 5000, true);
  140. +               world.spawnGroup("GOLDBERG");
  141. +               break;
  142. +           }
  143. +           case "SPAWN_GOLDBERG_MINIONS":
  144. +           {
  145. +               showOnScreenMsg(world, NpcStringId.GOLDBERG_SUMMONS_HIS_MINIONS, ExShowScreenMessage.TOP_CENTER, 5000, true);
  146. +               world.spawnGroup("GOLDBERG_MINIONS");
  147. +               break;
  148. +           }
  149. +       }
  150. +       return super.onAdvEvent(event, npc, player);
  151. +   }
  152. +  
  153. +   @Override
  154. +   public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
  155. +   {
  156. +       final Instance world = npc.getInstanceWorld();
  157. +       if (isInInstance(world))
  158. +       {
  159. +           final int hpPer = npc.getCurrentHpPercent();
  160. +           final int maxHp = npc.getMaxHp();
  161. +           if (npc.getId() == GOLDBERG)
  162. +           {
  163. +               if ((hpPer < (maxHp * 0.50)) && npc.isScriptValue(0))
  164. +               {
  165. +                   startQuestTimer("SPAWN_GOLDBERG_MINIONS", 10000, npc, null);
  166. +                   npc.setScriptValue(1);
  167. +               }
  168. +               else if ((hpPer < (maxHp * 0.30)) && npc.isScriptValue(1))
  169. +               {
  170. +                   showOnScreenMsg(world, NpcStringId.GOLDBERG_BRINGS_OUT_ALL_OF_THE_POWER_WITHIN_HIM, ExShowScreenMessage.TOP_CENTER, 5000, true);
  171. +                   npc.setScriptValue(2);
  172. +               }
  173. +           }
  174. +       }
  175. +       return super.onAttack(npc, attacker, damage, isSummon);
  176. +   }
  177. +  
  178. +   @Override
  179. +   public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
  180. +   {
  181. +       final Instance world = npc.getInstanceWorld();
  182. +       if (isInInstance(world))
  183. +       {
  184. +           if (npc.getId() == GOLDBERG)
  185. +           {
  186. +               // Despawn minions and stop timer
  187. +               cancelQuestTimer("SPAWN_GOLDBERG_MINIONS", npc, killer);
  188. +               world.getAliveNpcs(GOLDBERG_MINIONS).forEach(beast -> beast.doDie(null));
  189. +              
  190. +               // Spawn treasure chests
  191. +               boolean eightCCMembersOrMore = ((killer.getCommandChannel() != null) && (killer.getCommandChannel().getMemberCount() >= 8));
  192. +               if (killer.isGM() || eightCCMembersOrMore)
  193. +               {
  194. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  195. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  196. +               }
  197. +               else
  198. +               {
  199. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  200. +               }
  201. +               // Finish instance
  202. +               world.finishInstance(2);
  203. +               // Set clan variable
  204. +               killer.getClan().getVariables().set("TOH_DONE", Chronos.currentTimeMillis());
  205. +               killer.getClan().getVariables().storeMe();
  206. +           }
  207. +       }
  208. +       return super.onKill(npc, killer, isSummon);
  209. +   }
  210. +  
  211. +   public static void main(String[] args)
  212. +   {
  213. +       new ThroneOfHeroesGoldberg();
  214. +   }
  215. +}
  216. Index: dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesMaryReed.java
  217. ===================================================================
  218. --- dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesMaryReed.java (nonexistent)
  219. +++ dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesMaryReed.java (working copy)
  220. @@ -0,0 +1,226 @@
  221. +/*
  222. + * This file is part of the L2J Mobius project.
  223. + *
  224. + * This program is free software: you can redistribute it and/or modify
  225. + * it under the terms of the GNU General Public License as published by
  226. + * the Free Software Foundation, either version 3 of the License, or
  227. + * (at your option) any later version.
  228. + *
  229. + * This program is distributed in the hope that it will be useful,
  230. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  231. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  232. + * General Public License for more details.
  233. + *
  234. + * You should have received a copy of the GNU General Public License
  235. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  236. + */
  237. +package instances.ThroneOfHeroes;
  238. +
  239. +import org.l2jmobius.commons.util.Chronos;
  240. +import org.l2jmobius.commons.util.CommonUtil;
  241. +import org.l2jmobius.gameserver.model.actor.Npc;
  242. +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
  243. +import org.l2jmobius.gameserver.model.instancezone.Instance;
  244. +import org.l2jmobius.gameserver.network.NpcStringId;
  245. +import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
  246. +
  247. +import instances.AbstractInstance;
  248. +
  249. +/**
  250. + * @author CostyKiller
  251. + */
  252. +public class ThroneOfHeroesMaryReed extends AbstractInstance
  253. +{
  254. +  
  255. +   // NPCs
  256. +   private static final int ROIENTAL = 34571;
  257. +   // Monsters
  258. +   private static final int MARY_REED = 26267;
  259. +   private static final int[] MARY_REED_MINIONS =
  260. +   {
  261. +       // add Zaken as minion
  262. +       26268, // Shield Master -->
  263. +       26269, // Spear Master -->
  264. +       26270, // Bow Master -->
  265. +       26271 // Magic Master -->
  266. +   };
  267. +   // Throne's Treasure Chest Mary Reed
  268. +   private static final int TREASURE_CHEST = 26456;
  269. +  
  270. +   // World Instance
  271. +   Instance world = null;
  272. +  
  273. +   // Misc
  274. +   private static final int TEMPLATE_ID = 308;
  275. +  
  276. +   // Npc Dialogs
  277. +   private static final NpcStringId[] MINIONS_MESSAGES =
  278. +   {
  279. +       NpcStringId.MARY_REED_THEY_ARE_JUST_INSECTS_HAHA_SHOW_THEM_YOUR_TRUE_POWER,
  280. +       NpcStringId.MARY_REED_THESE_BRATS_ARE_PRETTY_STRONG_I_SHALL_REST_UP_A_BIT,
  281. +       NpcStringId.MARY_REED_THESE_BRATS_ARE_PRETTY_STRONG_WATCH_OUT,
  282. +       NpcStringId.MARY_REED_REVEALS_HER_TRUE_POWER
  283. +   };
  284. +  
  285. +   public ThroneOfHeroesMaryReed()
  286. +   {
  287. +       super(TEMPLATE_ID);
  288. +       addInstanceCreatedId(TEMPLATE_ID);
  289. +       addStartNpc(ROIENTAL);
  290. +       addTalkId(ROIENTAL);
  291. +       addAttackId(MARY_REED);
  292. +       addKillId(MARY_REED);
  293. +   }
  294. +  
  295. +   @Override
  296. +   public void onInstanceCreated(Instance activeInstance, PlayerInstance player)
  297. +   {
  298. +       activeInstance.setStatus(0);
  299. +       startQuestTimer("ANNOUNCE_RAID_START", 10000, null, player);
  300. +       world = activeInstance;
  301. +   }
  302. +  
  303. +   @Override
  304. +   public String onAdvEvent(String event, Npc npc, PlayerInstance player)
  305. +   {
  306. +       switch (event)
  307. +       {
  308. +           case "enterInstance":
  309. +           {
  310. +               enterInstance(player, npc, TEMPLATE_ID);
  311. +               startQuestTimer("ANNOUNCE_RAID_PREP", 20000, null, player);
  312. +               break;
  313. +           }
  314. +           case "reenterInstance":
  315. +           {
  316. +               final Instance activeInstance = getPlayerInstance(player);
  317. +               if (isInInstance(activeInstance))
  318. +               {
  319. +                   enterInstance(player, npc, activeInstance.getTemplateId());
  320. +               }
  321. +           }
  322. +           case "ANNOUNCE_RAID_START":
  323. +           {
  324. +               showOnScreenMsg(world, NpcStringId.THE_CHALLENGE_FOR_THE_THRONE_OF_HEROES_MARY_REED_WILL_BEGIN_SHORTLY, ExShowScreenMessage.TOP_CENTER, 5000, true);
  325. +               startQuestTimer("ANNOUNCE_RAID_PREP", 15000, null, player);
  326. +               break;
  327. +           }
  328. +           case "ANNOUNCE_RAID_PREP":
  329. +           {
  330. +               showOnScreenMsg(world, NpcStringId.THE_FIGHTING_AGAINST_MARY_REED_WILL_BEGIN_IN_10_SECONDS, ExShowScreenMessage.TOP_CENTER, 5000, true);
  331. +               startQuestTimer("ANNOUNCE_5", 10000, null, player);
  332. +               break;
  333. +           }
  334. +           case "ANNOUNCE_5":
  335. +           {
  336. +               showOnScreenMsg(world, NpcStringId.FIVE_SECONDS, ExShowScreenMessage.TOP_CENTER, 1000, true);
  337. +               startQuestTimer("ANNOUNCE_4", 2000, null, player);
  338. +               break;
  339. +           }
  340. +           case "ANNOUNCE_4":
  341. +           {
  342. +               showOnScreenMsg(world, NpcStringId.FOUR_SECONDS, ExShowScreenMessage.TOP_CENTER, 1000, true);
  343. +               startQuestTimer("ANNOUNCE_3", 2000, null, player);
  344. +               break;
  345. +           }
  346. +           case "ANNOUNCE_3":
  347. +           {
  348. +               showOnScreenMsg(world, NpcStringId.THREE_SECONDS_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  349. +               startQuestTimer("ANNOUNCE_2", 2000, null, player);
  350. +               break;
  351. +           }
  352. +           case "ANNOUNCE_2":
  353. +           {
  354. +               showOnScreenMsg(world, NpcStringId.TWO_SECONDS_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  355. +               startQuestTimer("ANNOUNCE_1", 2000, null, player);
  356. +               break;
  357. +           }
  358. +           case "ANNOUNCE_1":
  359. +           {
  360. +               showOnScreenMsg(world, NpcStringId.ONE_SECOND_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  361. +               startQuestTimer("SPAWN_MARY_REED", 2000, null, player);
  362. +               break;
  363. +           }
  364. +           case "SPAWN_MARY_REED":
  365. +           {
  366. +               showOnScreenMsg(world, NpcStringId.MARY_REED_GREETS_HEROES, ExShowScreenMessage.TOP_CENTER, 5000, true);
  367. +               world.spawnGroup("MARY_REED");
  368. +               break;
  369. +           }
  370. +           case "SPAWN_MARY_REED_MINIONS":
  371. +           {
  372. +               showOnScreenMsg(world, NpcStringId.MARY_REED_SUMMONS_ZAKEN, ExShowScreenMessage.TOP_CENTER, 5000, true);
  373. +               world.spawnGroup("MARY_REED_MINIONS");
  374. +               break;
  375. +           }
  376. +       }
  377. +       return super.onAdvEvent(event, npc, player);
  378. +   }
  379. +  
  380. +   @Override
  381. +   public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
  382. +   {
  383. +       final Instance world = npc.getInstanceWorld();
  384. +       if (isInInstance(world))
  385. +       {
  386. +           final int hpPer = npc.getCurrentHpPercent();
  387. +           final int maxHp = npc.getMaxHp();
  388. +           if (npc.getId() == MARY_REED)
  389. +           {
  390. +               if ((hpPer < (maxHp * 0.50)) && npc.isScriptValue(0))
  391. +               {
  392. +                   startQuestTimer("SPAWN_MARY_REED_MINIONS", 10000, npc, null);
  393. +                   npc.setScriptValue(1);
  394. +               }
  395. +               else if ((hpPer < (maxHp * 0.30)) && npc.isScriptValue(1))
  396. +               {
  397. +                   showOnScreenMsg(world, NpcStringId.DO_YOU_THINK_YOU_CAN_EVADE_MY_STRIKE_TAKE_THAT, ExShowScreenMessage.TOP_CENTER, 5000, true);
  398. +                   npc.setScriptValue(2);
  399. +               }
  400. +           }
  401. +           else if (CommonUtil.contains(MARY_REED_MINIONS, npc.getId()) && world.getNpc(MARY_REED).isScriptValue(2))
  402. +           {
  403. +               showOnScreenMsg(world, MINIONS_MESSAGES[getRandom(4)], ExShowScreenMessage.TOP_CENTER, 5000, true);
  404. +           }
  405. +       }
  406. +       return super.onAttack(npc, attacker, damage, isSummon);
  407. +   }
  408. +  
  409. +   @Override
  410. +   public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
  411. +   {
  412. +       final Instance world = npc.getInstanceWorld();
  413. +       if (isInInstance(world))
  414. +       {
  415. +           if (npc.getId() == MARY_REED)
  416. +           {
  417. +               // Despawn minions and stop timer
  418. +               cancelQuestTimer("SPAWN_MARY_REED_MINIONS", npc, killer);
  419. +               world.getAliveNpcs(MARY_REED_MINIONS).forEach(beast -> beast.doDie(null));
  420. +              
  421. +               // Spawn treasure chests
  422. +               boolean eightCCMembersOrMore = ((killer.getCommandChannel() != null) && (killer.getCommandChannel().getMemberCount() >= 8));
  423. +               if (killer.isGM() || eightCCMembersOrMore)
  424. +               {
  425. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  426. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  427. +               }
  428. +               else
  429. +               {
  430. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  431. +               }
  432. +               // Finish instance
  433. +               world.finishInstance(2);
  434. +               // Set clan variable
  435. +               killer.getClan().getVariables().set("TOH_DONE", Chronos.currentTimeMillis());
  436. +               killer.getClan().getVariables().storeMe();
  437. +           }
  438. +       }
  439. +       return super.onKill(npc, killer, isSummon);
  440. +   }
  441. +  
  442. +   public static void main(String[] args)
  443. +   {
  444. +       new ThroneOfHeroesMaryReed();
  445. +   }
  446. +}
  447. Index: dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesTauti.java
  448. ===================================================================
  449. --- dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesTauti.java    (nonexistent)
  450. +++ dist/game/data/scripts/instances/ThroneOfHeroes/ThroneOfHeroesTauti.java    (working copy)
  451. @@ -0,0 +1,213 @@
  452. +/*
  453. + * This file is part of the L2J Mobius project.
  454. + *
  455. + * This program is free software: you can redistribute it and/or modify
  456. + * it under the terms of the GNU General Public License as published by
  457. + * the Free Software Foundation, either version 3 of the License, or
  458. + * (at your option) any later version.
  459. + *
  460. + * This program is distributed in the hope that it will be useful,
  461. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  462. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  463. + * General Public License for more details.
  464. + *
  465. + * You should have received a copy of the GNU General Public License
  466. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  467. + */
  468. +package instances.ThroneOfHeroes;
  469. +
  470. +import org.l2jmobius.commons.util.Chronos;
  471. +import org.l2jmobius.gameserver.model.actor.Npc;
  472. +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
  473. +import org.l2jmobius.gameserver.model.instancezone.Instance;
  474. +import org.l2jmobius.gameserver.network.NpcStringId;
  475. +import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
  476. +
  477. +import instances.AbstractInstance;
  478. +
  479. +/**
  480. + * @author CostyKiller
  481. + */
  482. +public class ThroneOfHeroesTauti extends AbstractInstance
  483. +{
  484. +  
  485. +   // NPCs
  486. +   private static final int ROIENTAL = 34571;
  487. +   // Monsters
  488. +   private static final int TAUTI = 26266;
  489. +  
  490. +   // Throne's Treasure Chest Tauti
  491. +   private static final int TREASURE_CHEST = 26457;
  492. +  
  493. +   // World Instance
  494. +   Instance world = null;
  495. +  
  496. +   // Misc
  497. +   private static final int TEMPLATE_ID = 309;
  498. +  
  499. +   // Npc Dialogs
  500. +   private static final NpcStringId[] TAUTI_MESSAGES =
  501. +   {
  502. +       NpcStringId.TAUTI_INTENDS_TO_SHOW_OFF_HIS_POWER_TO_HIS_FOLLOWERS,
  503. +       NpcStringId.TAUTI_INTENDS_TO_SHOW_OFF_HIS_POWER_TO_THOSE_WHO_AVOID_HIM
  504. +   };
  505. +  
  506. +   public ThroneOfHeroesTauti()
  507. +   {
  508. +       super(TEMPLATE_ID);
  509. +       addInstanceCreatedId(TEMPLATE_ID);
  510. +       addStartNpc(ROIENTAL);
  511. +       addTalkId(ROIENTAL);
  512. +       addAttackId(TAUTI);
  513. +       addKillId(TAUTI);
  514. +   }
  515. +  
  516. +   @Override
  517. +   public void onInstanceCreated(Instance activeInstance, PlayerInstance player)
  518. +   {
  519. +       activeInstance.setStatus(0);
  520. +       startQuestTimer("ANNOUNCE_RAID_START", 10000, null, player);
  521. +       world = activeInstance;
  522. +   }
  523. +  
  524. +   @Override
  525. +   public String onAdvEvent(String event, Npc npc, PlayerInstance player)
  526. +   {
  527. +       switch (event)
  528. +       {
  529. +           case "enterInstance":
  530. +           {
  531. +               enterInstance(player, npc, TEMPLATE_ID);
  532. +               startQuestTimer("ANNOUNCE_RAID_PREP", 20000, null, player);
  533. +               break;
  534. +           }
  535. +           case "reenterInstance":
  536. +           {
  537. +               final Instance activeInstance = getPlayerInstance(player);
  538. +               if (isInInstance(activeInstance))
  539. +               {
  540. +                   enterInstance(player, npc, activeInstance.getTemplateId());
  541. +               }
  542. +           }
  543. +           case "ANNOUNCE_RAID_START":
  544. +           {
  545. +               showOnScreenMsg(world, NpcStringId.THE_CHALLENGE_FOR_THE_THRONE_OF_HEROES_TAUTI_WILL_BEGIN_SHORTLY, ExShowScreenMessage.TOP_CENTER, 5000, true);
  546. +               startQuestTimer("ANNOUNCE_RAID_PREP", 15000, null, player);
  547. +               break;
  548. +           }
  549. +           case "ANNOUNCE_RAID_PREP":
  550. +           {
  551. +               showOnScreenMsg(world, NpcStringId.THE_FIGHTING_AGAINST_TAUTI_WILL_BEGIN_IN_10_SECONDS, ExShowScreenMessage.TOP_CENTER, 5000, true);
  552. +               startQuestTimer("ANNOUNCE_5", 10000, null, player);
  553. +               break;
  554. +           }
  555. +           case "ANNOUNCE_5":
  556. +           {
  557. +               showOnScreenMsg(world, NpcStringId.FIVE_SECONDS, ExShowScreenMessage.TOP_CENTER, 1000, true);
  558. +               startQuestTimer("ANNOUNCE_4", 2000, null, player);
  559. +               break;
  560. +           }
  561. +           case "ANNOUNCE_4":
  562. +           {
  563. +               showOnScreenMsg(world, NpcStringId.FOUR_SECONDS, ExShowScreenMessage.TOP_CENTER, 1000, true);
  564. +               startQuestTimer("ANNOUNCE_3", 2000, null, player);
  565. +               break;
  566. +           }
  567. +           case "ANNOUNCE_3":
  568. +           {
  569. +               showOnScreenMsg(world, NpcStringId.THREE_SECONDS_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  570. +               startQuestTimer("ANNOUNCE_2", 2000, null, player);
  571. +               break;
  572. +           }
  573. +           case "ANNOUNCE_2":
  574. +           {
  575. +               showOnScreenMsg(world, NpcStringId.TWO_SECONDS_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  576. +               startQuestTimer("ANNOUNCE_1", 2000, null, player);
  577. +               break;
  578. +           }
  579. +           case "ANNOUNCE_1":
  580. +           {
  581. +               showOnScreenMsg(world, NpcStringId.ONE_SECOND_2, ExShowScreenMessage.TOP_CENTER, 1000, true);
  582. +               startQuestTimer("SPAWN_TAUTI", 2000, null, player);
  583. +               break;
  584. +           }
  585. +           case "SPAWN_TAUTI":
  586. +           {
  587. +               showOnScreenMsg(world, NpcStringId.TAUTI_IS_READY_TO_FIGHT, ExShowScreenMessage.TOP_CENTER, 5000, true);
  588. +               world.spawnGroup("TAUTI");
  589. +               break;
  590. +           }
  591. +           // case "SPAWN_TAUTI_MINIONS":
  592. +           // {
  593. +           // showOnScreenMsg(world, NpcStringId.TAUTI_SUMMONS_HIS_MECHANICAL_CONTRAPTION, ExShowScreenMessage.TOP_CENTER, 5000, true);
  594. +           // world.spawnGroup("TAUTI_MINIONS");
  595. +           // break;
  596. +           // }
  597. +       }
  598. +       return super.onAdvEvent(event, npc, player);
  599. +   }
  600. +  
  601. +   @Override
  602. +   public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
  603. +   {
  604. +       final Instance world = npc.getInstanceWorld();
  605. +       if (isInInstance(world))
  606. +       {
  607. +           final int hpPer = npc.getCurrentHpPercent();
  608. +           final int maxHp = npc.getMaxHp();
  609. +           if (npc.getId() == TAUTI)
  610. +           {
  611. +               if ((hpPer < (maxHp * 0.50)) && npc.isScriptValue(0))
  612. +               {
  613. +                   // startQuestTimer("SPAWN_TAUTI_MINIONS", 10000, npc, null);
  614. +                   showOnScreenMsg(world, TAUTI_MESSAGES[getRandom(2)], ExShowScreenMessage.TOP_CENTER, 5000, true);
  615. +                   npc.setScriptValue(1);
  616. +               }
  617. +               else if ((hpPer < (maxHp * 0.30)) && npc.isScriptValue(1))
  618. +               {
  619. +                   showOnScreenMsg(world, TAUTI_MESSAGES[getRandom(2)], ExShowScreenMessage.TOP_CENTER, 5000, true);
  620. +                   npc.setScriptValue(2);
  621. +               }
  622. +           }
  623. +       }
  624. +       return super.onAttack(npc, attacker, damage, isSummon);
  625. +   }
  626. +  
  627. +   @Override
  628. +   public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
  629. +   {
  630. +       final Instance world = npc.getInstanceWorld();
  631. +       if (isInInstance(world))
  632. +       {
  633. +           if (npc.getId() == TAUTI)
  634. +           {
  635. +               // Despawn minions and stop timer
  636. +               // cancelQuestTimer("SPAWN_TAUTI_MINIONS", npc, killer);
  637. +               // world.getAliveNpcs(TAUTI_MINIONS).forEach(beast -> beast.doDie(null));
  638. +              
  639. +               // Spawn treasure chests
  640. +               boolean eightCCMembersOrMore = ((killer.getCommandChannel() != null) && (killer.getCommandChannel().getMemberCount() >= 8));
  641. +               if (killer.isGM() || eightCCMembersOrMore)
  642. +               {
  643. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  644. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  645. +               }
  646. +               else
  647. +               {
  648. +                   addSpawn(TREASURE_CHEST, killer.getX() + getRandom(-150, 150), killer.getY() + getRandom(-150, 150), killer.getZ() + 10, 0, false, 0, true);
  649. +               }
  650. +               // Finish instance
  651. +               world.finishInstance(2);
  652. +               // Set clan variable
  653. +               killer.getClan().getVariables().set("TOH_DONE", Chronos.currentTimeMillis());
  654. +               killer.getClan().getVariables().storeMe();
  655. +           }
  656. +       }
  657. +       return super.onKill(npc, killer, isSummon);
  658. +   }
  659. +  
  660. +   public static void main(String[] args)
  661. +   {
  662. +       new ThroneOfHeroesTauti();
  663. +   }
  664. +}
  665. Index: dist/game/data/scripts/instances/ThroneOfHeroes/condBigGroup.html
  666. ===================================================================
  667. --- dist/game/data/scripts/instances/ThroneOfHeroes/condBigGroup.html   (nonexistent)
  668. +++ dist/game/data/scripts/instances/ThroneOfHeroes/condBigGroup.html   (working copy)
  669. @@ -0,0 +1,4 @@
  670. +<html><body>Roiental:<br>
  671. +That many people can't be moved.<br>
  672. +(A maximum of 100 people can participate.)
  673. +</body></html>
  674. \ No newline at end of file
  675. Index: dist/game/data/scripts/instances/ThroneOfHeroes/condNoGroup.html
  676. ===================================================================
  677. --- dist/game/data/scripts/instances/ThroneOfHeroes/condNoGroup.html    (nonexistent)
  678. +++ dist/game/data/scripts/instances/ThroneOfHeroes/condNoGroup.html    (working copy)
  679. @@ -0,0 +1,3 @@
  680. +<html><body>Roiental:<br>
  681. +As I explained earlier, you can enter only by forming an association.
  682. +</body></html>
  683. \ No newline at end of file
  684. Index: dist/game/data/scripts/instances/ThroneOfHeroes/condNoLevel.html
  685. ===================================================================
  686. --- dist/game/data/scripts/instances/ThroneOfHeroes/condNoLevel.html    (nonexistent)
  687. +++ dist/game/data/scripts/instances/ThroneOfHeroes/condNoLevel.html    (working copy)
  688. @@ -0,0 +1,4 @@
  689. +<html><body>Roiental:<br>
  690. +You are too weak. I won't let you enter.<br>
  691. +(Only players of at least level 110 may participate.)
  692. +</body></html>
  693. \ No newline at end of file
  694.  
Add Comment
Please, Sign In to add comment