Explorar o código

Attempt to fix players movement in airship. Also change some logic in knownlists.
Caution: it does not fix airship random stop.

_DS_ %!s(int64=15) %!d(string=hai) anos
pai
achega
05d654e10a

+ 4 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/L2World.java

@@ -452,8 +452,11 @@ public final class L2World
 					{
 						for (L2Object obj : vObj)
 						{
-							if (obj != null && obj.getKnownList() != null)
+							if (obj != null)
+							{
 								obj.getKnownList().removeKnownObject(object);
+								object.getKnownList().removeKnownObject(obj);
+							}
 						}
 					}
 				}

+ 6 - 8
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2AirShipInstance.java

@@ -184,8 +184,6 @@ public class L2AirShipInstance extends L2Character
 	protected int _runstate = 0;
 	protected ExMoveToLocationAirShip _easi = null;
 	
-	private Map<Integer, L2PcInstance> _inAirShip;
-	
 	public L2AirShipInstance(int objectId, L2CharTemplate template)
 	{
 		super(objectId, template);
@@ -428,7 +426,7 @@ public class L2AirShipInstance extends L2Character
 	public void updatePeopleInTheAirShip(int x, int y, int z)
 	{
 		
-		if (_inAirShip != null)
+		if (_passengers != null && !_passengers.isEmpty())
 		{
 			if ((lastx == -1) || (lasty == -1))
 			{
@@ -440,15 +438,14 @@ public class L2AirShipInstance extends L2Character
 				lastx = x;
 				lasty = y;
 			}
-			for (int i = 0; i < _inAirShip.size(); i++)
+			for (L2PcInstance player : _passengers)
 			{
-				L2PcInstance player = _inAirShip.get(i);
 				if (player != null && player.isInAirShip())
 				{
 					if (player.getAirShip() == this)
 					{
 						// player.getKnownList().addKnownObject(this);
-						player.getPosition().setXYZ(x, y, z);
+						player.setXYZ(x, y, z);
 						player.revalidateZone(false);
 					}
 				}
@@ -549,8 +546,9 @@ public class L2AirShipInstance extends L2Character
 			z = 2608;			
 		}
 		_passengers.remove(player);
-		player.broadcastPacket(new ExGetOffAirShip(player, this, x ,y ,z));
 		player.setAirShip(null);
+		player.broadcastPacket(new ExGetOffAirShip(player, this, x ,y ,z));
+		player.teleToLocation(x, y, z);
 	}
 	
 	public void teleportAirShip(int x, int y, int z,int heading)
@@ -623,7 +621,7 @@ public class L2AirShipInstance extends L2Character
 	
 	public int getSpeed1()
 	{
-		return 300;
+		return (int)boatSpeed;
 	}
 	
 	public int getSpeed2()

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/knownlist/AttackableKnownList.java

@@ -73,7 +73,7 @@ public class AttackableKnownList extends NpcKnownList
 			return 0;
 
 		if (object instanceof L2Playable)
-			return 1500;
+			return object.getKnownList().getDistanceToWatchObject(getActiveObject());
 
 		if (getActiveChar().getAggroRange() > getActiveChar().getFactionRange())
 			return getActiveChar().getAggroRange();

+ 9 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/knownlist/PcKnownList.java

@@ -19,6 +19,8 @@ import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2AirShipInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.serverpackets.DeleteObject;
 import com.l2jserver.gameserver.network.serverpackets.SpawnItem;
@@ -119,10 +121,13 @@ public class PcKnownList extends PlayableKnownList
     @Override
 	public int getDistanceToForgetObject(L2Object object)
     {
+    	if (object instanceof L2BoatInstance || object instanceof L2AirShipInstance)
+    		return 8000;
+
     	// when knownlist grows, the distance to forget should be at least
     	// the same as the previous watch range, or it becomes possible that
     	// extra charinfo packets are being sent (watch-forget-watch-forget)
-    	int knownlistSize = getKnownObjects().size();
+    	final int knownlistSize = getKnownObjects().size();
         if (knownlistSize <= 25) return 4000;
         if (knownlistSize <= 35) return 3500;
         if (knownlistSize <= 70) return 2910;
@@ -132,8 +137,10 @@ public class PcKnownList extends PlayableKnownList
     @Override
 	public int getDistanceToWatchObject(L2Object object)
     {
-        int knownlistSize = getKnownObjects().size();
+    	if (object instanceof L2BoatInstance || object instanceof L2AirShipInstance)
+    		return 4000;
 
+    	final int knownlistSize = getKnownObjects().size();
         if (knownlistSize <= 25) return 3400; // empty field
         if (knownlistSize <= 35) return 2900;
         if (knownlistSize <= 70) return 2300;