aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/DynamicObject
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Entities/DynamicObject')
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp26
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.h5
2 files changed, 31 insertions, 0 deletions
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index 315d781631c..58e277f61f8 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -273,6 +273,32 @@ void DynamicObject::BuildValuesUpdate(ByteBuffer* data, Player const* target) co
data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
}
+void DynamicObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
+ UF::DynamicObjectData::Mask const& requestedDynamicObjectMask, Player const* target) const
+{
+ UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask;
+ if (requestedObjectMask.IsAnySet())
+ valuesMask.Set(TYPEID_OBJECT);
+
+ if (requestedDynamicObjectMask.IsAnySet())
+ valuesMask.Set(TYPEID_DYNAMICOBJECT);
+
+ ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ std::size_t sizePos = buffer.wpos();
+ buffer << uint32(0);
+ buffer << uint32(valuesMask.GetBlock(0));
+
+ if (valuesMask[TYPEID_OBJECT])
+ m_objectData->WriteUpdate(buffer, requestedObjectMask, true, this, target);
+
+ if (valuesMask[TYPEID_DYNAMICOBJECT])
+ m_dynamicObjectData->WriteUpdate(buffer, requestedDynamicObjectMask, true, this, target);
+
+ buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
+
+ data->AddUpdateBlock(buffer);
+}
+
void DynamicObject::ClearUpdateMask(bool remove)
{
m_values.ClearChangesMask(&DynamicObject::m_dynamicObjectData);
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h
index ca08043faeb..4786dd763f3 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.h
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.h
@@ -38,10 +38,15 @@ class TC_GAME_API DynamicObject : public WorldObject, public GridObject<DynamicO
DynamicObject(bool isWorldObject);
~DynamicObject();
+ protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
+ public:
+ void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
+ UF::DynamicObjectData::Mask const& requestedDynamicObjectMask, Player const* target) const;
+
void AddToWorld() override;
void RemoveFromWorld() override;