Addition of BoatInstance removePassenger method.

This commit is contained in:
MobiusDevelopment 2020-01-29 13:02:23 +00:00
parent f66dbc577c
commit 1059cb6906
2 changed files with 33 additions and 19 deletions

View File

@ -17,8 +17,9 @@
package org.l2jmobius.gameserver.model.actor.instance; package org.l2jmobius.gameserver.model.actor.instance;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.GameTimeController; import org.l2jmobius.gameserver.GameTimeController;
@ -51,7 +52,7 @@ public class BoatInstance extends Creature
private BoatPathHolder pathA; private BoatPathHolder pathA;
private BoatPathHolder pathB; private BoatPathHolder pathB;
private boolean needOnVehicleCheckLocation = false; private boolean needOnVehicleCheckLocation = false;
private final Map<Integer, PlayerInstance> inboat = new HashMap<>(); private final Set<PlayerInstance> passengers = ConcurrentHashMap.newKeySet();
public BoatInstance(int objectId, CreatureTemplate template) public BoatInstance(int objectId, CreatureTemplate template)
{ {
@ -125,9 +126,20 @@ public class BoatInstance extends Creature
return vd; return vd;
} }
public void removePassenger(PlayerInstance player)
{
try
{
passengers.remove(player);
}
catch (Exception e)
{
}
}
public void updatePeopleInTheBoat(int x, int y, int z) public void updatePeopleInTheBoat(int x, int y, int z)
{ {
if (inboat != null) if (passengers != null)
{ {
boolean check = false; boolean check = false;
if ((lastx == -1) || (lasty == -1)) if ((lastx == -1) || (lasty == -1))
@ -142,16 +154,20 @@ public class BoatInstance extends Creature
lastx = x; lastx = x;
lasty = y; lasty = y;
} }
for (int i = 0; i < inboat.size(); i++) for (PlayerInstance player : passengers)
{ {
final PlayerInstance player = inboat.get(i); if (player == null)
if ((player != null) && player.isInBoat() && (player.getBoat() == this)) {
continue;
}
if (player.isInBoat() && (player.getBoat() == this))
{ {
player.setXYZ(x, y, z); player.setXYZ(x, y, z);
player.revalidateZone(false); player.revalidateZone(false);
} }
if (check && needOnVehicleCheckLocation && (player != null)) if (check && needOnVehicleCheckLocation)
{ {
player.sendPacket(new OnVehicleCheckLocation(this, x, y, z)); player.sendPacket(new OnVehicleCheckLocation(this, x, y, z));
} }
@ -173,8 +189,7 @@ public class BoatInstance extends Creature
final Collection<PlayerInstance> knownPlayers = getKnownList().getKnownPlayers().values(); final Collection<PlayerInstance> knownPlayers = getKnownList().getKnownPlayers().values();
if ((knownPlayers != null) && !knownPlayers.isEmpty()) if ((knownPlayers != null) && !knownPlayers.isEmpty())
{ {
inboat.clear(); passengers.clear();
int i = 0;
for (PlayerInstance player : knownPlayers) for (PlayerInstance player : knownPlayers)
{ {
if (player.isInBoat() && (player.getBoat() == this)) if (player.isInBoat() && (player.getBoat() == this))
@ -187,13 +202,11 @@ public class BoatInstance extends Creature
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(it); iu.addModifiedItem(it);
player.sendPacket(iu); player.sendPacket(iu);
inboat.put(i, player); passengers.add(player);
i++;
} }
else if ((it == null) && (pathA.ticketId == 0)) else if ((it == null) && (pathA.ticketId == 0))
{ {
inboat.put(i, player); passengers.add(player);
i++;
} }
else else
{ {
@ -209,8 +222,7 @@ public class BoatInstance extends Creature
final Collection<PlayerInstance> knownPlayers = getKnownList().getKnownPlayers().values(); final Collection<PlayerInstance> knownPlayers = getKnownList().getKnownPlayers().values();
if ((knownPlayers != null) && !knownPlayers.isEmpty()) if ((knownPlayers != null) && !knownPlayers.isEmpty())
{ {
inboat.clear(); passengers.clear();
int i = 0;
for (PlayerInstance player : knownPlayers) for (PlayerInstance player : knownPlayers)
{ {
if (player.isInBoat() && (player.getBoat() == this)) if (player.isInBoat() && (player.getBoat() == this))
@ -223,13 +235,11 @@ public class BoatInstance extends Creature
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(it); iu.addModifiedItem(it);
player.sendPacket(iu); player.sendPacket(iu);
inboat.put(i, player); passengers.add(player);
i++;
} }
else if ((it == null) && (pathB.ticketId == 0)) else if ((it == null) && (pathB.ticketId == 0))
{ {
inboat.put(i, player); passengers.add(player);
i++;
} }
else else
{ {

View File

@ -14401,6 +14401,10 @@ public class PlayerInstance extends Playable
*/ */
public void setBoat(BoatInstance boat) public void setBoat(BoatInstance boat)
{ {
if ((boat == null) && (_boat != null))
{
_boat.removePassenger(this);
}
_boat = boat; _boat = boat;
} }