diff options
Diffstat (limited to 'src')
24 files changed, 274 insertions, 2 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 84d0a97af0b..0c7e15e74ee 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -1054,6 +1054,17 @@ void AreaTrigger::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec data->AddUpdateBlock(buffer); } +void AreaTrigger::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(Owner->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), AreaTriggerMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void AreaTrigger::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&AreaTrigger::m_areaTriggerData); diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index ba5aaf7f69f..6ed8ecf7c87 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -53,6 +53,17 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::AreaTriggerData::Mask const& requestedAreaTriggerMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(AreaTrigger const* owner) : Owner(owner) { } + + AreaTrigger const* Owner; + UF::ObjectData::Base ObjectMask; + UF::AreaTriggerData::Base AreaTriggerMask; + + void operator()(Player const* player) const; + }; + void AddToWorld() override; void RemoveFromWorld() override; diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp index bd1a6155b13..b24dc06de70 100644 --- a/src/server/game/Entities/Conversation/Conversation.cpp +++ b/src/server/game/Entities/Conversation/Conversation.cpp @@ -25,8 +25,8 @@ #include "Log.h" #include "Map.h" #include "PhasingHandler.h" +#include "Player.h" #include "ScriptMgr.h" -#include "Unit.h" #include "UpdateData.h" Conversation::Conversation() : WorldObject(false), _duration(0), _textureKitId(0) @@ -286,6 +286,17 @@ void Conversation::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Obje data->AddUpdateBlock(buffer); } +void Conversation::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(Owner->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), ConversationMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void Conversation::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&Conversation::m_conversationData); diff --git a/src/server/game/Entities/Conversation/Conversation.h b/src/server/game/Entities/Conversation/Conversation.h index 157a89f77cd..b175f8b1b17 100644 --- a/src/server/game/Entities/Conversation/Conversation.h +++ b/src/server/game/Entities/Conversation/Conversation.h @@ -39,6 +39,17 @@ class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversat void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::ConversationData::Mask const& requestedConversationMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(Conversation const* owner) : Owner(owner) { } + + Conversation const* Owner; + UF::ObjectData::Base ObjectMask; + UF::ConversationData::Base ConversationMask; + + void operator()(Player const* player) const; + }; + void AddToWorld() override; void RemoveFromWorld() override; diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 6b72d4752f4..b3589db71ae 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -282,6 +282,17 @@ void Corpse::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData data->AddUpdateBlock(buffer); } +void Corpse::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(Owner->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), CorpseMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void Corpse::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&Corpse::m_corpseData); diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index fed3211b4c4..03e9ebb47e9 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -62,6 +62,17 @@ class TC_GAME_API Corpse : public WorldObject, public GridObject<Corpse> void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::CorpseData::Mask const& requestedCorpseMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(Corpse const* owner) : Owner(owner) { } + + Corpse const* Owner; + UF::ObjectData::Base ObjectMask; + UF::CorpseData::Base CorpseMask; + + void operator()(Player const* player) const; + }; + void AddToWorld() override; void RemoveFromWorld() override; diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index d749eb7a2f3..fb15e8d723f 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -302,6 +302,17 @@ void DynamicObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Obj data->AddUpdateBlock(buffer); } +void DynamicObject::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(Owner->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), DynamicObjectMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + 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 fd3d6a8aa0d..de1bae637c3 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.h +++ b/src/server/game/Entities/DynamicObject/DynamicObject.h @@ -47,6 +47,17 @@ class TC_GAME_API DynamicObject : public WorldObject, public GridObject<DynamicO void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::DynamicObjectData::Mask const& requestedDynamicObjectMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(DynamicObject const* owner) : Owner(owner) { } + + DynamicObject const* Owner; + UF::ObjectData::Base ObjectMask; + UF::DynamicObjectData::Base DynamicObjectMask; + + void operator()(Player const* player) const; + }; + void AddToWorld() override; void RemoveFromWorld() override; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index d07a6bb57b4..1fe707abe24 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2829,6 +2829,17 @@ void GameObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Object data->AddUpdateBlock(buffer); } +void GameObject::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(Owner->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), GameObjectMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void GameObject::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&GameObject::m_gameObjectData); diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index b72ccd1eb04..964101df642 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -92,6 +92,17 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::GameObjectData::Mask const& requestedGameObjectMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(GameObject const* owner) : Owner(owner) { } + + GameObject const* Owner; + UF::ObjectData::Base ObjectMask; + UF::GameObjectData::Base GameObjectMask; + + void operator()(Player const* player) const; + }; + void AddToWorld() override; void RemoveFromWorld() override; void CleanupsBeforeDelete(bool finalCleanup = true) override; diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp b/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp index 8584a18a679..7ec63620a4f 100644 --- a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp +++ b/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp @@ -220,6 +220,17 @@ void AzeriteEmpoweredItem::BuildValuesUpdateForPlayerWithMask(UpdateData* data, data->AddUpdateBlock(buffer); } +void AzeriteEmpoweredItem::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(player->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), ItemMask.GetChangesMask(), AzeriteEmpoweredItemMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void AzeriteEmpoweredItem::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&AzeriteEmpoweredItem::m_azeriteEmpoweredItemData); diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.h b/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.h index 2e0ed093be4..608e8f1fc71 100644 --- a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.h +++ b/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.h @@ -51,6 +51,18 @@ public: void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::ItemData::Mask const& requestedItemMask, UF::AzeriteEmpoweredItemData::Mask const& requestedAzeriteEmpoweredItemMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(AzeriteEmpoweredItem const* owner) : Owner(owner) { } + + AzeriteEmpoweredItem const* Owner; + UF::ObjectData::Base ObjectMask; + UF::ItemData::Base ItemMask; + UF::AzeriteEmpoweredItemData::Base AzeriteEmpoweredItemMask; + + void operator()(Player const* player) const; + }; + UF::UpdateField<UF::AzeriteEmpoweredItemData, 0, TYPEID_AZERITE_EMPOWERED_ITEM> m_azeriteEmpoweredItemData; private: diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp index b6f5e2b7f65..21662ee9d96 100644 --- a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp +++ b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp @@ -480,6 +480,17 @@ void AzeriteItem::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec data->AddUpdateBlock(buffer); } +void AzeriteItem::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(player->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), ItemMask.GetChangesMask(), AzeriteItemMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void AzeriteItem::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&AzeriteItem::m_azeriteItemData); diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.h b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.h index 34fff676050..444bc9c7b02 100644 --- a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.h +++ b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.h @@ -83,6 +83,18 @@ public: void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::ItemData::Mask const& requestedItemMask, UF::AzeriteItemData::Mask const& requestedAzeriteItemMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(AzeriteItem const* owner) : Owner(owner) { } + + AzeriteItem const* Owner; + UF::ObjectData::Base ObjectMask; + UF::ItemData::Base ItemMask; + UF::AzeriteItemData::Base AzeriteItemMask; + + void operator()(Player const* player) const; + }; + UF::UpdateField<UF::AzeriteItemData, 0, TYPEID_AZERITE_ITEM> m_azeriteItemData; private: diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp index 6629182b47b..53bd7b5d39f 100644 --- a/src/server/game/Entities/Item/Container/Bag.cpp +++ b/src/server/game/Entities/Item/Container/Bag.cpp @@ -248,6 +248,17 @@ void Bag::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::M data->AddUpdateBlock(buffer); } +void Bag::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(player->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), ItemMask.GetChangesMask(), ContainerMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void Bag::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&Bag::m_containerData); diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h index 8f02e5aff61..6ade3bdf974 100644 --- a/src/server/game/Entities/Item/Container/Bag.h +++ b/src/server/game/Entities/Item/Container/Bag.h @@ -62,6 +62,18 @@ class TC_GAME_API Bag : public Item void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::ItemData::Mask const& requestedItemMask, UF::ContainerData::Mask const& requestedContainerMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(Bag const* owner) : Owner(owner) { } + + Bag const* Owner; + UF::ObjectData::Base ObjectMask; + UF::ItemData::Base ItemMask; + UF::ContainerData::Base ContainerMask; + + void operator()(Player const* player) const; + }; + std::string GetDebugInfo() const override; UF::UpdateField<UF::ContainerData, 0, TYPEID_CONTAINER> m_containerData; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 62da97cb475..7f3039e9d81 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1723,6 +1723,17 @@ void Item::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData:: data->AddUpdateBlock(buffer); } +void Item::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(player->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), ItemMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void Item::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&Item::m_itemData); diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 74535c615a8..30ef7ffb170 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -378,6 +378,18 @@ 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; + + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(Item const* owner) : Owner(owner) { } + + Item const* Owner; + UF::ObjectData::Base ObjectMask; + UF::ItemData::Base ItemMask; + + void operator()(Player const* player) const; + }; + bool AddToObjectUpdate() override; void RemoveFromObjectUpdate() override; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2441d972f79..52713e1fe90 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3648,6 +3648,18 @@ void Player::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData data->AddUpdateBlock(buffer); } +void Player::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(Owner->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), UnitMask.GetChangesMask(), + PlayerMask.GetChangesMask(), ActivePlayerMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void Player::DestroyForPlayer(Player* target) const { Unit::DestroyForPlayer(target); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 9015762e3b2..02609502b13 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2086,6 +2086,20 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> 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, UF::PlayerData::Mask const& requestedPlayerMask, UF::ActivePlayerData::Mask const& requestedActivePlayerMask, Player const* target) const; + + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(Player const* owner) : Owner(owner) { } + + Player const* Owner; + UF::ObjectData::Base ObjectMask; + UF::UnitData::Base UnitMask; + UF::PlayerData::Base PlayerMask; + UF::ActivePlayerData::Base ActivePlayerMask; + + void operator()(Player const* player) const; + }; + void DestroyForPlayer(Player* target) const override; // notifiers diff --git a/src/server/game/Entities/SceneObject/SceneObject.cpp b/src/server/game/Entities/SceneObject/SceneObject.cpp index de79d7f1c31..e75c8c9c2f8 100644 --- a/src/server/game/Entities/SceneObject/SceneObject.cpp +++ b/src/server/game/Entities/SceneObject/SceneObject.cpp @@ -21,8 +21,8 @@ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "PhasingHandler.h" +#include "Player.h" #include "SpellAuras.h" -#include "Unit.h" #include "UpdateData.h" #include "Util.h" @@ -186,6 +186,17 @@ void SceneObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec data->AddUpdateBlock(buffer); } +void SceneObject::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const +{ + UpdateData udata(Owner->GetMapId()); + WorldPacket packet; + + Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), SceneObjectMask.GetChangesMask(), player); + + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); +} + void SceneObject::ClearUpdateMask(bool remove) { m_values.ClearChangesMask(&SceneObject::m_sceneObjectData); diff --git a/src/server/game/Entities/SceneObject/SceneObject.h b/src/server/game/Entities/SceneObject/SceneObject.h index ca1e6c5449f..6cc749466e6 100644 --- a/src/server/game/Entities/SceneObject/SceneObject.h +++ b/src/server/game/Entities/SceneObject/SceneObject.h @@ -43,6 +43,17 @@ public: void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::SceneObjectData::Mask const& requestedSceneObjectMask, Player const* target) const; + struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer + { + explicit ValuesUpdateForPlayerWithMaskSender(SceneObject const* owner) : Owner(owner) { } + + SceneObject const* Owner; + UF::ObjectData::Base ObjectMask; + UF::SceneObjectData::Base SceneObjectMask; + + void operator()(Player const* player) const; + }; + void AddToWorld() override; void RemoveFromWorld() override; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index d5e112bed43..a1750be34a8 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13148,6 +13148,17 @@ void Unit::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData:: data->AddUpdateBlock(buffer); } +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 d6df772d50e..146136665ba 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1882,6 +1882,17 @@ class TC_GAME_API Unit : public WorldObject 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; |