package ai;
import static com.aionemu.gameserver.model.DialogAction.SETPRO1;
import com.aionemu.gameserver.ai.AIName;
import com.aionemu.gameserver.ai.NpcAI;
import com.aionemu.gameserver.dataholders.DataManager;
import com.aionemu.gameserver.model.EmotionType;
import com.aionemu.gameserver.model.actions.PlayerMode;
import com.aionemu.gameserver.model.gameobjects.Npc;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.gameobjects.state.CreatureState;
import com.aionemu.gameserver.model.templates.flypath.FlyPathEntry;
import com.aionemu.gameserver.network.aion.serverpackets.SM_DIALOG_WINDOW;
import com.aionemu.gameserver.network.aion.serverpackets.SM_EMOTION;
import com.aionemu.gameserver.utils.PacketSendUtility;
/**
* @author Estrayl
*/
@AIName("hidden_teleporter")
public class HiddenTeleportNpcAI extends NpcAI {
public HiddenTeleportNpcAI(Npc owner) {
super(owner);
}
@Override
protected void handleDialogStart(Player player) {
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getObjectId(), 1011));
}
@Override
public boolean onDialogSelect(Player player, int dialogActionId, int questId, int extendedRewardIndex) {
if (dialogActionId == SETPRO1)
teleport(player);
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getObjectId(), 0));
return true;
}
private void teleport(Player player) {
int teleId = getTeleportId();
if (teleId == 0)
return;
FlyPathEntry flypath = DataManager.FLY_PATH.getPathTemplate(teleId);
player.setCurrentFlypath(flypath);
player.unsetPlayerMode(PlayerMode.RIDE);
player.setState(CreatureState.FLYING);
player.unsetState(CreatureState.ACTIVE);
player.setFlightTeleportId(teleId * 1000 + 1);
PacketSendUtility.broadcastPacket(player, new SM_EMOTION(player, EmotionType.START_FLYTELEPORT, teleId * 1000 + 1, 0), true);
}
private int getTeleportId() {
switch (getOwner().getNpcId()) {
case 804811:
return 279;
case 804812:
return 281;
case 804813:
return 280;
case 804814:
return 282;
case 804822:
return 286;
case 804823:
return 284;
case 804824:
return 283;
case 804825:
return 285;
}
return 0;
}
}