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.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 Ritsu, Tibald
*/
@InstanceID(301380000)
public class DanuarSanctuaryInstance extends GeneralInstanceHandler {
private final AtomicBoolean cannonUsed = new AtomicBoolean(false);
public DanuarSanctuaryInstance(WorldMapInstance instance) {
super(instance);
}
@Override
public void onInstanceCreate() {
spawnRndBoss();
}
@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 235624:
case 235625:
case 235626:
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() {
/*
* 235624 Warmage Suyaroka
* 235625 Chief Medic Tagnu
* 235626 Virulent Ukahim
*/
spawn((235624 + Rnd.get(0, 2)), 1056.6105f, 694.0836f, 282.04f, (byte) 30);
}
}