{
if (param.length < 4)
{
throw new IllegalArgumentException();
}
final Player player = getSelf();
if (player == null)
{
return;
}
final long price = Long.parseLong(param[param.length - 1]);
if (!NpcInstance.canBypassCheck(player, player.getLastNpc()))
{
return;
}
if ((price > 0) && (player.getAdena() < price))
{
player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
return;
}
if (player.getMountType() == 2)
{
player.sendMessage("Телепортаци�? верхом на виверне невозможна.");
return;
}
if (player.getLastNpc() != null)
{
final int npcId = player.getLastNpc().getNpcId();
switch (npcId)
{
case 30483:
if (player.getLevel() >= Config.CRUMA_GATEKEEPER_LVL)
{
show("teleporter/30483-no.htm", player);
return;
}
break;
case 32864:
case 32865:
case 32866:
case 32867:
case 32868:
case 32869:
case 32870:
if (player.getLevel() < 80)
{
show("teleporter/" + npcId + "-no.htm", player);
return;
}
break;
}
}
final int x = Integer.parseInt(param[0]);
final int y = Integer.parseInt(param[1]);
final int z = Integer.parseInt(param[2]);
final int castleId = (param.length > 4) ? Integer.parseInt(param[3]) : 0;
if (player.getReflection().isDefault())
{
final Castle castle = (castleId > 0) ? ResidenceHolder.getInstance().getResidence(Castle.class, castleId) : null;
if ((castle != null) && castle.getSiegeEvent().isInProgress())
{
player.sendPacket(Msg.YOU_CANNOT_TELEPORT_TO_A_VILLAGE_THAT_IS_IN_A_SIEGE);
return;
}
}
final Location pos = Location.findPointToStay(x, y, z, 50, 100, player.getGeoIndex());
if (price > 0)
{
player.reduceAdena(price, true);
}
player.teleToLocation(pos);
}