diff options
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 29 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.h | 2 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 2 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 51b2b2503bc..e9269b64e39 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -55,6 +55,7 @@ Object::Object() : m_PackGUID(sizeof(uint64)+1) _fieldNotifyFlags = UF_FLAG_DYNAMIC; m_inWorld = false; + m_isNewObject = false; m_objectUpdated = false; } @@ -170,6 +171,34 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c if (target == this) // building packet for yourself flags |= UPDATEFLAG_SELF; + if (m_isNewObject) + { + switch (GetGUID().GetHigh()) + { + case HighGuid::Player: + case HighGuid::Pet: + case HighGuid::Corpse: + case HighGuid::DynamicObject: + updateType = UPDATETYPE_CREATE_OBJECT2; + break; + case HighGuid::Unit: + case HighGuid::Vehicle: + { + if (ToUnit()->IsSummon()) + updateType = UPDATETYPE_CREATE_OBJECT2; + break; + } + case HighGuid::GameObject: + { + if (ToGameObject()->GetOwnerGUID().IsPlayer()) + updateType = UPDATETYPE_CREATE_OBJECT2; + break; + } + default: + break; + } + } + if (flags & UPDATEFLAG_STATIONARY_POSITION) { // UPDATETYPE_CREATE_OBJECT2 dynamic objects, corpses... diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index cbbc452e591..66f1c67fa51 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -138,6 +138,7 @@ class TC_GAME_API Object virtual bool hasQuest(uint32 /* quest_id */) const { return false; } virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; } + void SetIsNewObject(bool enable) { m_isNewObject = enable; } virtual void BuildUpdate(UpdateDataMapType&) { } void BuildFieldsUpdate(Player*, UpdateDataMapType &) const; @@ -204,6 +205,7 @@ class TC_GAME_API Object private: bool m_inWorld; + bool m_isNewObject; PackedGuid m_PackGUID; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 369ecba1c30..43b82be7723 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -646,7 +646,9 @@ bool Map::AddToMap(T* obj) //something, such as vehicle, needs to be update immediately //also, trigger needs to cast spell, if not update, cannot see visual + obj->SetIsNewObject(true); obj->UpdateObjectVisibilityOnCreate(); + obj->SetIsNewObject(false); return true; } |
