diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-07-19 21:04:30 -0300 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-11 16:56:07 +0100 |
commit | 3532173ee340573be937b4c5799c155fa2cc906c (patch) | |
tree | 5b6b7bca46e3f2c36f961b02d13b106491975f78 /src | |
parent | 611bc7d838968a2b70d0fe56c5482622b5757e2f (diff) |
Core/Vehicle: delay position update in Vehicles, this may be deleted on UpdatePosition, generating a crash
Closes #17634
(cherry picked from commit 6b3067f978b3342bddca9d0e06d133d54c5036e0)
# Conflicts:
# src/server/game/Entities/Vehicle/Vehicle.cpp
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 5c13af2b33f..db46a0dce2d 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -521,6 +521,9 @@ void Vehicle::RelocatePassengers() { ASSERT(_me->GetMap()); + std::vector<std::pair<Unit*, Position>> seatRelocation; + seatRelocation.reserve(Seats.size()); + // not sure that absolute position calculation is correct, it must depend on vehicle pitch angle for (SeatMap::const_iterator itr = Seats.begin(); itr != Seats.end(); ++itr) { @@ -532,9 +535,12 @@ void Vehicle::RelocatePassengers() passenger->m_movementInfo.transport.pos.GetPosition(px, py, pz, po); CalculatePassengerPosition(px, py, pz, &po); - passenger->UpdatePosition(px, py, pz, po); + seatRelocation.emplace_back(passenger, Position(px, py, pz, po)); } } + + for (auto const& pair : seatRelocation) + pair.first->UpdatePosition(pair.second); } /** |