aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp7
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp12
-rw-r--r--src/server/game/Entities/Transport/Transport.h4
3 files changed, 20 insertions, 3 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index ee39ed48ad6..c8c0eaefb27 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -143,7 +143,12 @@ void GameObject::AddToWorld()
// The state can be changed after GameObject::Create but before GameObject::AddToWorld
bool toggledState = GetGoType() == GAMEOBJECT_TYPE_CHEST ? getLootState() == GO_READY : (GetGoState() == GO_STATE_READY || IsTransport());
if (m_model)
- GetMap()->InsertGameObjectModel(*m_model);
+ {
+ if (Transport* trans = ToTransport())
+ trans->SetDelayedAddModelToMap();
+ else
+ GetMap()->InsertGameObjectModel(*m_model);
+ }
EnableCollision(toggledState);
WorldObject::AddToWorld();
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index d907274f8d1..367ccd34cdb 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -35,7 +35,8 @@
Transport::Transport() : GameObject(),
_transportInfo(NULL), _isMoving(true), _pendingStop(false),
- _triggeredArrivalEvent(false), _triggeredDepartureEvent(false), _passengerTeleportItr(_passengers.begin())
+ _triggeredArrivalEvent(false), _triggeredDepartureEvent(false),
+ _passengerTeleportItr(_passengers.begin()), _delayedAddModel(false)
{
m_updateFlag = UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION;
}
@@ -186,6 +187,14 @@ void Transport::Update(uint32 diff)
return; // Update more in new map thread
}
+ // Add model to map after we are fully done with moving maps
+ if (_delayedAddModel)
+ {
+ _delayedAddModel = false;
+ if (m_model)
+ GetMap()->InsertGameObjectModel(*m_model);
+ }
+
// Set position
_positionChangeTimer.Update(diff);
if (_positionChangeTimer.Passed())
@@ -625,7 +634,6 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl
}
Relocate(x, y, z, o);
- UpdateModelPosition();
GetMap()->AddToMap<Transport>(this);
return true;
}
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index e644417f1ac..2c924eb33ed 100644
--- a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -95,6 +95,8 @@ class Transport : public GameObject, public TransportBase
void EnableMovement(bool enabled);
+ void SetDelayedAddModelToMap() { _delayedAddModel = true; }
+
TransportTemplate const* GetTransportTemplate() const { return _transportInfo; }
private:
@@ -123,6 +125,8 @@ class Transport : public GameObject, public TransportBase
PassengerSet _passengers;
PassengerSet::iterator _passengerTeleportItr;
PassengerSet _staticPassengers;
+
+ bool _delayedAddModel;
};
#endif