{
if(param.length < 4)
{
throw new IllegalArgumentException();
}
L2Player player = (L2Player) getSelf();
if(player == null)
{
return;
}
long price = Long.parseLong(param[3]);
if(!L2NpcInstance.canBypassCheck(player, player.getLastNpc()))
{
return;
}
if(price > 0 && player.getAdena() < price)
{
player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
return;
}
if(player.isTerritoryFlagEquipped() || player.isCombatFlagEquipped())
{
player.sendPacket(Msg.YOU_CANNOT_TELEPORT_WHILE_IN_POSSESSION_OF_A_WARD);
return;
}
if(player.getMountType() == 2)
{
player.sendMessage("Телепортация верхом на виверне невозможна.");
return;
}
// player can not teleport in frog transformation _194_SevenSignContractOfMammon
if (player.getTransformation() == 111)
{
player.sendMessage("Вы не можете телепортироватся в этой трансформации.");
return;
}
/* Затычка, npc Mozella не ТПшит чаров уровень которых превышает заданный в конфиге
* Off Like >= 56 lvl, данные по ограничению lvl'a устанавливаются в altsettings.ini.
*/
if(player.getLastNpc() != null)
{
int mozella_cruma = 30483; // NPC Mozella id 30483
if(player.getLastNpc().getNpcId() == mozella_cruma && player.getLevel() >= Config.CRUMA_GATEKEEPER_LVL)
{
show("data/html/teleporter/30483-no.htm", player);
return;
}
}
int x = Integer.parseInt(param[0]);
int y = Integer.parseInt(param[1]);
int z = Integer.parseInt(param[2]);
// Нельзя телепортироваться в города, где идет осада
// Узнаем, идет ли осада в ближайшем замке к точке телепортации
Castle castle = TownManager.getInstance().getClosestTown(x, y).getCastle();
if(castle != null && castle.getSiege().isInProgress())
{
// Определяем, в город ли телепортируется чар
boolean teleToTown = false;
int townId = 0;
for(L2Zone town : ZoneManager.getInstance().getZoneByType(ZoneType.Town))
{
if(town.checkIfInZone(x, y))
{
teleToTown = true;
townId = town.getIndex();
break;
}
}
if(teleToTown && townId == castle.getTown())
{
player.sendPacket(Msg.YOU_CANNOT_TELEPORT_TO_A_VILLAGE_THAT_IS_IN_A_SIEGE);
return;
}
}
Location pos = GeoEngine.findPointToStay(x, y, z, 50, 100, player.getReflection().getGeoIndex());
if(price > 0)
{
player.reduceAdena(price, true);
}
player.teleToLocation(pos);
}