aboutsummaryrefslogtreecommitdiff
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:39:28 +0200
commit2b54376d65c52c0c805a73665bb8a7d0578181f0 (patch)
treeb0da181f059982df505de126b2df3b80edf8bac6
parentafed658db5c1564706ba4239a1f1ee902ead1b77 (diff)
Core/Vehicles: Fixed crash happening if a vehicle despawns during handling of control vehicle aura removal
Closes #29290
-rw-r--r--src/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 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();
}
/**