package instance; import java.util.concurrent.atomic.AtomicBoolean; import com.aionemu.commons.utils.Rnd; import com.aionemu.gameserver.instance.handlers.GeneralInstanceHandler; import com.aionemu.gameserver.instance.handlers.InstanceID; import com.aionemu.gameserver.model.Race; import com.aionemu.gameserver.model.animations.TeleportAnimation; import com.aionemu.gameserver.model.gameobjects.Npc; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE; import com.aionemu.gameserver.services.player.PlayerReviveService; import com.aionemu.gameserver.services.teleport.TeleportService; import com.aionemu.gameserver.skillengine.SkillEngine; import com.aionemu.gameserver.utils.PacketSendUtility; import com.aionemu.gameserver.utils.ThreadPoolManager; import com.aionemu.gameserver.world.WorldMapInstance; /** * @author Yeats */ @InstanceID(301140000) public class SeizedDanuarSanctuaryInstance extends GeneralInstanceHandler { private Race instanceRace; private final AtomicBoolean started = new AtomicBoolean(false); private final AtomicBoolean cannonUsed = new AtomicBoolean(false); public SeizedDanuarSanctuaryInstance(WorldMapInstance instance) { super(instance); } @Override public void onInstanceCreate() { spawnRndBoss(); } @Override public void onEnterInstance(Player player) { if (instanceRace == null && started.compareAndSet(false, true)) { instanceRace = player.getRace(); spawnQuestNpcs(); } } @Override public void onDie(Npc npc) { super.onDie(npc); switch (npc.getNpcId()) { case 233187: spawn(233087, 906.4945f, 861.5854f, 280.5441f, (byte) 73, 1699); npc.getController().delete(); break; case 235620: case 235619: case 235621: spawn(701876, 1071.9772f, 682.4911f, 282.0391f, (byte) 60); // Emergency Exit break; case 730866: case 233448: case 233447: npc.getController().delete(); break; } } @Override public void handleUseItemFinish(Player player, Npc npc) { switch (npc.getNpcId()) { case 701873: TeleportService.teleportTo(player, instance, 1029.273f, 362.651f, 297.89f, (byte) 30, TeleportAnimation.FADE_OUT_BEAM); break; case 701871: TeleportService.teleportTo(player, instance, 1006.0412f, 1366.468f, 337.26f, (byte) 105, TeleportAnimation.FADE_OUT_BEAM); break; case 701872: TeleportService.teleportTo(player, instance, 846.172f, 991.731f, 300.04f, (byte) 110, TeleportAnimation.FADE_OUT_BEAM); break; case 730863: if (cannonUsed.compareAndSet(false, true)) { Npc target = instance.getNpc(730866); SkillEngine.getInstance().getSkill(npc, 20385, 1, target).useWithoutPropSkill(); if (target != null) { ThreadPoolManager.getInstance().schedule(() -> target.getController().die(), 5700); } } break; case 701876: TeleportService.moveToInstanceExit(player, mapId, player.getRace()); break; } } @Override public boolean onReviveEvent(Player player) { PlayerReviveService.revive(player, 25, 25, true, 0); PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_REBIRTH_MASSAGE_ME()); player.getGameStats().updateStatsAndSpeedVisually(); TeleportService.teleportTo(player, instance, 388.6437f, 1184.639f, 55.30134f); return true; } private void spawnRndBoss() { /* * 235619 Warmage Suyaroka * 235620 Chief Medic Tagnu * 235621 Virulent Ukahim */ spawn((235619 + Rnd.get(0, 2)), 1056.6105f, 694.0836f, 282.04f, (byte) 30); } private void spawnQuestNpcs() { if (instanceRace == Race.ELYOS) { spawn(233129, 1022.065f, 465.547f, 290.2684f, (byte) 10); spawn(233129, 867.786f, 911.695f, 293.007f, (byte) 80); spawn(233129, 1068.531f, 481.1384f, 285.4618f, (byte) 110); spawn(233129, 920.645f, 923.6408f, 293.1628f, (byte) 110); spawn(233130, 1034.348f, 482.7226f, 290.3569f, (byte) 40); spawn(233130, 972.4765f, 1327.148f, 335.876f, (byte) 100); spawn(233131, 1103.7655f, 440.8195f, 284.6165f, (byte) 70); spawn(233131, 954.9696f, 910.779f, 299.523f, (byte) 110); } else { spawn(233126, 1022.065f, 465.547f, 290.2684f, (byte) 10); spawn(233126, 1068.531f, 481.1384f, 285.4618f, (byte) 110); spawn(233126, 867.786f, 911.695f, 293.007f, (byte) 80); spawn(233126, 920.645f, 923.6408f, 293.1628f, (byte) 110); spawn(233127, 1034.348f, 482.7226f, 290.3569f, (byte) 40); spawn(233127, 972.4765f, 1327.148f, 335.876f, (byte) 100); spawn(233128, 1103.7655f, 440.8195f, 284.6165f, (byte) 70); spawn(233128, 954.9696f, 910.779f, 299.523f, (byte) 110); } } }