aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Object/Object.cpp29
-rw-r--r--src/server/game/Entities/Object/Object.h2
-rw-r--r--src/server/game/Maps/Map.cpp2
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;
}