package instance; 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.gameobjects.Npc; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.utils.PositionUtil; import com.aionemu.gameserver.utils.ThreadPoolManager; import com.aionemu.gameserver.world.WorldMapInstance; import com.aionemu.gameserver.world.WorldPosition; /** * @author xTz, Ritsu, Tibald */ @InstanceID(310110000) public class TheobomosLabInstance extends GeneralInstanceHandler { private boolean isInstanceDestroyed; private boolean isDead1 = false; private boolean isDead2 = false; public TheobomosLabInstance(WorldMapInstance instance) { super(instance); } @Override public void onDie(Npc npc) { if (isInstanceDestroyed) return; if (npc.getMaster() instanceof Player) return; switch (npc.getNpcId()) { case 214669: // Triroan spawn(730178, 571.15f, 490.6607f, 196.7324f, (byte) 60); break; case 280971: case 280972: if (guardDie(npc)) removeBuff(); } } /** * @Override public void onEnterInstance(Player player) { final QuestState qs = player.getQuestStateList().getQuestState(1094); if (qs != null && * qs.getStatus() == QuestStatus.COMPLETE) doors.get(37).setOpen(true); else doors.get(37).setOpen(false); }//this door is static door, so * we cant control it. */ @Override public void onInstanceDestroy() { isDead1 = false; isDead2 = false; isInstanceDestroyed = true; } private boolean guardDie(Npc npc) { WorldPosition p = npc.getPosition(); int npcId = npc.getNpcId(); Npc orb = getNpc(280973); if (orb != null && PositionUtil.getDistance(orb, npc) <= 7) { switch (npcId) { case 280971 -> isDead1 = true; case 280972 -> isDead2 = true; } return true; } else { npc.getController().delete(); spawn(npcId, p.getX(), p.getY(), p.getZ(), (byte) 41); return false; } } private void removeBuff() { ThreadPoolManager.getInstance().schedule(() -> { if (!isInstanceDestroyed && isDead1 && isDead2) { getNpc(214668).getEffectController().removeEffect(18481); deleteAliveNpcs(280973); } }, 1000); } @Override public void onInstanceCreate() { if (Rnd.nextBoolean()) { switch (Rnd.get(1, 3)) { case 1 -> spawn(798223, 256.26215f, 512.9742f, 187.79453f, (byte) 0); case 2 -> spawn(798223, 360.16098f, 526.9446f, 186.20251f, (byte) 105); case 3 -> spawn(798223, 476.77145f, 541.5697f, 187.79453f, (byte) 90); } } } }