diff options
Diffstat (limited to 'src/server/game/Entities/DynamicObject')
| -rw-r--r-- | src/server/game/Entities/DynamicObject/DynamicObject.cpp | 26 | ||||
| -rw-r--r-- | src/server/game/Entities/DynamicObject/DynamicObject.h | 5 |
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; |
