diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-08-31 15:39:28 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-08-31 15:46:22 +0200 |
| commit | 74bfc3862197c0b4f1f4d91215b05ab514a81696 (patch) | |
| tree | 058f857302a4bc38cf7684c38a3c4a616799ba19 /src | |
| parent | 61eba44d4aa97ce95ef2232240dc331bc32ccf78 (diff) | |
Core/Vehicles: Fixed crash happening if a vehicle despawns during handling of control vehicle aura removal
Closes #29290
(cherry picked from commit 2b54376d65c52c0c805a73665bb8a7d0578181f0)
Diffstat (limited to 'src')
| -rwxr-xr-x | src/server/game/Entities/Vehicle/Vehicle.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 9ee7eb16f46..c94ea836f06 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -252,11 +252,11 @@ void Vehicle::RemoveAllPassengers() // We don't need to iterate over Seats _me->RemoveAurasByType(SPELL_AURA_CONTROL_VEHICLE); - // Following the above logic, this assertion should NEVER fail. - // Even in 'hacky' cases, there should at least be VEHICLE_SPELL_RIDE_HARDCODED on us. - // SeatMap::const_iterator itr; - // for (itr = Seats.begin(); itr != Seats.end(); ++itr) - // ASSERT(!itr->second.passenger); + // Aura script might cause the vehicle to be despawned in the middle of handling SPELL_AURA_CONTROL_VEHICLE removal + // In that case, aura effect has already been unregistered but passenger may still be found in Seats + for (auto const& [_, seat] : Seats) + if (Unit* passenger = ObjectAccessor::GetUnit(*_me, seat.Passenger.Guid)) + passenger->_ExitVehicle(); } /** |
