diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-10-25 15:36:11 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-10-25 15:36:11 +0200 |
| commit | 067fa31d152ecb10e5bea0419f84f7b79b96abf5 (patch) | |
| tree | 9b5921a62ff86259f613f6e8f1e3e9b294be14a8 /src/server/game/Entities/Unit | |
| parent | 6dab3791ae7c810114ac1d5dbdd3b018813e2a97 (diff) | |
Core/PacketIO: Move writing data sizes in SMSG_UPDATE_OBJECT to shared functions instead of spreading it in all overrides
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 96 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 21 |
2 files changed, 0 insertions, 117 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 91731cc0a98..fe0b7bd931c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13749,102 +13749,6 @@ bool Unit::IsSplineEnabled() const return movespline->Initialized() && !movespline->Finalized(); } -UF::UpdateFieldFlag Unit::GetUpdateFieldFlagsFor(Player const* target) const -{ - UF::UpdateFieldFlag flags = UF::UpdateFieldFlag::None; - if (target == this || GetOwnerGUID() == target->GetGUID()) - flags |= UF::UpdateFieldFlag::Owner; - - if (HasDynamicFlag(UNIT_DYNFLAG_SPECIALINFO)) - if (HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID())) - flags |= UF::UpdateFieldFlag::Empath; - - return flags; -} - -void Unit::BuildValuesCreate(ByteBuffer* data, Player const* target) const -{ - UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); - std::size_t sizePos = data->wpos(); - *data << uint32(0); - *data << uint8(flags); - m_objectData->WriteCreate(*data, flags, this, target); - m_unitData->WriteCreate(*data, flags, this, target); - data->put<uint32>(sizePos, data->wpos() - sizePos - 4); -} - -void Unit::BuildValuesUpdate(ByteBuffer* data, Player const* target) const -{ - UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); - std::size_t sizePos = data->wpos(); - *data << uint32(0); - *data << uint32(m_values.GetChangedObjectTypeMask()); - - if (m_values.HasChanged(TYPEID_OBJECT)) - m_objectData->WriteUpdate(*data, flags, this, target); - - if (m_values.HasChanged(TYPEID_UNIT)) - m_unitData->WriteUpdate(*data, flags, this, target); - - data->put<uint32>(sizePos, data->wpos() - sizePos - 4); -} - -void Unit::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const -{ - UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask; - valuesMask.Set(TYPEID_UNIT); - - std::size_t sizePos = data->wpos(); - *data << uint32(0); - *data << uint32(valuesMask.GetBlock(0)); - - UF::UnitData::Mask mask; - m_unitData->AppendAllowedFieldsMaskForFlag(mask, flags); - m_unitData->WriteUpdate(*data, mask, true, this, target); - - data->put<uint32>(sizePos, data->wpos() - sizePos - 4); -} - -void Unit::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, - UF::UnitData::Mask const& requestedUnitMask, Player const* target) const -{ - UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); - UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask; - if (requestedObjectMask.IsAnySet()) - valuesMask.Set(TYPEID_OBJECT); - - UF::UnitData::Mask unitMask = requestedUnitMask; - m_unitData->FilterDisallowedFieldsMaskForFlag(unitMask, flags); - if (unitMask.IsAnySet()) - valuesMask.Set(TYPEID_UNIT); - - ByteBuffer& buffer = PrepareValuesUpdateBuffer(data); - 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_UNIT]) - m_unitData->WriteUpdate(buffer, unitMask, true, this, target); - - buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4); - - data->AddUpdateBlock(); -} - -void Unit::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const -{ - UpdateData udata(Owner->GetMapId()); - WorldPacket packet; - - Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), UnitMask.GetChangesMask(), player); - - udata.BuildPacket(&packet); - player->SendDirectMessage(&packet); -} - void Unit::DestroyForPlayer(Player* target) const { if (Battleground* bg = target->GetBattleground()) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 03564f43315..e40827ece4e 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1841,27 +1841,6 @@ class TC_GAME_API Unit : public WorldObject protected: explicit Unit (bool isWorldObject); - UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override; - void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; - void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; - - public: - void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override; - void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, - UF::UnitData::Mask const& requestedUnitMask, Player const* target) const; - - struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer - { - explicit ValuesUpdateForPlayerWithMaskSender(Unit const* owner) : Owner(owner) { } - - Unit const* Owner; - UF::ObjectData::Base ObjectMask; - UF::UnitData::Base UnitMask; - - void operator()(Player const* player) const; - }; - - protected: void DestroyForPlayer(Player* target) const override; void ClearUpdateMask(bool remove) override; |
