aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-08-31 15:39:28 +0200
committerShauren <shauren.trinity@gmail.com>2023-08-31 15:46:22 +0200
commit74bfc3862197c0b4f1f4d91215b05ab514a81696 (patch)
tree058f857302a4bc38cf7684c38a3c4a616799ba19 /src
parent61eba44d4aa97ce95ef2232240dc331bc32ccf78 (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-xsrc/server/game/Entities/Vehicle/Vehicle.cpp10
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();
}
/**