2
0
Эх сурвалжийг харах

Stop packet flood when player press "delete" key.

_DS_ 14 жил өмнө
parent
commit
77beda0e24

+ 9 - 3
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/MoveBackwardToLocation.java

@@ -22,6 +22,7 @@ import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
+import com.l2jserver.gameserver.network.serverpackets.StopMove;
 import com.l2jserver.gameserver.util.Util;
 
 /**
@@ -36,11 +37,8 @@ public class MoveBackwardToLocation extends L2GameClientPacket
 	private int _targetX;
 	private int _targetY;
 	private int _targetZ;
-	@SuppressWarnings("unused")
 	private int _originX;
-	@SuppressWarnings("unused")
 	private int _originY;
-	@SuppressWarnings("unused")
 	private int _originZ;
 	private int _moveMovement;
 	
@@ -83,9 +81,17 @@ public class MoveBackwardToLocation extends L2GameClientPacket
 	@Override
 	protected void runImpl()
 	{
+		System.err.println("MBTL: tx:"+_targetX+" ty:"+_targetY+" tz:"+_targetZ+" ox:"+_originX+" oy:"+_originY+" oz"+_originZ+" mt:"+_moveMovement);
 		L2PcInstance activeChar = getClient().getActiveChar();
 		if (activeChar == null)
 			return;
+
+		if (_targetX == _originX && _targetY == _originY && _targetZ == _originZ)
+		{
+			activeChar.sendPacket(new StopMove(activeChar));
+			return;
+		}
+
 		// Correcting targetZ from floor level to head level (?)
 		// Client is giving floor level as targetZ but that floor level doesn't
 		// match our current geodata and teleport coords as good as head level!

+ 20 - 13
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/MoveToLocationInAirShip.java

@@ -19,6 +19,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2AirShipInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ExMoveToLocationInAirShip;
+import com.l2jserver.gameserver.network.serverpackets.StopMoveInVehicle;
 import com.l2jserver.gameserver.templates.item.L2WeaponType;
 import com.l2jserver.util.Point3D;
 
@@ -32,8 +33,12 @@ public class MoveToLocationInAirShip extends L2GameClientPacket
 	private static final String _C__D0_20_MOVETOLOCATIONINAIRSHIP = "[C] D0:20 MoveToLocationInAirShip";
 	
 	private int _shipId;
-	private final Point3D _pos = new Point3D(0,0,0);
-	private final Point3D _origin_pos = new Point3D(0,0,0);
+	private int _targetX;
+	private int _targetY;
+	private int _targetZ;
+	private int _originX;
+	private int _originY;
+	private int _originZ;
 	
 	public TaskPriority getPriority() { return TaskPriority.PR_HIGH; }
 	
@@ -41,15 +46,12 @@ public class MoveToLocationInAirShip extends L2GameClientPacket
 	protected void readImpl()
 	{
 		_shipId = readD();
-		int _x, _y, _z;
-		_x = readD();
-		_y = readD();
-		_z = readD();
-		_pos.setXYZ(_x, _y, _z);
-		_x = readD();
-		_y = readD();
-		_z = readD();
-		_origin_pos.setXYZ(_x, _y, _z);
+		_targetX = readD();
+		_targetY = readD();
+		_targetZ = readD();
+		_originX = readD();
+		_originY = readD();
+		_originZ = readD();
 	}
 	
 	
@@ -60,6 +62,12 @@ public class MoveToLocationInAirShip extends L2GameClientPacket
 		if (activeChar == null)
 			return;
 		
+		if (_targetX == _originX && _targetY == _originY && _targetZ == _originZ)
+		{
+			activeChar.sendPacket(new StopMoveInVehicle(activeChar, _shipId));
+			return;
+		}
+
 		if (activeChar.isAttackingNow()
 				&& activeChar.getActiveWeaponItem() != null
 				&& (activeChar.getActiveWeaponItem().getItemType() == L2WeaponType.BOW))
@@ -87,8 +95,7 @@ public class MoveToLocationInAirShip extends L2GameClientPacket
 			return;
 		}
 		
-		activeChar.setVehicle(airShip);
-		activeChar.setInVehiclePosition(_pos);
+		activeChar.setInVehiclePosition(new Point3D(_targetX, _targetY, _targetZ));
 		activeChar.broadcastPacket(new ExMoveToLocationInAirShip(activeChar));
 	}
 	

+ 24 - 14
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java

@@ -21,6 +21,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.MoveToLocationInVehicle;
+import com.l2jserver.gameserver.network.serverpackets.StopMoveInVehicle;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.templates.item.L2WeaponType;
 import com.l2jserver.util.Point3D;
@@ -31,24 +32,25 @@ public final class RequestMoveToLocationInVehicle extends L2GameClientPacket
 	private static final String _C__75_MOVETOLOCATIONINVEHICLE = "[C] 75 RequestMoveToLocationInVehicle";
 	
 	private int _boatId;
-	private Point3D _pos;
-	private Point3D _origin_pos;
+	private int _targetX;
+	private int _targetY;
+	private int _targetZ;
+	private int _originX;
+	private int _originY;
+	private int _originZ;
 	
 	public TaskPriority getPriority() { return TaskPriority.PR_HIGH; }
 	
 	@Override
 	protected void readImpl()
 	{
-		int _x, _y, _z;
 		_boatId  = readD();   //objectId of boat
-		_x = readD();
-		_y = readD();
-		_z = readD();
-		_pos = new Point3D(_x, _y, _z);
-		_x = readD();
-		_y = readD();
-		_z = readD();
-		_origin_pos = new Point3D(_x, _y, _z);
+		_targetX = readD();
+		_targetY = readD();
+		_targetZ = readD();
+		_originX = readD();
+		_originY = readD();
+		_originZ = readD();
 	}
 	
 	/* (non-Javadoc)
@@ -62,6 +64,12 @@ public final class RequestMoveToLocationInVehicle extends L2GameClientPacket
 		if (activeChar == null)
 			return;
 		
+		if (_targetX == _originX && _targetY == _originY && _targetZ == _originZ)
+		{
+			activeChar.sendPacket(new StopMoveInVehicle(activeChar, _boatId));
+			return;
+		}
+
 		if (activeChar.isAttackingNow()
 				&& activeChar.getActiveWeaponItem() != null
 				&& (activeChar.getActiveWeaponItem().getItemType() == L2WeaponType.BOW))
@@ -103,7 +111,7 @@ public final class RequestMoveToLocationInVehicle extends L2GameClientPacket
 		else
 		{
 			boat = BoatManager.getInstance().getBoat(_boatId);
-			if (boat == null)
+			if (boat == null || !boat.isInsideRadius(activeChar, 300, true, false))
 			{
 				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 				return;
@@ -111,8 +119,10 @@ public final class RequestMoveToLocationInVehicle extends L2GameClientPacket
 			activeChar.setVehicle(boat);
 		}
 		
-		activeChar.setInVehiclePosition(_pos);
-		activeChar.broadcastPacket(new MoveToLocationInVehicle(activeChar, _pos, _origin_pos));
+		final Point3D pos = new Point3D(_targetX, _targetY, _targetZ);
+		final Point3D originPos = new Point3D(_originX, _originY, _originZ);
+		activeChar.setInVehiclePosition(pos);
+		activeChar.broadcastPacket(new MoveToLocationInVehicle(activeChar, pos, originPos));
 	}
 	
 	/* (non-Javadoc)