diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-07-27 08:58:40 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-07-27 08:58:40 +0200 |
commit | e3cf94d4fdbfae5ce99aa754bd29a0b77cd1b73d (patch) | |
tree | 60a6397eda5632c1ade310edd20b5847d7a9a6ba | |
parent | 97afa3a609923bd9b7c0e9cfc52c29ba9dbfe35d (diff) |
Core/GameObjects: Properly set GO_FLAG_MAP_OBJECT during gameobject creation
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 19 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Transport/Transport.cpp | 2 |
3 files changed, 10 insertions, 13 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index f72c1cb8a94..89ea3d27446 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -330,9 +330,7 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD SetDisplayId(goInfo->displayId); - m_model = CreateModel(); - if (m_model && m_model->isMapObject()) - AddFlag(GO_FLAG_MAP_OBJECT); + CreateModel(); // GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3 SetGoType(GameobjectTypes(goInfo->type)); m_prevGoState = goState; @@ -2504,15 +2502,12 @@ void GameObject::UpdateModel() if (m_model) if (GetMap()->ContainsGameObjectModel(*m_model)) GetMap()->RemoveGameObjectModel(*m_model); + RemoveFlag(GO_FLAG_MAP_OBJECT); delete m_model; - m_model = CreateModel(); + m_model = nullptr; + CreateModel(); if (m_model) GetMap()->InsertGameObjectModel(*m_model); - - if (m_model && m_model->isMapObject()) - AddFlag(GO_FLAG_MAP_OBJECT); - else - RemoveFlag(GO_FLAG_MAP_OBJECT); } Player* GameObject::GetLootRecipient() const @@ -2728,7 +2723,9 @@ private: GameObject* _owner; }; -GameObjectModel* GameObject::CreateModel() +void GameObject::CreateModel() { - return GameObjectModel::Create(std::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath()); + m_model = GameObjectModel::Create(std::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath()); + if (m_model && m_model->isMapObject()) + AddFlag(GO_FLAG_MAP_OBJECT); } diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 7bbf09a26ad..2a63d83eaa2 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -319,7 +319,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> UF::UpdateField<UF::GameObjectData, 0, TYPEID_GAMEOBJECT> m_gameObjectData; protected: - GameObjectModel* CreateModel(); + void CreateModel(); void UpdateModel(); // updates model in case displayId were changed uint32 m_spellId; time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()), diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index c261fdef73b..80d42946b53 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -104,7 +104,7 @@ bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, SetWorldRotation(0.0f, 0.0f, 0.0f, 1.0f); SetParentRotation(QuaternionData()); - m_model = CreateModel(); + CreateModel(); return true; } |