aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-07-19 21:04:30 -0300
committerariel- <ariel-@users.noreply.github.com>2016-07-19 21:06:10 -0300
commit6b3067f978b3342bddca9d0e06d133d54c5036e0 (patch)
tree76bde21906caf30eaa84e85bf0df550d666b4888 /src
parent0be0606593cf6ce8a08735b070e64efa6b6f1667 (diff)
Core/Vehicle: delay position update in Vehicles, this may be deleted on UpdatePosition, generating a crash
Closes #17634
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.cpp8
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 9a2134fdea4..1c5299f4798 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -532,6 +532,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)
{
@@ -542,9 +545,12 @@ void Vehicle::RelocatePassengers()
float px, py, pz, po;
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);
}
/**