aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-03-19 20:42:44 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-24 00:44:23 +0100
commit48bd9698f88ade01209c9287ff38005900630ed3 (patch)
treef05d32e2a36711ebdeb3f565d8affa1c0fc9b046 /src
parent125bd632b3b6a47879d2d6f146d08f980950942d (diff)
Core/PacketIO: Fixed SMSG_UPDATE_OBJECT packets going missing for new items
Closes #16906 (cherry picked from commit 96155a49147f6119e8bd9bc08936ab706173b67e)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Item/Item.cpp7
-rw-r--r--src/server/game/Entities/Item/Item.h2
-rw-r--r--src/server/game/Entities/Object/Object.cpp8
-rw-r--r--src/server/game/Entities/Object/Object.h4
4 files changed, 12 insertions, 9 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index bd2c688847b..ac0770a9e82 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1700,10 +1700,15 @@ void Item::ClearUpdateMask(bool remove)
Object::ClearUpdateMask(remove);
}
-void Item::AddToObjectUpdate()
+bool Item::AddToObjectUpdate()
{
if (Player* owner = GetOwner())
+ {
owner->GetMap()->AddUpdateObject(this);
+ return true;
+ }
+
+ return false;
}
void Item::RemoveFromObjectUpdate()
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index b9ae082e277..3ee7515ac03 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -377,7 +377,7 @@ class TC_GAME_API Item : public Object
void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
UF::ItemData::Mask const& requestedItemMask, Player const* target) const;
- void AddToObjectUpdate() override;
+ bool AddToObjectUpdate() override;
void RemoveFromObjectUpdate() override;
uint32 GetScriptId() const { return GetTemplate()->ScriptId; }
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 05e1b688a89..bda27e52492 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -723,10 +723,7 @@ void Object::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag /*f
void Object::AddToObjectUpdateIfNeeded()
{
if (m_inWorld && !m_objectUpdated)
- {
- AddToObjectUpdate();
- m_objectUpdated = true;
- }
+ m_objectUpdated = AddToObjectUpdate();
}
void Object::ClearUpdateMask(bool remove)
@@ -3413,9 +3410,10 @@ void WorldObject::BuildUpdate(UpdateDataMapType& data_map)
ClearUpdateMask(false);
}
-void WorldObject::AddToObjectUpdate()
+bool WorldObject::AddToObjectUpdate()
{
GetMap()->AddUpdateObject(this);
+ return true;
}
void WorldObject::RemoveFromObjectUpdate()
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 3410da98477..0d7e237e937 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -380,7 +380,7 @@ class TC_GAME_API Object
TypeID m_objectTypeId;
CreateObjectBits m_updateFlag;
- virtual void AddToObjectUpdate() = 0;
+ virtual bool AddToObjectUpdate() = 0;
virtual void RemoveFromObjectUpdate() = 0;
void AddToObjectUpdateIfNeeded();
@@ -656,7 +656,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
void UpdatePositionData();
void BuildUpdate(UpdateDataMapType&) override;
- void AddToObjectUpdate() override;
+ bool AddToObjectUpdate() override;
void RemoveFromObjectUpdate() override;
//relocation and visibility system functions