Commented MoveToLocation siege zone checks.

This commit is contained in:
MobiusDevelopment
2019-10-02 11:26:01 +00:00
parent e5a6119c61
commit 512f4974cb
15 changed files with 1050 additions and 1169 deletions

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -22,19 +22,11 @@ import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -107,75 +99,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final int teleMode = player.getTeleMode(); // final int teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == 0)) // if (!player.isFlying() && (teleMode == 0))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceId())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceId()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -213,6 +205,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final int teleMode = player.getTeleMode();
if (teleMode > 0) if (teleMode > 0)
{ {
if (teleMode == 1) if (teleMode == 1)

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC:

View File

@@ -24,20 +24,12 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.data.xml.impl.DoorData; import org.l2jmobius.gameserver.data.xml.impl.DoorData;
import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.AdminTeleportType;
import org.l2jmobius.gameserver.enums.SayuneType; import org.l2jmobius.gameserver.enums.SayuneType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -49,7 +41,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMove;
import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast; import org.l2jmobius.gameserver.network.serverpackets.sayune.ExFlyMoveBroadcast;
import org.l2jmobius.gameserver.util.Broadcast; import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
public class MoveBackwardToLocation implements IClientIncomingPacket public class MoveBackwardToLocation implements IClientIncomingPacket
{ {
@@ -106,75 +97,75 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
// Prevent player force moving in or out siege area. // Prevent player force moving in or out siege area.
final AdminTeleportType teleMode = player.getTeleMode(); // final AdminTeleportType teleMode = player.getTeleMode();
if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL)) // if (!player.isFlying() && (teleMode == AdminTeleportType.NORMAL))
{ // {
final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT); // final boolean siegable = player.isInsideZone(ZoneId.CASTLE) || player.isInsideZone(ZoneId.FORT);
boolean waterContact = player.isInsideZone(ZoneId.WATER); // boolean waterContact = player.isInsideZone(ZoneId.WATER);
if (siegable && !waterContact) // Need to know if player is over water only when siegable. // if (siegable && !waterContact) // Need to know if player is over water only when siegable.
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_originX, _originY))
{ // {
if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ)) // if ((zone instanceof WaterZone) && ((zone.getZone().getHighZ() + player.getCollisionHeight()) > _originZ))
{ // {
waterContact = true; // waterContact = true;
break; // break;
} // }
} // }
} // }
if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact)) // if (player.isInsideZone(ZoneId.HQ) || (siegable && waterContact))
{ // {
boolean limited = false; // boolean limited = false;
boolean water = false; // boolean water = false;
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000) // if (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 1000)
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
limited = true; // limited = true;
} // }
if (zone instanceof WaterZone) // if (zone instanceof WaterZone)
{ // {
water = true; // water = true;
} // }
} // }
if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if (limited && !water && !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if (siegable) // else if (siegable)
{ // {
for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ)) // for (ZoneType zone : ZoneManager.getInstance().getZones(_targetX, _targetY, _targetZ))
{ // {
if ((zone instanceof WaterZone) || (zone instanceof HqZone)) // if ((zone instanceof WaterZone) || (zone instanceof HqZone))
{ // {
if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ))) // if ((Math.abs(_targetZ - _originZ) > 250) || !GeoEngine.getInstance().canSeeTarget(player, new Location(_targetX, _targetY, _targetZ)))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
else if ((zone instanceof CastleZone) || (zone instanceof FortZone)) // else if ((zone instanceof CastleZone) || (zone instanceof FortZone))
{ // {
if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld())) // if (((Math.abs(_targetZ - _originZ) < 100) || (Util.calculateDistance(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, false, false) > 2000)) && !GeoEngine.getInstance().canMoveToTarget(_originX, _originY, _originZ, _targetX, _targetY, _targetZ, player.getInstanceWorld()))
{ // {
player.stopMove(player.getLastServerPosition()); // player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET); // player.sendPacket(ActionFailed.STATIC_PACKET);
return; // return;
} // }
} // }
} // }
} // }
} // }
// Correcting targetZ from floor level to head level (?) // Correcting targetZ from floor level to head level (?)
// Client is giving floor level as targetZ but that floor level doesn't // Client is giving floor level as targetZ but that floor level doesn't
@@ -212,6 +203,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
} }
} }
final AdminTeleportType teleMode = player.getTeleMode();
switch (teleMode) switch (teleMode)
{ {
case DEMONIC: case DEMONIC: