From 067fa31d152ecb10e5bea0419f84f7b79b96abf5 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 25 Oct 2024 15:36:11 +0200 Subject: Core/PacketIO: Move writing data sizes in SMSG_UPDATE_OBJECT to shared functions instead of spreading it in all overrides --- src/server/game/Entities/Unit/Unit.cpp | 96 ---------------------------------- src/server/game/Entities/Unit/Unit.h | 21 -------- 2 files changed, 117 deletions(-) (limited to 'src/server/game/Entities/Unit') 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(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(sizePos, data->wpos() - sizePos - 4); -} - -void Unit::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const -{ - UpdateMask 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(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 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(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; -- cgit v1.2.3