diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 84d0a97af0..0c7e15e74e 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 ba5aaf7f69..6ed8ecf7c8 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 GridObjectAddUpdateBlock(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 157a89f77c..b175f8b1b1 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 GridObjectAddUpdateBlock(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 fed3211b4c..03e9ebb47e 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 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 d749eb7a2f..fb15e8d723 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 fd3d6a8aa0..de1bae637c 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 GridObjectAddUpdateBlock(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 b72ccd1eb0..964101df64 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 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 8584a18a67..7ec63620a4 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 2e0ed093be..608e8f1fc7 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 m_azeriteEmpoweredItemData; private: diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp index b6f5e2b7f6..21662ee9d9 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 34fff67605..444bc9c7b0 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 m_azeriteItemData; private: diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp index 6629182b47..53bd7b5d39 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 8f02e5aff6..6ade3bdf97 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 m_containerData; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 62da97cb47..7f3039e9d8 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 74535c615a..30ef7ffb17 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 2441d972f7..52713e1fe9 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 9015762e3b..02609502b1 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 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 de79d7f1c3..e75c8c9c2f 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 ca1e6c5449..6cc749466e 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 d5e112bed4..a1750be34a 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 d6df772d50..146136665b 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;