Core/Vehicles: Fix multiple vehicle join events on same seat

Port From (https://github.com/TrinityCore/TrinityCore/commit/910e0b70ef463459e2e1b59976c9675394ff81c8)
This commit is contained in:
hondacrx
2021-12-07 14:15:44 -05:00
parent 2ded315eaa
commit a2fdd2eccf
+31 -6
View File
@@ -228,12 +228,26 @@ namespace Game.Entities
if (seat == null)
return null;
foreach (var sea in Seats)
var newSeatId = seatId;
while (!seat.IsEmpty() || HasPendingEventForSeat(newSeatId) || (!seat.SeatInfo.CanEnterOrExit() && !seat.SeatInfo.IsUsableByOverride()))
{
if (!seat.IsEmpty() || (!seat.SeatInfo.CanEnterOrExit() && !seat.SeatInfo.IsUsableByOverride()))
continue;
if (next)
{
if (!Seats.ContainsKey(++newSeatId))
newSeatId = 0;
}
else
{
if (!Seats.ContainsKey(newSeatId))
newSeatId = SharedConst.MaxVehicleSeats;
--newSeatId;
}
seat = sea.Value;
// Make sure we don't loop indefinetly
if (newSeatId == seatId)
return null;
seat = Seats[newSeatId];
}
return seat;
@@ -291,7 +305,7 @@ namespace Game.Entities
foreach (var _seat in Seats)
{
seat = _seat;
if (seat.Value.IsEmpty() && (_seat.Value.SeatInfo.CanEnterOrExit() || _seat.Value.SeatInfo.IsUsableByOverride()))
if (seat.Value.IsEmpty() && !HasPendingEventForSeat(seat.Key) && (_seat.Value.SeatInfo.CanEnterOrExit() || _seat.Value.SeatInfo.IsUsableByOverride()))
break;
}
@@ -445,7 +459,7 @@ namespace Game.Entities
{
byte ret = 0;
foreach (var pair in Seats)
if (pair.Value.IsEmpty() && (pair.Value.SeatInfo.CanEnterOrExit() || pair.Value.SeatInfo.IsUsableByOverride()))
if (pair.Value.IsEmpty() && !HasPendingEventForSeat(pair.Key) && (pair.Value.SeatInfo.CanEnterOrExit() || pair.Value.SeatInfo.IsUsableByOverride()))
++ret;
return ret;
@@ -503,6 +517,17 @@ namespace Game.Entities
}
}
bool HasPendingEventForSeat(sbyte seatId)
{
for (var i = 0; i < _pendingJoinEvents.Count; ++i)
{
var joinEvent = _pendingJoinEvents[i];
if (joinEvent.Seat.Key == seatId)
return true;
}
return false;
}
public TimeSpan GetDespawnDelay()
{
VehicleTemplate vehicleTemplate = Global.ObjectMgr.GetVehicleTemplate(this);