Core/Vehicles: Fix multiple vehicle join events on same seat
Port From (https://github.com/TrinityCore/TrinityCore/commit/910e0b70ef463459e2e1b59976c9675394ff81c8)
This commit is contained in:
@@ -228,12 +228,26 @@ namespace Game.Entities
|
|||||||
if (seat == null)
|
if (seat == null)
|
||||||
return 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()))
|
if (next)
|
||||||
continue;
|
{
|
||||||
|
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;
|
return seat;
|
||||||
@@ -291,7 +305,7 @@ namespace Game.Entities
|
|||||||
foreach (var _seat in Seats)
|
foreach (var _seat in Seats)
|
||||||
{
|
{
|
||||||
seat = _seat;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,7 +459,7 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
byte ret = 0;
|
byte ret = 0;
|
||||||
foreach (var pair in Seats)
|
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;
|
++ret;
|
||||||
|
|
||||||
return 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()
|
public TimeSpan GetDespawnDelay()
|
||||||
{
|
{
|
||||||
VehicleTemplate vehicleTemplate = Global.ObjectMgr.GetVehicleTemplate(this);
|
VehicleTemplate vehicleTemplate = Global.ObjectMgr.GetVehicleTemplate(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user