From 2b54376d65c52c0c805a73665bb8a7d0578181f0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 31 Aug 2023 15:39:28 +0200 Subject: Core/Vehicles: Fixed crash happening if a vehicle despawns during handling of control vehicle aura removal Closes #29290 --- src/server/game/Entities/Vehicle/Vehicle.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 3a90a80b48e..cd15eac0938 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -246,11 +246,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(); } /** -- cgit v1.2.3