From 377a183b3b017251b5205091015a042405813f33 Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Sat, 17 Dec 2022 06:24:32 +0000
Subject: [PATCH] Addition of ToI special monster AI. Contributed by
CostyKiller.
---
.../TowerOfInsolence/ToiSpecialMonsters.java | 258 ++++++++++++++++++
.../TowerOfInsolence/WatchmenBosses.java | 135 ---------
.../TowerOfInsolence/ToiSpecialMonsters.java | 258 ++++++++++++++++++
.../TowerOfInsolence/WatchmenBosses.java | 135 ---------
4 files changed, 516 insertions(+), 270 deletions(-)
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/ToiSpecialMonsters.java
delete mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/ToiSpecialMonsters.java
delete mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/ToiSpecialMonsters.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/ToiSpecialMonsters.java
new file mode 100644
index 0000000000..4fd67f2cd2
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/ToiSpecialMonsters.java
@@ -0,0 +1,258 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package ai.areas.TowerOfInsolence;
+
+import org.l2jmobius.Config;
+import org.l2jmobius.gameserver.model.actor.Npc;
+import org.l2jmobius.gameserver.model.actor.Player;
+
+import ai.AbstractNpcAI;
+
+/**
+ * Tower of Insolence Special Mobs AI.
+ * @URL https://l2central.info/main/locations/special_zones/tower_of_insolence/
+ * @author CostyKiller
+ * @TODO Find and add fixed spawn locations for elite monsters.
+ */
+public class ToiSpecialMonsters extends AbstractNpcAI
+{
+ // Elite Monsters
+ private static final int ELITE_MONSTER_FLOOR4 = 24863;
+ private static final int ELITE_MONSTER_FLOOR5 = 24869;
+ private static final int ELITE_MONSTER_FLOOR6 = 24875;
+ private static final int ELITE_MONSTER_FLOOR7 = 24901;
+ private static final int ELITE_MONSTER_FLOOR8 = 24907;
+ private static final int ELITE_MONSTER_FLOOR9 = 24913;
+ // Mimic Baium's Treasure
+ private static final int MIMIC_TREASURE_FLOOR1 = 24887;
+ private static final int MIMIC_TREASURE_FLOOR2 = 24888;
+ private static final int MIMIC_TREASURE_FLOOR3 = 24889;
+ private static final int MIMIC_TREASURE_FLOOR4 = 24890;
+ private static final int MIMIC_TREASURE_FLOOR5 = 24891;
+ private static final int MIMIC_TREASURE_FLOOR6 = 24892;
+ private static final int MIMIC_TREASURE_FLOOR7 = 24893;
+ private static final int MIMIC_TREASURE_FLOOR8 = 24894;
+ private static final int MIMIC_TREASURE_FLOOR9 = 24895;
+ // Elite Monsters Reward
+ private static final int ENHANCED_RUNE = 81453;
+ private static final int DROP_CHANCE = 25; // 25%
+ // Misc
+ private static final int ELITE_MONSTERS_SPAWN_CHANCE = 1; // 1%
+ private static final int MIMIC_TREASURES_SPAWN_CHANCE = 2; // 2%
+ // Trigger Monsters
+ //@formatter:off
+ private static final int[] TRIGGER_MOBS_FLOOR1 = {24550, 24551, 24552, 24553, 24554}; // Floor 1 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR2 = {24556, 24557, 24558, 24559, 24560}; // Floor 2 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR3 = {24562, 24563, 24564, 24565, 24566}; // Floor 3 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR4 = {24858, 24859, 24860, 24861, 24862}; // Floor 4 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR5 = {24864, 24865, 24866, 24867, 24868}; // Floor 5 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR6 = {24870, 24871, 24872, 24873, 24874}; // Floor 6 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR7 = {24896, 24897, 24898, 24899, 24900}; // Floor 7 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR8 = {24902, 24903, 24904, 24905, 24906}; // Floor 8 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR9 = {24908, 24909, 24910, 24911, 24912}; // Floor 9 Monsters
+ //@formatter:on
+
+ private ToiSpecialMonsters()
+ {
+ super();
+ addKillId(ELITE_MONSTER_FLOOR4, ELITE_MONSTER_FLOOR5, ELITE_MONSTER_FLOOR6, ELITE_MONSTER_FLOOR7, ELITE_MONSTER_FLOOR8, ELITE_MONSTER_FLOOR9);
+ addKillId(TRIGGER_MOBS_FLOOR1);
+ addKillId(TRIGGER_MOBS_FLOOR2);
+ addKillId(TRIGGER_MOBS_FLOOR3);
+ addKillId(TRIGGER_MOBS_FLOOR4);
+ addKillId(TRIGGER_MOBS_FLOOR5);
+ addKillId(TRIGGER_MOBS_FLOOR6);
+ addKillId(TRIGGER_MOBS_FLOOR7);
+ addKillId(TRIGGER_MOBS_FLOOR8);
+ addKillId(TRIGGER_MOBS_FLOOR9);
+ }
+
+ @Override
+ public String onKill(Npc npc, Player killer, boolean isSummon)
+ {
+ switch (npc.getId())
+ {
+ case ELITE_MONSTER_FLOOR4:
+ case ELITE_MONSTER_FLOOR5:
+ case ELITE_MONSTER_FLOOR6:
+ case ELITE_MONSTER_FLOOR7:
+ case ELITE_MONSTER_FLOOR8:
+ case ELITE_MONSTER_FLOOR9:
+ {
+ giveReward(npc, killer);
+ break;
+ }
+ // Floor 1 Monsters
+ case 24550:
+ case 24551:
+ case 24552:
+ case 24553:
+ case 24554:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR1, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 2 Monsters
+ case 24556:
+ case 24557:
+ case 24558:
+ case 24559:
+ case 24560:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR2, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 3 Monsters
+ case 24562:
+ case 24563:
+ case 24564:
+ case 24565:
+ case 24566:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR3, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 4 Monsters
+ case 24858:
+ case 24859:
+ case 24860:
+ case 24861:
+ case 24862:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR4, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR4, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 5 Monsters
+ case 24864:
+ case 24865:
+ case 24866:
+ case 24867:
+ case 24868:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR5, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR5, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 6 Monsters
+ case 24870:
+ case 24871:
+ case 24872:
+ case 24873:
+ case 24874:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR6, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR6, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 7 Monsters
+ case 24896:
+ case 24897:
+ case 24898:
+ case 24899:
+ case 24900:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR7, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR7, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 8 Monsters
+ case 24902:
+ case 24903:
+ case 24904:
+ case 24905:
+ case 24906:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR8, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR8, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 9 Monsters
+ case 24908:
+ case 24909:
+ case 24910:
+ case 24911:
+ case 24912:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR9, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR9, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ }
+ return super.onKill(npc, killer, isSummon);
+ }
+
+ private void giveReward(Npc npc, Player killer)
+ {
+ final Player player = getRandomPartyMember(killer);
+ if ((getRandom(100) < DROP_CHANCE) && ((player.getParty() == null) || ((player.getParty() != null) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))))
+ {
+ giveItems(player, ENHANCED_RUNE, 1);
+ player.sendMessage("You obtained an Enhanced Rune from the Elite Monster!"); // Custom message.
+ }
+ }
+
+ public static void main(String[] args)
+ {
+ new ToiSpecialMonsters();
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java
deleted file mode 100644
index 96d9375763..0000000000
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * This file is part of the L2J Mobius project.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package ai.areas.TowerOfInsolence;
-
-import org.l2jmobius.gameserver.model.Location;
-import org.l2jmobius.gameserver.model.actor.Npc;
-import org.l2jmobius.gameserver.model.actor.Player;
-
-import ai.AbstractNpcAI;
-
-/**
- * @author Mobius
- */
-public class WatchmenBosses extends AbstractNpcAI
-{
- // NPCs
- private static final int WATCHMAN_OF_THE_FORGOTTEN = 24555;
- private static final int WATCHMAN_OF_THE_RESURRECTED = 24561;
- private static final int WATCHMAN_OF_THE_CURSED = 24567;
- // Locations
- private static final Location[] WATCHMAN_OF_THE_FORGOTTEN_LOCATIONS =
- {
- new Location(-86568, 19304, -15429),
- new Location(-82024, 20440, -15426),
- new Location(-79624, 18488, -15429),
- new Location(-77560, 16184, -15426),
- new Location(-77656, 12776, -15429),
- new Location(-82024, 11848, -15426),
- new Location(-80152, 14328, -15429),
- new Location(-83864, 18136, -15429),
- new Location(-83976, 14296, -15429),
- };
- private static final Location[] WATCHMAN_OF_THE_RESURRECTED_LOCATIONS =
- {
- new Location(-83944, 17960, -12933),
- new Location(-80120, 14184, -12933),
- new Location(-80168, 17992, -12933),
- new Location(-83816, 14296, -12933),
- new Location(-86504, 16168, -12929),
- new Location(-85912, 12088, -12933),
- new Location(-82024, 11720, -12929),
- new Location(-80088, 10936, -12933),
- new Location(-77560, 16152, -12929),
- };
- private static final Location[] WATCHMAN_OF_THE_CURSED_LOCATIONS =
- {
- new Location(-77673, 16163, -10306),
- new Location(-79384, 18344, -10309),
- new Location(-82024, 20584, -10306),
- new Location(-84344, 18552, -10309),
- new Location(-86360, 16168, -10306),
- new Location(-86104, 12888, -10309),
- new Location(-83736, 10792, -10309),
- new Location(-83448, 14792, -10306),
- new Location(-80088, 17336, -10309),
- new Location(-84216, 17208, -10309),
- new Location(-80904, 13976, -10309),
- };
-
- private WatchmenBosses()
- {
- addKillId(WATCHMAN_OF_THE_FORGOTTEN, WATCHMAN_OF_THE_RESURRECTED, WATCHMAN_OF_THE_CURSED);
-
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_FORGOTTEN", 1000, null, null);
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_RESURRECTED", 1000, null, null);
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_CURSED", 1000, null, null);
- }
-
- @Override
- public String onAdvEvent(String event, Npc npc, Player player)
- {
- switch (event)
- {
- case "SPAWN_WATCHMAN_OF_THE_FORGOTTEN":
- {
- addSpawn(WATCHMAN_OF_THE_FORGOTTEN, getRandomEntry(WATCHMAN_OF_THE_FORGOTTEN_LOCATIONS));
- break;
- }
- case "SPAWN_WATCHMAN_OF_THE_RESURRECTED":
- {
- addSpawn(WATCHMAN_OF_THE_RESURRECTED, getRandomEntry(WATCHMAN_OF_THE_RESURRECTED_LOCATIONS));
- break;
- }
- case "SPAWN_WATCHMAN_OF_THE_CURSED":
- {
- addSpawn(WATCHMAN_OF_THE_CURSED, getRandomEntry(WATCHMAN_OF_THE_CURSED_LOCATIONS));
- break;
- }
- }
- return null;
- }
-
- @Override
- public String onKill(Npc npc, Player killer, boolean isSummon)
- {
- switch (npc.getId())
- {
- case WATCHMAN_OF_THE_FORGOTTEN:
- {
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_FORGOTTEN", 28800000, null, null);
- break;
- }
- case WATCHMAN_OF_THE_RESURRECTED:
- {
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_RESURRECTED", 28800000, null, null);
- break;
- }
- case WATCHMAN_OF_THE_CURSED:
- {
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_CURSED", 28800000, null, null);
- break;
- }
- }
- return super.onKill(npc, killer, isSummon);
- }
-
- public static void main(String[] args)
- {
- new WatchmenBosses();
- }
-}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/ToiSpecialMonsters.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/ToiSpecialMonsters.java
new file mode 100644
index 0000000000..4fd67f2cd2
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/ToiSpecialMonsters.java
@@ -0,0 +1,258 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package ai.areas.TowerOfInsolence;
+
+import org.l2jmobius.Config;
+import org.l2jmobius.gameserver.model.actor.Npc;
+import org.l2jmobius.gameserver.model.actor.Player;
+
+import ai.AbstractNpcAI;
+
+/**
+ * Tower of Insolence Special Mobs AI.
+ * @URL https://l2central.info/main/locations/special_zones/tower_of_insolence/
+ * @author CostyKiller
+ * @TODO Find and add fixed spawn locations for elite monsters.
+ */
+public class ToiSpecialMonsters extends AbstractNpcAI
+{
+ // Elite Monsters
+ private static final int ELITE_MONSTER_FLOOR4 = 24863;
+ private static final int ELITE_MONSTER_FLOOR5 = 24869;
+ private static final int ELITE_MONSTER_FLOOR6 = 24875;
+ private static final int ELITE_MONSTER_FLOOR7 = 24901;
+ private static final int ELITE_MONSTER_FLOOR8 = 24907;
+ private static final int ELITE_MONSTER_FLOOR9 = 24913;
+ // Mimic Baium's Treasure
+ private static final int MIMIC_TREASURE_FLOOR1 = 24887;
+ private static final int MIMIC_TREASURE_FLOOR2 = 24888;
+ private static final int MIMIC_TREASURE_FLOOR3 = 24889;
+ private static final int MIMIC_TREASURE_FLOOR4 = 24890;
+ private static final int MIMIC_TREASURE_FLOOR5 = 24891;
+ private static final int MIMIC_TREASURE_FLOOR6 = 24892;
+ private static final int MIMIC_TREASURE_FLOOR7 = 24893;
+ private static final int MIMIC_TREASURE_FLOOR8 = 24894;
+ private static final int MIMIC_TREASURE_FLOOR9 = 24895;
+ // Elite Monsters Reward
+ private static final int ENHANCED_RUNE = 81453;
+ private static final int DROP_CHANCE = 25; // 25%
+ // Misc
+ private static final int ELITE_MONSTERS_SPAWN_CHANCE = 1; // 1%
+ private static final int MIMIC_TREASURES_SPAWN_CHANCE = 2; // 2%
+ // Trigger Monsters
+ //@formatter:off
+ private static final int[] TRIGGER_MOBS_FLOOR1 = {24550, 24551, 24552, 24553, 24554}; // Floor 1 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR2 = {24556, 24557, 24558, 24559, 24560}; // Floor 2 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR3 = {24562, 24563, 24564, 24565, 24566}; // Floor 3 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR4 = {24858, 24859, 24860, 24861, 24862}; // Floor 4 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR5 = {24864, 24865, 24866, 24867, 24868}; // Floor 5 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR6 = {24870, 24871, 24872, 24873, 24874}; // Floor 6 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR7 = {24896, 24897, 24898, 24899, 24900}; // Floor 7 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR8 = {24902, 24903, 24904, 24905, 24906}; // Floor 8 Monsters
+ private static final int[] TRIGGER_MOBS_FLOOR9 = {24908, 24909, 24910, 24911, 24912}; // Floor 9 Monsters
+ //@formatter:on
+
+ private ToiSpecialMonsters()
+ {
+ super();
+ addKillId(ELITE_MONSTER_FLOOR4, ELITE_MONSTER_FLOOR5, ELITE_MONSTER_FLOOR6, ELITE_MONSTER_FLOOR7, ELITE_MONSTER_FLOOR8, ELITE_MONSTER_FLOOR9);
+ addKillId(TRIGGER_MOBS_FLOOR1);
+ addKillId(TRIGGER_MOBS_FLOOR2);
+ addKillId(TRIGGER_MOBS_FLOOR3);
+ addKillId(TRIGGER_MOBS_FLOOR4);
+ addKillId(TRIGGER_MOBS_FLOOR5);
+ addKillId(TRIGGER_MOBS_FLOOR6);
+ addKillId(TRIGGER_MOBS_FLOOR7);
+ addKillId(TRIGGER_MOBS_FLOOR8);
+ addKillId(TRIGGER_MOBS_FLOOR9);
+ }
+
+ @Override
+ public String onKill(Npc npc, Player killer, boolean isSummon)
+ {
+ switch (npc.getId())
+ {
+ case ELITE_MONSTER_FLOOR4:
+ case ELITE_MONSTER_FLOOR5:
+ case ELITE_MONSTER_FLOOR6:
+ case ELITE_MONSTER_FLOOR7:
+ case ELITE_MONSTER_FLOOR8:
+ case ELITE_MONSTER_FLOOR9:
+ {
+ giveReward(npc, killer);
+ break;
+ }
+ // Floor 1 Monsters
+ case 24550:
+ case 24551:
+ case 24552:
+ case 24553:
+ case 24554:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR1, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 2 Monsters
+ case 24556:
+ case 24557:
+ case 24558:
+ case 24559:
+ case 24560:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR2, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 3 Monsters
+ case 24562:
+ case 24563:
+ case 24564:
+ case 24565:
+ case 24566:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR3, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 4 Monsters
+ case 24858:
+ case 24859:
+ case 24860:
+ case 24861:
+ case 24862:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR4, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR4, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 5 Monsters
+ case 24864:
+ case 24865:
+ case 24866:
+ case 24867:
+ case 24868:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR5, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR5, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 6 Monsters
+ case 24870:
+ case 24871:
+ case 24872:
+ case 24873:
+ case 24874:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR6, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR6, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 7 Monsters
+ case 24896:
+ case 24897:
+ case 24898:
+ case 24899:
+ case 24900:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR7, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR7, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 8 Monsters
+ case 24902:
+ case 24903:
+ case 24904:
+ case 24905:
+ case 24906:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR8, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR8, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ // Floor 9 Monsters
+ case 24908:
+ case 24909:
+ case 24910:
+ case 24911:
+ case 24912:
+ {
+ if (getRandom(100) < MIMIC_TREASURES_SPAWN_CHANCE)
+ {
+ addSpawn(MIMIC_TREASURE_FLOOR9, npc, true, 0, true, npc.getInstanceId());
+ }
+ if (getRandom(100) < ELITE_MONSTERS_SPAWN_CHANCE)
+ {
+ addSpawn(ELITE_MONSTER_FLOOR9, npc, true, 0, true, npc.getInstanceId());
+ }
+ break;
+ }
+ }
+ return super.onKill(npc, killer, isSummon);
+ }
+
+ private void giveReward(Npc npc, Player killer)
+ {
+ final Player player = getRandomPartyMember(killer);
+ if ((getRandom(100) < DROP_CHANCE) && ((player.getParty() == null) || ((player.getParty() != null) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))))
+ {
+ giveItems(player, ENHANCED_RUNE, 1);
+ player.sendMessage("You obtained an Enhanced Rune from the Elite Monster!"); // Custom message.
+ }
+ }
+
+ public static void main(String[] args)
+ {
+ new ToiSpecialMonsters();
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java
deleted file mode 100644
index 96d9375763..0000000000
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/areas/TowerOfInsolence/WatchmenBosses.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * This file is part of the L2J Mobius project.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package ai.areas.TowerOfInsolence;
-
-import org.l2jmobius.gameserver.model.Location;
-import org.l2jmobius.gameserver.model.actor.Npc;
-import org.l2jmobius.gameserver.model.actor.Player;
-
-import ai.AbstractNpcAI;
-
-/**
- * @author Mobius
- */
-public class WatchmenBosses extends AbstractNpcAI
-{
- // NPCs
- private static final int WATCHMAN_OF_THE_FORGOTTEN = 24555;
- private static final int WATCHMAN_OF_THE_RESURRECTED = 24561;
- private static final int WATCHMAN_OF_THE_CURSED = 24567;
- // Locations
- private static final Location[] WATCHMAN_OF_THE_FORGOTTEN_LOCATIONS =
- {
- new Location(-86568, 19304, -15429),
- new Location(-82024, 20440, -15426),
- new Location(-79624, 18488, -15429),
- new Location(-77560, 16184, -15426),
- new Location(-77656, 12776, -15429),
- new Location(-82024, 11848, -15426),
- new Location(-80152, 14328, -15429),
- new Location(-83864, 18136, -15429),
- new Location(-83976, 14296, -15429),
- };
- private static final Location[] WATCHMAN_OF_THE_RESURRECTED_LOCATIONS =
- {
- new Location(-83944, 17960, -12933),
- new Location(-80120, 14184, -12933),
- new Location(-80168, 17992, -12933),
- new Location(-83816, 14296, -12933),
- new Location(-86504, 16168, -12929),
- new Location(-85912, 12088, -12933),
- new Location(-82024, 11720, -12929),
- new Location(-80088, 10936, -12933),
- new Location(-77560, 16152, -12929),
- };
- private static final Location[] WATCHMAN_OF_THE_CURSED_LOCATIONS =
- {
- new Location(-77673, 16163, -10306),
- new Location(-79384, 18344, -10309),
- new Location(-82024, 20584, -10306),
- new Location(-84344, 18552, -10309),
- new Location(-86360, 16168, -10306),
- new Location(-86104, 12888, -10309),
- new Location(-83736, 10792, -10309),
- new Location(-83448, 14792, -10306),
- new Location(-80088, 17336, -10309),
- new Location(-84216, 17208, -10309),
- new Location(-80904, 13976, -10309),
- };
-
- private WatchmenBosses()
- {
- addKillId(WATCHMAN_OF_THE_FORGOTTEN, WATCHMAN_OF_THE_RESURRECTED, WATCHMAN_OF_THE_CURSED);
-
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_FORGOTTEN", 1000, null, null);
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_RESURRECTED", 1000, null, null);
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_CURSED", 1000, null, null);
- }
-
- @Override
- public String onAdvEvent(String event, Npc npc, Player player)
- {
- switch (event)
- {
- case "SPAWN_WATCHMAN_OF_THE_FORGOTTEN":
- {
- addSpawn(WATCHMAN_OF_THE_FORGOTTEN, getRandomEntry(WATCHMAN_OF_THE_FORGOTTEN_LOCATIONS));
- break;
- }
- case "SPAWN_WATCHMAN_OF_THE_RESURRECTED":
- {
- addSpawn(WATCHMAN_OF_THE_RESURRECTED, getRandomEntry(WATCHMAN_OF_THE_RESURRECTED_LOCATIONS));
- break;
- }
- case "SPAWN_WATCHMAN_OF_THE_CURSED":
- {
- addSpawn(WATCHMAN_OF_THE_CURSED, getRandomEntry(WATCHMAN_OF_THE_CURSED_LOCATIONS));
- break;
- }
- }
- return null;
- }
-
- @Override
- public String onKill(Npc npc, Player killer, boolean isSummon)
- {
- switch (npc.getId())
- {
- case WATCHMAN_OF_THE_FORGOTTEN:
- {
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_FORGOTTEN", 28800000, null, null);
- break;
- }
- case WATCHMAN_OF_THE_RESURRECTED:
- {
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_RESURRECTED", 28800000, null, null);
- break;
- }
- case WATCHMAN_OF_THE_CURSED:
- {
- startQuestTimer("SPAWN_WATCHMAN_OF_THE_CURSED", 28800000, null, null);
- break;
- }
- }
- return super.onKill(npc, killer, isSummon);
- }
-
- public static void main(String[] args)
- {
- new WatchmenBosses();
- }
-}