diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java new file mode 100644 index 0000000000..50b4d9784a --- /dev/null +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java @@ -0,0 +1,318 @@ +/* + * 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.HellboundIsland.BelethsMagicCircle; + +import com.l2jmobius.gameserver.datatables.SpawnTable; +import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; +import com.l2jmobius.gameserver.instancemanager.ZoneManager; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.spawns.SpawnTemplate; +import com.l2jmobius.gameserver.model.zone.L2ZoneType; +import com.l2jmobius.gameserver.model.zone.type.L2ScriptZone; +import com.l2jmobius.gameserver.network.serverpackets.Earthquake; +import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; + +import ai.AbstractNpcAI; + +/** + * Beleths Magic Circle + * @URL https://l2wiki.com/Beleths_Magic_Circle + * @author Screw, Gigi, Mobius + * @date 2017-10-26 - [16:06:10] + */ +public class EnchantedMegaliths extends AbstractNpcAI +{ + // NPCs + private static final int[] MONSTERS = + { + 19574, + 23402, + 23354, + 23355, + 23356, + 23357, + 23358, + 23359, + 23360, + 23361, + 23362, + 23363, + 23364, + 23365, + 23367, + 23368, + 23370, + 23371, + 23372, + 23373 + }; + // Others + private static final L2ScriptZone HELLBOUND_ZONE = ZoneManager.getInstance().getZoneById(40101, L2ScriptZone.class); + private static final String HB_MEGALITH_STAGE = "HB_MegalithStage"; + private static final int KILL_COUNT = 300; + private static SpawnTemplate spawnTemplateNormal; + private static SpawnTemplate spawnTemplateFinal; + private static int stage = 1; + private static int kills = 0; + + private EnchantedMegaliths() + { + addKillId(MONSTERS); + addEnterZoneId(HELLBOUND_ZONE.getId()); + startQuestTimer("CHECK_STATUS", 60000, null, null, true); + stage = GlobalVariablesManager.getInstance().getInt(HB_MEGALITH_STAGE, 1); + } + + @Override + public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) + { + switch (event) + { + case "CHECK_STATUS": + { + if (kills > KILL_COUNT) + { + if (stage < 3) + { + stage++; + } + else + { + stage = 1; + } + updateMegalithStage(); + kills = 0; + } + break; + } + } + return null; + } + + @Override + public String onEnterZone(L2Character creature, L2ZoneType zone) + { + if (creature.isPlayer()) + { + final L2PcInstance player = creature.getActingPlayer(); + switch (stage) + { + case 1: + { + // Activate green glow + player.sendPacket(new OnEventTrigger(19250032, true)); + player.sendPacket(new OnEventTrigger(19250014, true)); + player.sendPacket(new OnEventTrigger(19250020, true)); + player.sendPacket(new OnEventTrigger(19250026, true)); + player.sendPacket(new OnEventTrigger(19250002, true)); + player.sendPacket(new OnEventTrigger(19250008, true)); + // Deactivate red or yellow glow + player.sendPacket(new OnEventTrigger(19250034, false)); + player.sendPacket(new OnEventTrigger(19250016, false)); + player.sendPacket(new OnEventTrigger(19250022, false)); + player.sendPacket(new OnEventTrigger(19250028, false)); + player.sendPacket(new OnEventTrigger(19250004, false)); + player.sendPacket(new OnEventTrigger(19250010, false)); + player.sendPacket(new OnEventTrigger(19250036, false)); + player.sendPacket(new OnEventTrigger(19250018, false)); + player.sendPacket(new OnEventTrigger(19250024, false)); + player.sendPacket(new OnEventTrigger(19250030, false)); + player.sendPacket(new OnEventTrigger(19250006, false)); + player.sendPacket(new OnEventTrigger(19250012, false)); + break; + } + case 2: + { + // Activate yellow glow + player.sendPacket(new OnEventTrigger(19250034, true)); + player.sendPacket(new OnEventTrigger(19250016, true)); + player.sendPacket(new OnEventTrigger(19250022, true)); + player.sendPacket(new OnEventTrigger(19250028, true)); + player.sendPacket(new OnEventTrigger(19250004, true)); + player.sendPacket(new OnEventTrigger(19250010, true)); + // Deactivate red or green glow + player.sendPacket(new OnEventTrigger(19250032, false)); + player.sendPacket(new OnEventTrigger(19250014, false)); + player.sendPacket(new OnEventTrigger(19250020, false)); + player.sendPacket(new OnEventTrigger(19250026, false)); + player.sendPacket(new OnEventTrigger(19250002, false)); + player.sendPacket(new OnEventTrigger(19250008, false)); + player.sendPacket(new OnEventTrigger(19250036, false)); + player.sendPacket(new OnEventTrigger(19250018, false)); + player.sendPacket(new OnEventTrigger(19250024, false)); + player.sendPacket(new OnEventTrigger(19250030, false)); + player.sendPacket(new OnEventTrigger(19250006, false)); + player.sendPacket(new OnEventTrigger(19250012, false)); + break; + } + case 3: + { + // Activate red glow + player.sendPacket(new OnEventTrigger(19250036, true)); + player.sendPacket(new OnEventTrigger(19250018, true)); + player.sendPacket(new OnEventTrigger(19250024, true)); + player.sendPacket(new OnEventTrigger(19250030, true)); + player.sendPacket(new OnEventTrigger(19250006, true)); + player.sendPacket(new OnEventTrigger(19250012, true)); + // Deactivate green or yellow glow + player.sendPacket(new OnEventTrigger(19250034, false)); + player.sendPacket(new OnEventTrigger(19250016, false)); + player.sendPacket(new OnEventTrigger(19250022, false)); + player.sendPacket(new OnEventTrigger(19250028, false)); + player.sendPacket(new OnEventTrigger(19250004, false)); + player.sendPacket(new OnEventTrigger(19250010, false)); + player.sendPacket(new OnEventTrigger(19250032, false)); + player.sendPacket(new OnEventTrigger(19250014, false)); + player.sendPacket(new OnEventTrigger(19250020, false)); + player.sendPacket(new OnEventTrigger(19250026, false)); + player.sendPacket(new OnEventTrigger(19250002, false)); + player.sendPacket(new OnEventTrigger(19250008, false)); + break; + } + } + if (spawnTemplateNormal == null) + { + updateMegalithStage(); + } + } + return super.onEnterZone(creature, zone); + } + + private void updateMegalithStage() + { + GlobalVariablesManager.getInstance().set(HB_MEGALITH_STAGE, stage); + _log.info("[Hellbound] - Enchanted Megaliths stage: " + stage); + + switch (stage) + { + case 1: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250032, true)); + pl.sendPacket(new OnEventTrigger(19250014, true)); + pl.sendPacket(new OnEventTrigger(19250020, true)); + pl.sendPacket(new OnEventTrigger(19250026, true)); + pl.sendPacket(new OnEventTrigger(19250002, true)); + pl.sendPacket(new OnEventTrigger(19250008, true)); + pl.sendPacket(new OnEventTrigger(19250036, false)); + pl.sendPacket(new OnEventTrigger(19250018, false)); + pl.sendPacket(new OnEventTrigger(19250024, false)); + pl.sendPacket(new OnEventTrigger(19250030, false)); + pl.sendPacket(new OnEventTrigger(19250006, false)); + pl.sendPacket(new OnEventTrigger(19250012, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal.despawnAll(); + } + else + { + spawnTemplateNormal.spawnAll(); + spawnTemplateFinal.despawnAll(); + } + break; + } + case 2: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250034, true)); + pl.sendPacket(new OnEventTrigger(19250016, true)); + pl.sendPacket(new OnEventTrigger(19250022, true)); + pl.sendPacket(new OnEventTrigger(19250028, true)); + pl.sendPacket(new OnEventTrigger(19250004, true)); + pl.sendPacket(new OnEventTrigger(19250010, true)); + pl.sendPacket(new OnEventTrigger(19250032, false)); + pl.sendPacket(new OnEventTrigger(19250014, false)); + pl.sendPacket(new OnEventTrigger(19250020, false)); + pl.sendPacket(new OnEventTrigger(19250026, false)); + pl.sendPacket(new OnEventTrigger(19250002, false)); + pl.sendPacket(new OnEventTrigger(19250008, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal.despawnAll(); + } + break; + } + case 3: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250036, true)); + pl.sendPacket(new OnEventTrigger(19250018, true)); + pl.sendPacket(new OnEventTrigger(19250024, true)); + pl.sendPacket(new OnEventTrigger(19250030, true)); + pl.sendPacket(new OnEventTrigger(19250006, true)); + pl.sendPacket(new OnEventTrigger(19250012, true)); + pl.sendPacket(new OnEventTrigger(19250034, false)); + pl.sendPacket(new OnEventTrigger(19250016, false)); + pl.sendPacket(new OnEventTrigger(19250022, false)); + pl.sendPacket(new OnEventTrigger(19250028, false)); + pl.sendPacket(new OnEventTrigger(19250004, false)); + pl.sendPacket(new OnEventTrigger(19250010, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateNormal.despawnAll(); + } + else + { + spawnTemplateNormal.despawnAll(); + spawnTemplateFinal.spawnAll(); + } + break; + } + } + } + + @Override + public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) + { + kills++; + return super.onKill(npc, killer, isSummon); + } + + public static void main(String[] args) + { + new EnchantedMegaliths(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml new file mode 100644 index 0000000000..1b847e8bac --- /dev/null +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/spawns/Hellbound/Hellbound.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/spawns/Hellbound/Hellbound.xml index 287d74d3b2..2d28a436e4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/spawns/Hellbound/Hellbound.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/spawns/Hellbound/Hellbound.xml @@ -49,163 +49,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java new file mode 100644 index 0000000000..50b4d9784a --- /dev/null +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java @@ -0,0 +1,318 @@ +/* + * 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.HellboundIsland.BelethsMagicCircle; + +import com.l2jmobius.gameserver.datatables.SpawnTable; +import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; +import com.l2jmobius.gameserver.instancemanager.ZoneManager; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.spawns.SpawnTemplate; +import com.l2jmobius.gameserver.model.zone.L2ZoneType; +import com.l2jmobius.gameserver.model.zone.type.L2ScriptZone; +import com.l2jmobius.gameserver.network.serverpackets.Earthquake; +import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; + +import ai.AbstractNpcAI; + +/** + * Beleths Magic Circle + * @URL https://l2wiki.com/Beleths_Magic_Circle + * @author Screw, Gigi, Mobius + * @date 2017-10-26 - [16:06:10] + */ +public class EnchantedMegaliths extends AbstractNpcAI +{ + // NPCs + private static final int[] MONSTERS = + { + 19574, + 23402, + 23354, + 23355, + 23356, + 23357, + 23358, + 23359, + 23360, + 23361, + 23362, + 23363, + 23364, + 23365, + 23367, + 23368, + 23370, + 23371, + 23372, + 23373 + }; + // Others + private static final L2ScriptZone HELLBOUND_ZONE = ZoneManager.getInstance().getZoneById(40101, L2ScriptZone.class); + private static final String HB_MEGALITH_STAGE = "HB_MegalithStage"; + private static final int KILL_COUNT = 300; + private static SpawnTemplate spawnTemplateNormal; + private static SpawnTemplate spawnTemplateFinal; + private static int stage = 1; + private static int kills = 0; + + private EnchantedMegaliths() + { + addKillId(MONSTERS); + addEnterZoneId(HELLBOUND_ZONE.getId()); + startQuestTimer("CHECK_STATUS", 60000, null, null, true); + stage = GlobalVariablesManager.getInstance().getInt(HB_MEGALITH_STAGE, 1); + } + + @Override + public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) + { + switch (event) + { + case "CHECK_STATUS": + { + if (kills > KILL_COUNT) + { + if (stage < 3) + { + stage++; + } + else + { + stage = 1; + } + updateMegalithStage(); + kills = 0; + } + break; + } + } + return null; + } + + @Override + public String onEnterZone(L2Character creature, L2ZoneType zone) + { + if (creature.isPlayer()) + { + final L2PcInstance player = creature.getActingPlayer(); + switch (stage) + { + case 1: + { + // Activate green glow + player.sendPacket(new OnEventTrigger(19250032, true)); + player.sendPacket(new OnEventTrigger(19250014, true)); + player.sendPacket(new OnEventTrigger(19250020, true)); + player.sendPacket(new OnEventTrigger(19250026, true)); + player.sendPacket(new OnEventTrigger(19250002, true)); + player.sendPacket(new OnEventTrigger(19250008, true)); + // Deactivate red or yellow glow + player.sendPacket(new OnEventTrigger(19250034, false)); + player.sendPacket(new OnEventTrigger(19250016, false)); + player.sendPacket(new OnEventTrigger(19250022, false)); + player.sendPacket(new OnEventTrigger(19250028, false)); + player.sendPacket(new OnEventTrigger(19250004, false)); + player.sendPacket(new OnEventTrigger(19250010, false)); + player.sendPacket(new OnEventTrigger(19250036, false)); + player.sendPacket(new OnEventTrigger(19250018, false)); + player.sendPacket(new OnEventTrigger(19250024, false)); + player.sendPacket(new OnEventTrigger(19250030, false)); + player.sendPacket(new OnEventTrigger(19250006, false)); + player.sendPacket(new OnEventTrigger(19250012, false)); + break; + } + case 2: + { + // Activate yellow glow + player.sendPacket(new OnEventTrigger(19250034, true)); + player.sendPacket(new OnEventTrigger(19250016, true)); + player.sendPacket(new OnEventTrigger(19250022, true)); + player.sendPacket(new OnEventTrigger(19250028, true)); + player.sendPacket(new OnEventTrigger(19250004, true)); + player.sendPacket(new OnEventTrigger(19250010, true)); + // Deactivate red or green glow + player.sendPacket(new OnEventTrigger(19250032, false)); + player.sendPacket(new OnEventTrigger(19250014, false)); + player.sendPacket(new OnEventTrigger(19250020, false)); + player.sendPacket(new OnEventTrigger(19250026, false)); + player.sendPacket(new OnEventTrigger(19250002, false)); + player.sendPacket(new OnEventTrigger(19250008, false)); + player.sendPacket(new OnEventTrigger(19250036, false)); + player.sendPacket(new OnEventTrigger(19250018, false)); + player.sendPacket(new OnEventTrigger(19250024, false)); + player.sendPacket(new OnEventTrigger(19250030, false)); + player.sendPacket(new OnEventTrigger(19250006, false)); + player.sendPacket(new OnEventTrigger(19250012, false)); + break; + } + case 3: + { + // Activate red glow + player.sendPacket(new OnEventTrigger(19250036, true)); + player.sendPacket(new OnEventTrigger(19250018, true)); + player.sendPacket(new OnEventTrigger(19250024, true)); + player.sendPacket(new OnEventTrigger(19250030, true)); + player.sendPacket(new OnEventTrigger(19250006, true)); + player.sendPacket(new OnEventTrigger(19250012, true)); + // Deactivate green or yellow glow + player.sendPacket(new OnEventTrigger(19250034, false)); + player.sendPacket(new OnEventTrigger(19250016, false)); + player.sendPacket(new OnEventTrigger(19250022, false)); + player.sendPacket(new OnEventTrigger(19250028, false)); + player.sendPacket(new OnEventTrigger(19250004, false)); + player.sendPacket(new OnEventTrigger(19250010, false)); + player.sendPacket(new OnEventTrigger(19250032, false)); + player.sendPacket(new OnEventTrigger(19250014, false)); + player.sendPacket(new OnEventTrigger(19250020, false)); + player.sendPacket(new OnEventTrigger(19250026, false)); + player.sendPacket(new OnEventTrigger(19250002, false)); + player.sendPacket(new OnEventTrigger(19250008, false)); + break; + } + } + if (spawnTemplateNormal == null) + { + updateMegalithStage(); + } + } + return super.onEnterZone(creature, zone); + } + + private void updateMegalithStage() + { + GlobalVariablesManager.getInstance().set(HB_MEGALITH_STAGE, stage); + _log.info("[Hellbound] - Enchanted Megaliths stage: " + stage); + + switch (stage) + { + case 1: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250032, true)); + pl.sendPacket(new OnEventTrigger(19250014, true)); + pl.sendPacket(new OnEventTrigger(19250020, true)); + pl.sendPacket(new OnEventTrigger(19250026, true)); + pl.sendPacket(new OnEventTrigger(19250002, true)); + pl.sendPacket(new OnEventTrigger(19250008, true)); + pl.sendPacket(new OnEventTrigger(19250036, false)); + pl.sendPacket(new OnEventTrigger(19250018, false)); + pl.sendPacket(new OnEventTrigger(19250024, false)); + pl.sendPacket(new OnEventTrigger(19250030, false)); + pl.sendPacket(new OnEventTrigger(19250006, false)); + pl.sendPacket(new OnEventTrigger(19250012, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal.despawnAll(); + } + else + { + spawnTemplateNormal.spawnAll(); + spawnTemplateFinal.despawnAll(); + } + break; + } + case 2: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250034, true)); + pl.sendPacket(new OnEventTrigger(19250016, true)); + pl.sendPacket(new OnEventTrigger(19250022, true)); + pl.sendPacket(new OnEventTrigger(19250028, true)); + pl.sendPacket(new OnEventTrigger(19250004, true)); + pl.sendPacket(new OnEventTrigger(19250010, true)); + pl.sendPacket(new OnEventTrigger(19250032, false)); + pl.sendPacket(new OnEventTrigger(19250014, false)); + pl.sendPacket(new OnEventTrigger(19250020, false)); + pl.sendPacket(new OnEventTrigger(19250026, false)); + pl.sendPacket(new OnEventTrigger(19250002, false)); + pl.sendPacket(new OnEventTrigger(19250008, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal.despawnAll(); + } + break; + } + case 3: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250036, true)); + pl.sendPacket(new OnEventTrigger(19250018, true)); + pl.sendPacket(new OnEventTrigger(19250024, true)); + pl.sendPacket(new OnEventTrigger(19250030, true)); + pl.sendPacket(new OnEventTrigger(19250006, true)); + pl.sendPacket(new OnEventTrigger(19250012, true)); + pl.sendPacket(new OnEventTrigger(19250034, false)); + pl.sendPacket(new OnEventTrigger(19250016, false)); + pl.sendPacket(new OnEventTrigger(19250022, false)); + pl.sendPacket(new OnEventTrigger(19250028, false)); + pl.sendPacket(new OnEventTrigger(19250004, false)); + pl.sendPacket(new OnEventTrigger(19250010, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateNormal.despawnAll(); + } + else + { + spawnTemplateNormal.despawnAll(); + spawnTemplateFinal.spawnAll(); + } + break; + } + } + } + + @Override + public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) + { + kills++; + return super.onKill(npc, killer, isSummon); + } + + public static void main(String[] args) + { + new EnchantedMegaliths(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml b/L2J_Mobius_2.5_Underground/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml new file mode 100644 index 0000000000..1b847e8bac --- /dev/null +++ b/L2J_Mobius_2.5_Underground/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/spawns/Hellbound/Hellbound.xml b/L2J_Mobius_2.5_Underground/dist/game/data/spawns/Hellbound/Hellbound.xml index 287d74d3b2..2d28a436e4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/spawns/Hellbound/Hellbound.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/spawns/Hellbound/Hellbound.xml @@ -49,163 +49,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java new file mode 100644 index 0000000000..50b4d9784a --- /dev/null +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/areas/HellboundIsland/BelethsMagicCircle/EnchantedMegaliths.java @@ -0,0 +1,318 @@ +/* + * 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.HellboundIsland.BelethsMagicCircle; + +import com.l2jmobius.gameserver.datatables.SpawnTable; +import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; +import com.l2jmobius.gameserver.instancemanager.ZoneManager; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.spawns.SpawnTemplate; +import com.l2jmobius.gameserver.model.zone.L2ZoneType; +import com.l2jmobius.gameserver.model.zone.type.L2ScriptZone; +import com.l2jmobius.gameserver.network.serverpackets.Earthquake; +import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; + +import ai.AbstractNpcAI; + +/** + * Beleths Magic Circle + * @URL https://l2wiki.com/Beleths_Magic_Circle + * @author Screw, Gigi, Mobius + * @date 2017-10-26 - [16:06:10] + */ +public class EnchantedMegaliths extends AbstractNpcAI +{ + // NPCs + private static final int[] MONSTERS = + { + 19574, + 23402, + 23354, + 23355, + 23356, + 23357, + 23358, + 23359, + 23360, + 23361, + 23362, + 23363, + 23364, + 23365, + 23367, + 23368, + 23370, + 23371, + 23372, + 23373 + }; + // Others + private static final L2ScriptZone HELLBOUND_ZONE = ZoneManager.getInstance().getZoneById(40101, L2ScriptZone.class); + private static final String HB_MEGALITH_STAGE = "HB_MegalithStage"; + private static final int KILL_COUNT = 300; + private static SpawnTemplate spawnTemplateNormal; + private static SpawnTemplate spawnTemplateFinal; + private static int stage = 1; + private static int kills = 0; + + private EnchantedMegaliths() + { + addKillId(MONSTERS); + addEnterZoneId(HELLBOUND_ZONE.getId()); + startQuestTimer("CHECK_STATUS", 60000, null, null, true); + stage = GlobalVariablesManager.getInstance().getInt(HB_MEGALITH_STAGE, 1); + } + + @Override + public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) + { + switch (event) + { + case "CHECK_STATUS": + { + if (kills > KILL_COUNT) + { + if (stage < 3) + { + stage++; + } + else + { + stage = 1; + } + updateMegalithStage(); + kills = 0; + } + break; + } + } + return null; + } + + @Override + public String onEnterZone(L2Character creature, L2ZoneType zone) + { + if (creature.isPlayer()) + { + final L2PcInstance player = creature.getActingPlayer(); + switch (stage) + { + case 1: + { + // Activate green glow + player.sendPacket(new OnEventTrigger(19250032, true)); + player.sendPacket(new OnEventTrigger(19250014, true)); + player.sendPacket(new OnEventTrigger(19250020, true)); + player.sendPacket(new OnEventTrigger(19250026, true)); + player.sendPacket(new OnEventTrigger(19250002, true)); + player.sendPacket(new OnEventTrigger(19250008, true)); + // Deactivate red or yellow glow + player.sendPacket(new OnEventTrigger(19250034, false)); + player.sendPacket(new OnEventTrigger(19250016, false)); + player.sendPacket(new OnEventTrigger(19250022, false)); + player.sendPacket(new OnEventTrigger(19250028, false)); + player.sendPacket(new OnEventTrigger(19250004, false)); + player.sendPacket(new OnEventTrigger(19250010, false)); + player.sendPacket(new OnEventTrigger(19250036, false)); + player.sendPacket(new OnEventTrigger(19250018, false)); + player.sendPacket(new OnEventTrigger(19250024, false)); + player.sendPacket(new OnEventTrigger(19250030, false)); + player.sendPacket(new OnEventTrigger(19250006, false)); + player.sendPacket(new OnEventTrigger(19250012, false)); + break; + } + case 2: + { + // Activate yellow glow + player.sendPacket(new OnEventTrigger(19250034, true)); + player.sendPacket(new OnEventTrigger(19250016, true)); + player.sendPacket(new OnEventTrigger(19250022, true)); + player.sendPacket(new OnEventTrigger(19250028, true)); + player.sendPacket(new OnEventTrigger(19250004, true)); + player.sendPacket(new OnEventTrigger(19250010, true)); + // Deactivate red or green glow + player.sendPacket(new OnEventTrigger(19250032, false)); + player.sendPacket(new OnEventTrigger(19250014, false)); + player.sendPacket(new OnEventTrigger(19250020, false)); + player.sendPacket(new OnEventTrigger(19250026, false)); + player.sendPacket(new OnEventTrigger(19250002, false)); + player.sendPacket(new OnEventTrigger(19250008, false)); + player.sendPacket(new OnEventTrigger(19250036, false)); + player.sendPacket(new OnEventTrigger(19250018, false)); + player.sendPacket(new OnEventTrigger(19250024, false)); + player.sendPacket(new OnEventTrigger(19250030, false)); + player.sendPacket(new OnEventTrigger(19250006, false)); + player.sendPacket(new OnEventTrigger(19250012, false)); + break; + } + case 3: + { + // Activate red glow + player.sendPacket(new OnEventTrigger(19250036, true)); + player.sendPacket(new OnEventTrigger(19250018, true)); + player.sendPacket(new OnEventTrigger(19250024, true)); + player.sendPacket(new OnEventTrigger(19250030, true)); + player.sendPacket(new OnEventTrigger(19250006, true)); + player.sendPacket(new OnEventTrigger(19250012, true)); + // Deactivate green or yellow glow + player.sendPacket(new OnEventTrigger(19250034, false)); + player.sendPacket(new OnEventTrigger(19250016, false)); + player.sendPacket(new OnEventTrigger(19250022, false)); + player.sendPacket(new OnEventTrigger(19250028, false)); + player.sendPacket(new OnEventTrigger(19250004, false)); + player.sendPacket(new OnEventTrigger(19250010, false)); + player.sendPacket(new OnEventTrigger(19250032, false)); + player.sendPacket(new OnEventTrigger(19250014, false)); + player.sendPacket(new OnEventTrigger(19250020, false)); + player.sendPacket(new OnEventTrigger(19250026, false)); + player.sendPacket(new OnEventTrigger(19250002, false)); + player.sendPacket(new OnEventTrigger(19250008, false)); + break; + } + } + if (spawnTemplateNormal == null) + { + updateMegalithStage(); + } + } + return super.onEnterZone(creature, zone); + } + + private void updateMegalithStage() + { + GlobalVariablesManager.getInstance().set(HB_MEGALITH_STAGE, stage); + _log.info("[Hellbound] - Enchanted Megaliths stage: " + stage); + + switch (stage) + { + case 1: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250032, true)); + pl.sendPacket(new OnEventTrigger(19250014, true)); + pl.sendPacket(new OnEventTrigger(19250020, true)); + pl.sendPacket(new OnEventTrigger(19250026, true)); + pl.sendPacket(new OnEventTrigger(19250002, true)); + pl.sendPacket(new OnEventTrigger(19250008, true)); + pl.sendPacket(new OnEventTrigger(19250036, false)); + pl.sendPacket(new OnEventTrigger(19250018, false)); + pl.sendPacket(new OnEventTrigger(19250024, false)); + pl.sendPacket(new OnEventTrigger(19250030, false)); + pl.sendPacket(new OnEventTrigger(19250006, false)); + pl.sendPacket(new OnEventTrigger(19250012, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal.despawnAll(); + } + else + { + spawnTemplateNormal.spawnAll(); + spawnTemplateFinal.despawnAll(); + } + break; + } + case 2: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250034, true)); + pl.sendPacket(new OnEventTrigger(19250016, true)); + pl.sendPacket(new OnEventTrigger(19250022, true)); + pl.sendPacket(new OnEventTrigger(19250028, true)); + pl.sendPacket(new OnEventTrigger(19250004, true)); + pl.sendPacket(new OnEventTrigger(19250010, true)); + pl.sendPacket(new OnEventTrigger(19250032, false)); + pl.sendPacket(new OnEventTrigger(19250014, false)); + pl.sendPacket(new OnEventTrigger(19250020, false)); + pl.sendPacket(new OnEventTrigger(19250026, false)); + pl.sendPacket(new OnEventTrigger(19250002, false)); + pl.sendPacket(new OnEventTrigger(19250008, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal.despawnAll(); + } + break; + } + case 3: + { + for (L2PcInstance pl : HELLBOUND_ZONE.getPlayersInside()) + { + pl.sendPacket(new OnEventTrigger(19250036, true)); + pl.sendPacket(new OnEventTrigger(19250018, true)); + pl.sendPacket(new OnEventTrigger(19250024, true)); + pl.sendPacket(new OnEventTrigger(19250030, true)); + pl.sendPacket(new OnEventTrigger(19250006, true)); + pl.sendPacket(new OnEventTrigger(19250012, true)); + pl.sendPacket(new OnEventTrigger(19250034, false)); + pl.sendPacket(new OnEventTrigger(19250016, false)); + pl.sendPacket(new OnEventTrigger(19250022, false)); + pl.sendPacket(new OnEventTrigger(19250028, false)); + pl.sendPacket(new OnEventTrigger(19250004, false)); + pl.sendPacket(new OnEventTrigger(19250010, false)); + if (spawnTemplateNormal != null) + { + pl.sendPacket(new Earthquake(pl.getLocation(), 40, 7)); + } + } + + if (spawnTemplateNormal == null) + { + spawnTemplateNormal = SpawnTable.getInstance().getAnySpawn(MONSTERS[4]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateFinal = SpawnTable.getInstance().getAnySpawn(MONSTERS[14]).getNpcSpawnTemplate().getSpawnTemplate(); + spawnTemplateNormal.despawnAll(); + } + else + { + spawnTemplateNormal.despawnAll(); + spawnTemplateFinal.spawnAll(); + } + break; + } + } + } + + @Override + public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) + { + kills++; + return super.onKill(npc, killer, isSummon); + } + + public static void main(String[] args) + { + new EnchantedMegaliths(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml b/L2J_Mobius_3.0_Helios/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml new file mode 100644 index 0000000000..1b847e8bac --- /dev/null +++ b/L2J_Mobius_3.0_Helios/dist/game/data/spawns/Hellbound/EnchantedMegaliths.xml @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/spawns/Hellbound/Hellbound.xml b/L2J_Mobius_3.0_Helios/dist/game/data/spawns/Hellbound/Hellbound.xml index 34a4b1ff9a..331fdb7beb 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/spawns/Hellbound/Hellbound.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/spawns/Hellbound/Hellbound.xml @@ -50,163 +50,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -430,4 +273,4 @@ - \ No newline at end of file +