aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Object/Object.cpp2
-rw-r--r--src/server/game/Server/Packets/AchievementPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/AddonPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/AdventureJournalPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/AdventureMapPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/ArtifactPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.cpp1
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/AzeritePackets.cpp2
-rw-r--r--src/server/game/Server/Packets/BankPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/BattlePetPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/BattlenetPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/BlackMarketPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ClientConfigPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/CollectionPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp1
-rw-r--r--src/server/game/Server/Packets/CombatPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/CraftingPacketsCommon.cpp1
-rw-r--r--src/server/game/Server/Packets/DuelPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/EquipmentSetPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/GameObjectPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/HotfixPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/InstancePackets.cpp2
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.cpp1
-rw-r--r--src/server/game/Server/Packets/LFGPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/LFGPacketsCommon.cpp1
-rw-r--r--src/server/game/Server/Packets/LootPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/MailPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp1
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/PacketOperators.h385
-rw-r--r--src/server/game/Server/Packets/PacketUtilities.h356
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/PerksProgramPacketsCommon.cpp1
-rw-r--r--src/server/game/Server/Packets/PetPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ReferAFriendPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/ScenarioPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ScenePackets.cpp2
-rw-r--r--src/server/game/Server/Packets/SocialPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/TalentPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/TaxiPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/TicketPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/TokenPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/TotemPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ToyPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/TradePackets.cpp1
-rw-r--r--src/server/game/Server/Packets/TraitPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.cpp1
-rw-r--r--src/server/game/Server/Packets/TransmogrificationPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/VignettePackets.cpp2
-rw-r--r--src/server/game/Server/Packets/VoidStoragePackets.cpp1
-rw-r--r--src/server/game/Server/Packets/WhoPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/WorldStatePackets.cpp2
72 files changed, 455 insertions, 380 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 35427df1cbf..fa03ea214e4 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -245,7 +245,7 @@ void Object::BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::Updat
void Object::BuildEntityFragments(ByteBuffer* data, std::span<WowCS::EntityFragment const> fragments)
{
data->append(fragments.data(), fragments.size());
- *data << WorldPackets::As<uint8>(WowCS::EntityFragment::End);
+ *data << uint8(WowCS::EntityFragment::End);
}
void Object::BuildEntityFragmentsForValuesUpdateForPlayerWithMask(ByteBuffer* data, EnumFlag<UF::UpdateFieldFlag> flags) const
diff --git a/src/server/game/Server/Packets/AchievementPackets.cpp b/src/server/game/Server/Packets/AchievementPackets.cpp
index b35b1a1a1cb..418e44a8f32 100644
--- a/src/server/game/Server/Packets/AchievementPackets.cpp
+++ b/src/server/game/Server/Packets/AchievementPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "AchievementPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Achievement
{
diff --git a/src/server/game/Server/Packets/AddonPackets.cpp b/src/server/game/Server/Packets/AddonPackets.cpp
index 090f785cf5a..6876e015095 100644
--- a/src/server/game/Server/Packets/AddonPackets.cpp
+++ b/src/server/game/Server/Packets/AddonPackets.cpp
@@ -17,7 +17,7 @@
#include "AddonPackets.h"
#include "ByteBuffer.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Addon
{
diff --git a/src/server/game/Server/Packets/AdventureJournalPackets.cpp b/src/server/game/Server/Packets/AdventureJournalPackets.cpp
index 30e589f50f9..8f3a37c5daa 100644
--- a/src/server/game/Server/Packets/AdventureJournalPackets.cpp
+++ b/src/server/game/Server/Packets/AdventureJournalPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "AdventureJournalPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::AdventureJournal
{
diff --git a/src/server/game/Server/Packets/AdventureMapPackets.cpp b/src/server/game/Server/Packets/AdventureMapPackets.cpp
index c0d798abecd..223942c87a8 100644
--- a/src/server/game/Server/Packets/AdventureMapPackets.cpp
+++ b/src/server/game/Server/Packets/AdventureMapPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "AdventureMapPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::AdventureMap
{
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
index 0bc53ff4cfc..fd783bbe177 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "AreaTriggerPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::AreaTrigger
{
diff --git a/src/server/game/Server/Packets/ArtifactPackets.cpp b/src/server/game/Server/Packets/ArtifactPackets.cpp
index dc53b5b6774..c1e754d6922 100644
--- a/src/server/game/Server/Packets/ArtifactPackets.cpp
+++ b/src/server/game/Server/Packets/ArtifactPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "ArtifactPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Artifact
{
diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp
index 0becd9e5f9c..f09587c30b8 100644
--- a/src/server/game/Server/Packets/AuctionHousePackets.cpp
+++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp
@@ -19,6 +19,7 @@
#include "AuctionHouseMgr.h"
#include "DB2Stores.h"
#include "ObjectGuid.h"
+#include "PacketOperators.h"
namespace WorldPackets::AuctionHouse
{
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp
index 1fee24274a1..e5ab6678fd8 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.cpp
+++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp
@@ -21,6 +21,7 @@
#include "Ed25519.h"
#include "HMAC.h"
#include "ObjectMgr.h"
+#include "PacketOperators.h"
#include "RSA.h"
namespace WorldPackets::Auth
diff --git a/src/server/game/Server/Packets/AzeritePackets.cpp b/src/server/game/Server/Packets/AzeritePackets.cpp
index f048fab3a12..64f3f29939f 100644
--- a/src/server/game/Server/Packets/AzeritePackets.cpp
+++ b/src/server/game/Server/Packets/AzeritePackets.cpp
@@ -16,7 +16,7 @@
*/
#include "AzeritePackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Azerite
{
diff --git a/src/server/game/Server/Packets/BankPackets.cpp b/src/server/game/Server/Packets/BankPackets.cpp
index e91b14bcca0..c30fed72584 100644
--- a/src/server/game/Server/Packets/BankPackets.cpp
+++ b/src/server/game/Server/Packets/BankPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "BankPackets.h"
+#include "PacketOperators.h"
void WorldPackets::Bank::AutoBankItem::Read()
{
diff --git a/src/server/game/Server/Packets/BattlePetPackets.cpp b/src/server/game/Server/Packets/BattlePetPackets.cpp
index 3b91abb7a89..c5c2ba14bc5 100644
--- a/src/server/game/Server/Packets/BattlePetPackets.cpp
+++ b/src/server/game/Server/Packets/BattlePetPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "BattlePetPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::BattlePet
{
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp
index d81547a7f48..4317fb482ce 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.cpp
+++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "BattlegroundPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Battleground
{
diff --git a/src/server/game/Server/Packets/BattlenetPackets.cpp b/src/server/game/Server/Packets/BattlenetPackets.cpp
index f3080ffc119..8a1ecc366db 100644
--- a/src/server/game/Server/Packets/BattlenetPackets.cpp
+++ b/src/server/game/Server/Packets/BattlenetPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "BattlenetPackets.h"
+#include "PacketOperators.h"
#include "PacketUtilities.h"
namespace WorldPackets::Battlenet
diff --git a/src/server/game/Server/Packets/BlackMarketPackets.cpp b/src/server/game/Server/Packets/BlackMarketPackets.cpp
index 227f80446f6..7c8bbb0b996 100644
--- a/src/server/game/Server/Packets/BlackMarketPackets.cpp
+++ b/src/server/game/Server/Packets/BlackMarketPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "BlackMarketPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::BlackMarket
{
diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp
index c271e6e9510..de56c390a6c 100644
--- a/src/server/game/Server/Packets/CalendarPackets.cpp
+++ b/src/server/game/Server/Packets/CalendarPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "CalendarPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Calendar
{
diff --git a/src/server/game/Server/Packets/ChannelPackets.cpp b/src/server/game/Server/Packets/ChannelPackets.cpp
index 4b6b8ffe4cc..dc7fef49dbd 100644
--- a/src/server/game/Server/Packets/ChannelPackets.cpp
+++ b/src/server/game/Server/Packets/ChannelPackets.cpp
@@ -18,7 +18,7 @@
#include "ChannelPackets.h"
#include "Channel.h"
#include "Errors.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Channel
{
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index dbc5288c58a..7935dba4cde 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -20,6 +20,7 @@
#include "DB2Stores.h"
#include "Field.h"
#include "ObjectMgr.h"
+#include "PacketOperators.h"
#include "Player.h"
#include "StringConvert.h"
#include "World.h"
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp
index 70ae9311a60..36c2cdd018d 100644
--- a/src/server/game/Server/Packets/ChatPackets.cpp
+++ b/src/server/game/Server/Packets/ChatPackets.cpp
@@ -17,6 +17,7 @@
#include "ChatPackets.h"
#include "Creature.h"
+#include "PacketOperators.h"
#include "Player.h"
#include "World.h"
diff --git a/src/server/game/Server/Packets/ClientConfigPackets.cpp b/src/server/game/Server/Packets/ClientConfigPackets.cpp
index 9eda3e61332..dd99efb4685 100644
--- a/src/server/game/Server/Packets/ClientConfigPackets.cpp
+++ b/src/server/game/Server/Packets/ClientConfigPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "ClientConfigPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::ClientConfig
{
diff --git a/src/server/game/Server/Packets/CollectionPackets.cpp b/src/server/game/Server/Packets/CollectionPackets.cpp
index 9150d9ec2ef..61b3dd04d67 100644
--- a/src/server/game/Server/Packets/CollectionPackets.cpp
+++ b/src/server/game/Server/Packets/CollectionPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "CollectionPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Collections
{
diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp
index 4baec163035..8135eb6d5c1 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.cpp
+++ b/src/server/game/Server/Packets/CombatLogPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "CombatLogPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
#include "Spell.h"
#include "UnitDefines.h"
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index 83d229a1833..72c67e33256 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -19,6 +19,7 @@
#include "Creature.h"
#include "DB2Stores.h"
#include "Map.h"
+#include "PacketOperators.h"
#include "Player.h"
#include "Spell.h"
#include "SpellInfo.h"
diff --git a/src/server/game/Server/Packets/CombatPackets.cpp b/src/server/game/Server/Packets/CombatPackets.cpp
index d88b7c889e1..4e62ae9867a 100644
--- a/src/server/game/Server/Packets/CombatPackets.cpp
+++ b/src/server/game/Server/Packets/CombatPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "CombatPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Combat
{
diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp
index 7be2b4b3b61..a8a50d36cbc 100644
--- a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp
@@ -16,6 +16,7 @@
*/
#include "CraftingPacketsCommon.h"
+#include "PacketOperators.h"
namespace WorldPackets::Crafting
{
diff --git a/src/server/game/Server/Packets/DuelPackets.cpp b/src/server/game/Server/Packets/DuelPackets.cpp
index 43e572cdd18..d2eeb7a31ab 100644
--- a/src/server/game/Server/Packets/DuelPackets.cpp
+++ b/src/server/game/Server/Packets/DuelPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "DuelPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Duel
{
diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.cpp b/src/server/game/Server/Packets/EquipmentSetPackets.cpp
index e4f8b33ca56..937d2acfc60 100644
--- a/src/server/game/Server/Packets/EquipmentSetPackets.cpp
+++ b/src/server/game/Server/Packets/EquipmentSetPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "EquipmentSetPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::EquipmentSet
{
diff --git a/src/server/game/Server/Packets/GameObjectPackets.cpp b/src/server/game/Server/Packets/GameObjectPackets.cpp
index f24e4155433..491ff3929c9 100644
--- a/src/server/game/Server/Packets/GameObjectPackets.cpp
+++ b/src/server/game/Server/Packets/GameObjectPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "GameObjectPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
void WorldPackets::GameObject::GameObjUse::Read()
{
diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp
index 4289505d153..b773a5d64c0 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.cpp
+++ b/src/server/game/Server/Packets/GarrisonPackets.cpp
@@ -18,6 +18,7 @@
#include "GarrisonPackets.h"
#include "DB2Structure.h"
#include "Errors.h"
+#include "PacketOperators.h"
namespace WorldPackets::Garrison
{
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 88058afa51c..06d654bef9a 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "GuildPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Guild
{
diff --git a/src/server/game/Server/Packets/HotfixPackets.cpp b/src/server/game/Server/Packets/HotfixPackets.cpp
index 97125c65536..ca3c0628fbf 100644
--- a/src/server/game/Server/Packets/HotfixPackets.cpp
+++ b/src/server/game/Server/Packets/HotfixPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "HotfixPackets.h"
+#include "PacketOperators.h"
#include "PacketUtilities.h"
namespace WorldPackets::Hotfix
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp
index 63ce132f401..1e782426c92 100644
--- a/src/server/game/Server/Packets/InspectPackets.cpp
+++ b/src/server/game/Server/Packets/InspectPackets.cpp
@@ -18,6 +18,7 @@
#include "InspectPackets.h"
#include "AzeriteItem.h"
#include "Item.h"
+#include "PacketOperators.h"
#include "Player.h"
namespace WorldPackets::Inspect
diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp
index 0de61ad6003..a1973f8a1ff 100644
--- a/src/server/game/Server/Packets/InstancePackets.cpp
+++ b/src/server/game/Server/Packets/InstancePackets.cpp
@@ -16,7 +16,7 @@
*/
#include "InstancePackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Instance
{
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index 86f49b6433c..637b1ae8755 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "ItemPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Item
{
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
index 3134436d02a..08edcc0bc0c 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
@@ -18,6 +18,7 @@
#include "ItemPacketsCommon.h"
#include "Item.h"
#include "Loot.h"
+#include "PacketOperators.h"
#include "Player.h"
namespace WorldPackets::Item
diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp
index ca1439b0c5e..b26ae5e1a53 100644
--- a/src/server/game/Server/Packets/LFGPackets.cpp
+++ b/src/server/game/Server/Packets/LFGPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "LFGPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::LFG
{
diff --git a/src/server/game/Server/Packets/LFGPacketsCommon.cpp b/src/server/game/Server/Packets/LFGPacketsCommon.cpp
index d3b9774d191..df827f8a193 100644
--- a/src/server/game/Server/Packets/LFGPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/LFGPacketsCommon.cpp
@@ -16,6 +16,7 @@
*/
#include "LFGPacketsCommon.h"
+#include "PacketOperators.h"
namespace WorldPackets::LFG
{
diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp
index 8ca14a46df3..54ce4aff1d6 100644
--- a/src/server/game/Server/Packets/LootPackets.cpp
+++ b/src/server/game/Server/Packets/LootPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "LootPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Loot
{
diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp
index f859f2fcc53..4764e9e240a 100644
--- a/src/server/game/Server/Packets/MailPackets.cpp
+++ b/src/server/game/Server/Packets/MailPackets.cpp
@@ -19,6 +19,7 @@
#include "GameTime.h"
#include "Item.h"
#include "Mail.h"
+#include "PacketOperators.h"
#include "Player.h"
namespace WorldPackets::Mail
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index c641abdb94f..ec5594a5396 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "MiscPackets.h"
+#include "PacketOperators.h"
#include "Player.h"
namespace WorldPackets::Misc
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index d706d273667..0075307b107 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -19,7 +19,7 @@
#include "MoveSpline.h"
#include "MoveSplineFlag.h"
#include "MovementTypedefs.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
#include "UnitDefines.h"
#include "Util.h"
diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp
index 738a25b61ab..d28a5022396 100644
--- a/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp
@@ -16,6 +16,7 @@
*/
#include "MythicPlusPacketsCommon.h"
+#include "PacketOperators.h"
namespace WorldPackets::MythicPlus
{
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 6f6a6915a91..b05a44c5864 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "NPCPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::NPC
{
diff --git a/src/server/game/Server/Packets/PacketOperators.h b/src/server/game/Server/Packets/PacketOperators.h
new file mode 100644
index 00000000000..7c9fe489dca
--- /dev/null
+++ b/src/server/game/Server/Packets/PacketOperators.h
@@ -0,0 +1,385 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TRINITYCORE_PACKET_OPERATORS_H
+#define TRINITYCORE_PACKET_OPERATORS_H
+
+#include "ByteBuffer.h"
+#include "Optional.h"
+#include <memory>
+
+namespace WorldPackets
+{
+ namespace Strings
+ {
+ enum Utf8Mode : uint8
+ {
+ DontValidateUtf8,
+ ValidUtf8
+ };
+ }
+
+ template<typename T>
+ concept AsWritable = std::is_default_constructible_v<T> && HasByteBufferShiftOperators<T>;
+
+ template<typename T, typename Underlying>
+ concept AsWritableFor = requires { static_cast<Underlying>(std::declval<T>()); }
+ && requires { static_cast<T>(Underlying()); };
+
+ template<AsWritable Underlying, AsWritableFor<Underlying> T>
+ struct AsWriter
+ {
+ T const& Value;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, AsWriter const& opt)
+ {
+ data << static_cast<Underlying>(opt.Value);
+ return data;
+ }
+ };
+
+ template<AsWritable Underlying, AsWritableFor<Underlying> T>
+ struct AsReaderWriter : AsWriter<Underlying, T>
+ {
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, AsReaderWriter const& opt)
+ {
+ Underlying temp;
+ data >> temp;
+ const_cast<T&>(opt.Value) = static_cast<T>(temp);
+ return data;
+ }
+ };
+
+ template<AsWritable Underlying, AsWritableFor<Underlying> T>
+ inline AsWriter<Underlying, T> As(T const& value) { return { value }; }
+
+ template<AsWritable Underlying, AsWritableFor<Underlying> T>
+ inline AsReaderWriter<Underlying, T> As(T& value) { return { value }; }
+
+ template<typename T>
+ concept OptionalWritable = std::is_default_constructible_v<T>;
+
+ template<OptionalWritable T>
+ struct OptionalInitWriter
+ {
+ Optional<T> const& Opt;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, OptionalInitWriter const& opt)
+ {
+ data.WriteBit(opt.Opt.has_value());
+ return data;
+ }
+ };
+
+ template<OptionalWritable T>
+ struct OptionalInitReaderWriter : OptionalInitWriter<T>
+ {
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, OptionalInitReaderWriter const& opt)
+ {
+ if (data.ReadBit())
+ const_cast<Optional<T>&>(opt.Opt).emplace();
+ return data;
+ }
+ };
+
+ template<OptionalWritable T>
+ inline OptionalInitWriter<T> OptionalInit(Optional<T> const& value) { return { value }; }
+
+ template<OptionalWritable T>
+ inline OptionalInitReaderWriter<T> OptionalInit(Optional<T>& value) { return { value }; }
+
+ template<OptionalWritable T>
+ struct PtrInitWriter
+ {
+ std::unique_ptr<T> const& Ptr;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, PtrInitWriter const& opt)
+ {
+ data.WriteBit(opt.Ptr != nullptr);
+ return data;
+ }
+ };
+
+ template<OptionalWritable T>
+ struct PtrInitReaderWriter : PtrInitWriter<T>
+ {
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, PtrInitReaderWriter const& opt)
+ {
+ if (data.ReadBit())
+ const_cast<std::unique_ptr<T>&>(opt.Ptr) = std::make_unique<T>();
+ return data;
+ }
+ };
+
+ template<OptionalWritable T>
+ inline PtrInitWriter<T> OptionalInit(std::unique_ptr<T> const& value) { return { value }; }
+
+ template<OptionalWritable T>
+ inline PtrInitReaderWriter<T> OptionalInit(std::unique_ptr<T>& value) { return { value }; }
+
+ template<typename T>
+ concept BitsWritable = AsWritableFor<T, uint32>;
+
+ template<uint32 BitCount, BitsWritable T>
+ struct BitsWriter
+ {
+ T const& Value;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, BitsWriter const& bits)
+ {
+ if constexpr (BitCount != 1)
+ data.WriteBits(static_cast<uint32>(bits.Value), BitCount);
+ else
+ data.WriteBit(static_cast<uint32>(bits.Value) != 0);
+
+ return data;
+ }
+ };
+
+ template<uint32 BitCount, BitsWritable T>
+ struct BitsReaderWriter : BitsWriter<BitCount, T>
+ {
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, BitsReaderWriter const& bits)
+ {
+ if constexpr (BitCount != 1)
+ const_cast<T&>(bits.Value) = static_cast<T>(data.ReadBits(BitCount));
+ else
+ const_cast<T&>(bits.Value) = static_cast<T>(data.ReadBit() ? 1 : 0);
+
+ return data;
+ }
+ };
+
+ template<uint32 BitCount, BitsWritable T>
+ inline BitsWriter<BitCount, T> Bits(T const& value) { return { value }; }
+
+ template<uint32 BitCount, BitsWritable T>
+ inline BitsReaderWriter<BitCount, T> Bits(T& value) { return { value }; }
+
+ template<typename T, typename SizeType>
+ concept ContainerWritable = requires(T const& container) { { container.size() } -> AsWritableFor<SizeType>; }
+ && !std::same_as<T, std::string_view>
+ && !std::same_as<T, std::string>;
+
+ template<typename T, typename SizeType>
+ concept ContainerReadable = ContainerWritable<T, SizeType>
+ && !std::is_const_v<T>
+ && requires(T & container) { container.resize(SizeType{}); };
+
+ template<AsWritable Underlying, ContainerWritable<Underlying> Container>
+ struct SizeWriter
+ {
+ Container const& Value;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, SizeWriter const& size)
+ {
+ data << static_cast<Underlying>(size.Value.size());
+ return data;
+ }
+ };
+
+ template<AsWritable Underlying, ContainerReadable<Underlying> Container>
+ struct SizeReaderWriter : SizeWriter<Underlying, Container>
+ {
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, SizeReaderWriter const& size)
+ {
+ Underlying temp;
+ data >> temp;
+ const_cast<Container&>(size.Value).resize(temp);
+ return data;
+ }
+ };
+
+ template<AsWritable Underlying, ContainerWritable<Underlying> Container>
+ inline SizeWriter<Underlying, Container> Size(Container const& value) { return { value }; }
+
+ template<AsWritable Underlying, ContainerReadable<Underlying> Container>
+ inline SizeReaderWriter<Underlying, Container> Size(Container& value) { return { value }; }
+
+ template<uint32 BitCount, ContainerWritable<uint32> Container>
+ struct BitsSizeWriter
+ {
+ Container const& Value;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, BitsSizeWriter const& bits)
+ {
+ data.WriteBits(static_cast<uint32>(bits.Value.size()), BitCount);
+ return data;
+ }
+ };
+
+ template<uint32 BitCount, ContainerReadable<uint32> Container>
+ struct BitsSizeReaderWriter : BitsSizeWriter<BitCount, Container>
+ {
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, BitsSizeReaderWriter const& bits)
+ {
+ const_cast<Container&>(bits.Value).resize(data.ReadBits(BitCount));
+ return data;
+ }
+ };
+
+ template<uint32 BitCount, ContainerWritable<uint32> Container>
+ inline BitsSizeWriter<BitCount, Container> BitsSize(Container const& value) { return { value }; }
+
+ template<uint32 BitCount, ContainerReadable<uint32> Container>
+ inline BitsSizeReaderWriter<BitCount, Container> BitsSize(Container& value) { return { value }; }
+
+ template<typename T>
+ concept StringWritable = requires(T const& container) { { container.length() } -> AsWritableFor<uint32>; }
+ && requires(ByteBuffer& data, T const& string) { data.WriteString(static_cast<std::string_view>(string)); /*TODO: Kill String class and remove the cast*/ };
+
+ template<typename T>
+ concept StringReadable = StringWritable<T>
+ && !std::is_const_v<T>
+ && !std::same_as<T, std::string_view>
+ && requires(T& container) { container.resize(uint32()); }
+ && requires(ByteBuffer& data, T& string) { string = data.ReadString(uint32(), bool()); };
+
+ namespace SizedString
+ {
+ template<uint32 BitCount, StringWritable Container>
+ struct SizeWriter
+ {
+ Container const& Value;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, SizeWriter const& bits)
+ {
+ data.WriteBits(static_cast<uint32>(bits.Value.length()), BitCount);
+ return data;
+ }
+ };
+
+ template<uint32 BitCount, StringReadable Container>
+ struct SizeReaderWriter : SizeWriter<BitCount, Container>
+ {
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, SizeReaderWriter const& bits)
+ {
+ const_cast<Container&>(bits.Value).resize(data.ReadBits(BitCount));
+ return data;
+ }
+ };
+
+ template<uint32 BitCount, StringWritable Container>
+ inline SizeWriter<BitCount, Container> BitsSize(Container const& value) { return { value }; }
+
+ template<uint32 BitCount, StringReadable Container>
+ inline SizeReaderWriter<BitCount, Container> BitsSize(Container& value) { return { value }; }
+
+ template<StringWritable Container>
+ struct DataWriter
+ {
+ Container const& Value;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, DataWriter const& string)
+ {
+ data.WriteString(string.Value);
+ return data;
+ }
+ };
+
+ template<StringReadable Container, Strings::Utf8Mode Mode>
+ struct DataReaderWriter : DataWriter<Container>
+ {
+ static constexpr bool IsUtf8() { return Mode == Strings::ValidUtf8; }
+
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, DataReaderWriter const& string)
+ {
+ const_cast<Container&>(string.Value) = data.ReadString(string.Value.length(), IsUtf8());
+ return data;
+ }
+ };
+
+ template<Strings::Utf8Mode = Strings::ValidUtf8, StringWritable Container>
+ inline DataWriter<Container> Data(Container const& value) { return { value }; }
+
+ template<Strings::Utf8Mode Mode = Strings::ValidUtf8, StringReadable Container>
+ inline DataReaderWriter<Container, Mode> Data(Container& value) { return { value }; }
+ }
+
+ // SizedCString (sends size + string + null terminator but only if not empty)
+ namespace SizedCString
+ {
+ template<uint32 BitCount, StringWritable Container>
+ struct SizeWriter
+ {
+ Container const& Value;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, SizeWriter const& bits)
+ {
+ data.WriteBits(static_cast<uint32>(bits.Value.length() + 1), BitCount);
+ return data;
+ }
+ };
+
+ template<uint32 BitCount, StringReadable Container>
+ struct SizeReaderWriter : SizeWriter<BitCount, Container>
+ {
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, SizeReaderWriter const& bits)
+ {
+ if (uint32 bytesIncludingNullTerminator = data.ReadBits(BitCount); bytesIncludingNullTerminator > 1)
+ const_cast<Container&>(bits.Value).resize(bytesIncludingNullTerminator - 1);
+ return data;
+ }
+ };
+
+ template<uint32 BitCount, StringWritable Container>
+ inline SizeWriter<BitCount, Container> BitsSize(Container const& value) { return { value }; }
+
+ template<uint32 BitCount, StringReadable Container>
+ inline SizeReaderWriter<BitCount, Container> BitsSize(Container& value) { return { value }; }
+
+ template<StringWritable Container>
+ struct DataWriter
+ {
+ Container const& Value;
+
+ friend inline ByteBuffer& operator<<(ByteBuffer& data, DataWriter const& string)
+ {
+ if (!string.Value.empty())
+ {
+ data.WriteString(string.Value);
+ data << char('\0');
+ }
+ return data;
+ }
+ };
+
+ template<StringReadable Container, Strings::Utf8Mode Mode>
+ struct DataReaderWriter : DataWriter<Container>
+ {
+ static constexpr bool IsUtf8() { return Mode == Strings::ValidUtf8; }
+
+ friend inline ByteBuffer& operator>>(ByteBuffer& data, DataReaderWriter const& string)
+ {
+ if (!string.Value.empty())
+ {
+ const_cast<Container&>(string.Value) = data.ReadString(string.Value.length(), IsUtf8());
+ (void)data.read<char>(); // null terminator
+ }
+ return data;
+ }
+ };
+
+ template<Strings::Utf8Mode = Strings::ValidUtf8, StringWritable Container>
+ inline DataWriter<Container> Data(Container const& value) { return { value }; }
+
+ template<Strings::Utf8Mode Mode = Strings::ValidUtf8, StringReadable Container>
+ inline DataReaderWriter<Container, Mode> Data(Container& value) { return { value }; }
+ }
+}
+
+#endif // TRINITYCORE_PACKET_OPERATORS_H
diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h
index c7b859ecd65..f456090c018 100644
--- a/src/server/game/Server/Packets/PacketUtilities.h
+++ b/src/server/game/Server/Packets/PacketUtilities.h
@@ -20,10 +20,8 @@
#include "ByteBuffer.h"
#include "Duration.h"
-#include "Optional.h"
#include "Tuples.h"
#include <short_alloc/short_alloc.h>
-#include <memory>
#include <string_view>
#include <ctime>
@@ -60,12 +58,6 @@ namespace WorldPackets
namespace Strings
{
- enum Utf8Mode : uint8
- {
- DontValidateUtf8,
- ValidUtf8
- };
-
struct RawBytes { static bool Validate(std::string_view /*value*/) { return true; } };
template<std::size_t MaxBytesWithoutNullTerminator>
struct ByteSize { static bool Validate(std::string_view value) { return value.size() <= MaxBytesWithoutNullTerminator; } };
@@ -344,354 +336,6 @@ namespace WorldPackets
private:
ChronoDuration _value = ChronoDuration::zero();
};
-
- template<typename T>
- concept AsWritable = std::is_default_constructible_v<T> && HasByteBufferShiftOperators<T>;
-
- template<typename T, typename Underlying>
- concept AsWritableFor = requires { static_cast<Underlying>(std::declval<T>()); }
- && requires { static_cast<T>(Underlying()); };
-
- template<AsWritable Underlying, AsWritableFor<Underlying> T>
- struct AsWriter
- {
- T const& Value;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, AsWriter const& opt)
- {
- data << static_cast<Underlying>(opt.Value);
- return data;
- }
- };
-
- template<AsWritable Underlying, AsWritableFor<Underlying> T>
- struct AsReaderWriter : AsWriter<Underlying, T>
- {
- friend inline ByteBuffer& operator>>(ByteBuffer& data, AsReaderWriter const& opt)
- {
- Underlying temp;
- data >> temp;
- const_cast<T&>(opt.Value) = static_cast<T>(temp);
- return data;
- }
- };
-
- template<AsWritable Underlying, AsWritableFor<Underlying> T>
- inline AsWriter<Underlying, T> As(T const& value) { return { value }; }
-
- template<AsWritable Underlying, AsWritableFor<Underlying> T>
- inline AsReaderWriter<Underlying, T> As(T& value) { return { value }; }
-
- template<typename T>
- concept OptionalWritable = std::is_default_constructible_v<T>;
-
- template<OptionalWritable T>
- struct OptionalInitWriter
- {
- Optional<T> const& Opt;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, OptionalInitWriter const& opt)
- {
- data.WriteBit(opt.Opt.has_value());
- return data;
- }
- };
-
- template<OptionalWritable T>
- struct OptionalInitReaderWriter : OptionalInitWriter<T>
- {
- friend inline ByteBuffer& operator>>(ByteBuffer& data, OptionalInitReaderWriter const& opt)
- {
- if (data.ReadBit())
- const_cast<Optional<T>&>(opt.Opt).emplace();
- return data;
- }
- };
-
- template<OptionalWritable T>
- inline OptionalInitWriter<T> OptionalInit(Optional<T> const& value) { return { value }; }
-
- template<OptionalWritable T>
- inline OptionalInitReaderWriter<T> OptionalInit(Optional<T>& value) { return { value }; }
-
- template<OptionalWritable T>
- struct PtrInitWriter
- {
- std::unique_ptr<T> const& Ptr;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, PtrInitWriter const& opt)
- {
- data.WriteBit(opt.Ptr != nullptr);
- return data;
- }
- };
-
- template<OptionalWritable T>
- struct PtrInitReaderWriter : PtrInitWriter<T>
- {
- friend inline ByteBuffer& operator>>(ByteBuffer& data, PtrInitReaderWriter const& opt)
- {
- if (data.ReadBit())
- const_cast<std::unique_ptr<T>&>(opt.Ptr) = std::make_unique<T>();
- return data;
- }
- };
-
- template<OptionalWritable T>
- inline PtrInitWriter<T> OptionalInit(std::unique_ptr<T> const& value) { return { value }; }
-
- template<OptionalWritable T>
- inline PtrInitReaderWriter<T> OptionalInit(std::unique_ptr<T>& value) { return { value }; }
-
- template<typename T>
- concept BitsWritable = AsWritableFor<T, uint32>;
-
- template<uint32 BitCount, BitsWritable T>
- struct BitsWriter
- {
- T const& Value;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, BitsWriter const& bits)
- {
- if constexpr (BitCount != 1)
- data.WriteBits(static_cast<uint32>(bits.Value), BitCount);
- else
- data.WriteBit(static_cast<uint32>(bits.Value) != 0);
-
- return data;
- }
- };
-
- template<uint32 BitCount, BitsWritable T>
- struct BitsReaderWriter : BitsWriter<BitCount, T>
- {
- friend inline ByteBuffer& operator>>(ByteBuffer& data, BitsReaderWriter const& bits)
- {
- if constexpr (BitCount != 1)
- const_cast<T&>(bits.Value) = static_cast<T>(data.ReadBits(BitCount));
- else
- const_cast<T&>(bits.Value) = static_cast<T>(data.ReadBit() ? 1 : 0);
-
- return data;
- }
- };
-
- template<uint32 BitCount, BitsWritable T>
- inline BitsWriter<BitCount, T> Bits(T const& value) { return { value }; }
-
- template<uint32 BitCount, BitsWritable T>
- inline BitsReaderWriter<BitCount, T> Bits(T& value) { return { value }; }
-
- template<typename T, typename SizeType>
- concept ContainerWritable = requires(T const& container) { { container.size() } -> AsWritableFor<SizeType>; }
- && !std::same_as<T, std::string_view>
- && !std::same_as<T, std::string>;
-
- template<typename T, typename SizeType>
- concept ContainerReadable = ContainerWritable<T, SizeType>
- && !std::is_const_v<T>
- && requires(T & container) { container.resize(SizeType{}); };
-
- template<AsWritable Underlying, ContainerWritable<Underlying> Container>
- struct SizeWriter
- {
- Container const& Value;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, SizeWriter const& size)
- {
- data << static_cast<Underlying>(size.Value.size());
- return data;
- }
- };
-
- template<AsWritable Underlying, ContainerReadable<Underlying> Container>
- struct SizeReaderWriter : SizeWriter<Underlying, Container>
- {
- friend inline ByteBuffer& operator>>(ByteBuffer& data, SizeReaderWriter const& size)
- {
- Underlying temp;
- data >> temp;
- const_cast<Container&>(size.Value).resize(temp);
- return data;
- }
- };
-
- template<AsWritable Underlying, ContainerWritable<Underlying> Container>
- inline SizeWriter<Underlying, Container> Size(Container const& value) { return { value }; }
-
- template<AsWritable Underlying, ContainerReadable<Underlying> Container>
- inline SizeReaderWriter<Underlying, Container> Size(Container& value) { return { value }; }
-
- template<uint32 BitCount, ContainerWritable<uint32> Container>
- struct BitsSizeWriter
- {
- Container const& Value;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, BitsSizeWriter const& bits)
- {
- data.WriteBits(static_cast<uint32>(bits.Value.size()), BitCount);
- return data;
- }
- };
-
- template<uint32 BitCount, ContainerReadable<uint32> Container>
- struct BitsSizeReaderWriter : BitsSizeWriter<BitCount, Container>
- {
- friend inline ByteBuffer& operator>>(ByteBuffer& data, BitsSizeReaderWriter const& bits)
- {
- const_cast<Container&>(bits.Value).resize(data.ReadBits(BitCount));
- return data;
- }
- };
-
- template<uint32 BitCount, ContainerWritable<uint32> Container>
- inline BitsSizeWriter<BitCount, Container> BitsSize(Container const& value) { return { value }; }
-
- template<uint32 BitCount, ContainerReadable<uint32> Container>
- inline BitsSizeReaderWriter<BitCount, Container> BitsSize(Container& value) { return { value }; }
-
- template<typename T>
- concept StringWritable = requires(T const& container) { { container.length() } -> AsWritableFor<uint32>; }
- && requires(ByteBuffer& data, T const& string) { data.WriteString(static_cast<std::string_view>(string)); /*TODO: Kill String class and remove the cast*/ };
-
- template<typename T>
- concept StringReadable = StringWritable<T>
- && !std::is_const_v<T>
- && !std::same_as<T, std::string_view>
- && requires(T& container) { container.resize(uint32()); }
- && requires(ByteBuffer& data, T& string) { string = data.ReadString(uint32(), bool()); };
-
- namespace SizedString
- {
- template<uint32 BitCount, StringWritable Container>
- struct SizeWriter
- {
- Container const& Value;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, SizeWriter const& bits)
- {
- data.WriteBits(static_cast<uint32>(bits.Value.length()), BitCount);
- return data;
- }
- };
-
- template<uint32 BitCount, StringReadable Container>
- struct SizeReaderWriter : SizeWriter<BitCount, Container>
- {
- friend inline ByteBuffer& operator>>(ByteBuffer& data, SizeReaderWriter const& bits)
- {
- const_cast<Container&>(bits.Value).resize(data.ReadBits(BitCount));
- return data;
- }
- };
-
- template<uint32 BitCount, StringWritable Container>
- inline SizeWriter<BitCount, Container> BitsSize(Container const& value) { return { value }; }
-
- template<uint32 BitCount, StringReadable Container>
- inline SizeReaderWriter<BitCount, Container> BitsSize(Container& value) { return { value }; }
-
- template<StringWritable Container>
- struct DataWriter
- {
- Container const& Value;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, DataWriter const& string)
- {
- data.WriteString(string.Value);
- return data;
- }
- };
-
- template<StringReadable Container, Strings::Utf8Mode Mode>
- struct DataReaderWriter : DataWriter<Container>
- {
- static constexpr bool IsUtf8() { return Mode == Strings::ValidUtf8; }
-
- friend inline ByteBuffer& operator>>(ByteBuffer& data, DataReaderWriter const& string)
- {
- const_cast<Container&>(string.Value) = data.ReadString(string.Value.length(), IsUtf8());
- return data;
- }
- };
-
- template<Strings::Utf8Mode = Strings::ValidUtf8, StringWritable Container>
- inline DataWriter<Container> Data(Container const& value) { return { value }; }
-
- template<Strings::Utf8Mode Mode = Strings::ValidUtf8, StringReadable Container>
- inline DataReaderWriter<Container, Mode> Data(Container& value) { return { value }; }
- }
-
- // SizedCString (sends size + string + null terminator but only if not empty)
- namespace SizedCString
- {
- template<uint32 BitCount, StringWritable Container>
- struct SizeWriter
- {
- Container const& Value;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, SizeWriter const& bits)
- {
- data.WriteBits(static_cast<uint32>(bits.Value.length() + 1), BitCount);
- return data;
- }
- };
-
- template<uint32 BitCount, StringReadable Container>
- struct SizeReaderWriter : SizeWriter<BitCount, Container>
- {
- friend inline ByteBuffer& operator>>(ByteBuffer& data, SizeReaderWriter const& bits)
- {
- if (uint32 bytesIncludingNullTerminator = data.ReadBits(BitCount); bytesIncludingNullTerminator > 1)
- const_cast<Container&>(bits.Value).resize(bytesIncludingNullTerminator - 1);
- return data;
- }
- };
-
- template<uint32 BitCount, StringWritable Container>
- inline SizeWriter<BitCount, Container> BitsSize(Container const& value) { return { value }; }
-
- template<uint32 BitCount, StringReadable Container>
- inline SizeReaderWriter<BitCount, Container> BitsSize(Container& value) { return { value }; }
-
- template<StringWritable Container>
- struct DataWriter
- {
- Container const& Value;
-
- friend inline ByteBuffer& operator<<(ByteBuffer& data, DataWriter const& string)
- {
- if (!string.Value.empty())
- {
- data.WriteString(string.Value);
- data << char('\0');
- }
- return data;
- }
- };
-
- template<StringReadable Container, Strings::Utf8Mode Mode>
- struct DataReaderWriter : DataWriter<Container>
- {
- static constexpr bool IsUtf8() { return Mode == Strings::ValidUtf8; }
-
- friend inline ByteBuffer& operator>>(ByteBuffer& data, DataReaderWriter const& string)
- {
- if (!string.Value.empty())
- {
- const_cast<Container&>(string.Value) = data.ReadString(string.Value.length(), IsUtf8());
- (void)data.read<char>(); // null terminator
- }
- return data;
- }
- };
-
- template<Strings::Utf8Mode = Strings::ValidUtf8, StringWritable Container>
- inline DataWriter<Container> Data(Container const& value) { return { value }; }
-
- template<Strings::Utf8Mode Mode = Strings::ValidUtf8, StringReadable Container>
- inline DataReaderWriter<Container, Mode> Data(Container& value) { return { value }; }
- }
}
#endif // TRINITYCORE_PACKET_UTILITIES_H
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index caaa6a3309a..496426b2a58 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -17,6 +17,7 @@
#include "PartyPackets.h"
#include "Group.h"
+#include "PacketOperators.h"
#include "Pet.h"
#include "PhasingHandler.h"
#include "Player.h"
diff --git a/src/server/game/Server/Packets/PerksProgramPacketsCommon.cpp b/src/server/game/Server/Packets/PerksProgramPacketsCommon.cpp
index ced2d878efa..8c1a3db6317 100644
--- a/src/server/game/Server/Packets/PerksProgramPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/PerksProgramPacketsCommon.cpp
@@ -16,6 +16,7 @@
*/
#include "PerksProgramPacketsCommon.h"
+#include "PacketOperators.h"
namespace WorldPackets::PerksProgram
{
diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp
index ccd5edc8ded..9aede562bdc 100644
--- a/src/server/game/Server/Packets/PetPackets.cpp
+++ b/src/server/game/Server/Packets/PetPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "PetPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Pet
{
diff --git a/src/server/game/Server/Packets/PetitionPackets.cpp b/src/server/game/Server/Packets/PetitionPackets.cpp
index 794fc9264a3..59f9596828f 100644
--- a/src/server/game/Server/Packets/PetitionPackets.cpp
+++ b/src/server/game/Server/Packets/PetitionPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "PetitionPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Petition
{
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index f34eb0ee001..8f0b6314c6f 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -20,6 +20,7 @@
#include "CharacterCache.h"
#include "ClubUtils.h"
#include "ObjectMgr.h"
+#include "PacketOperators.h"
#include "Player.h"
#include "World.h"
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 444dd65a6b5..016efd60f97 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "QuestPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Quest
{
diff --git a/src/server/game/Server/Packets/ReferAFriendPackets.cpp b/src/server/game/Server/Packets/ReferAFriendPackets.cpp
index 08f6bf36568..d5b2ca29f16 100644
--- a/src/server/game/Server/Packets/ReferAFriendPackets.cpp
+++ b/src/server/game/Server/Packets/ReferAFriendPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "ReferAFriendPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::RaF
{
diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp
index 0eb8411f17c..4f1f31c2ae8 100644
--- a/src/server/game/Server/Packets/ReputationPackets.cpp
+++ b/src/server/game/Server/Packets/ReputationPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "ReputationPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Reputation
{
diff --git a/src/server/game/Server/Packets/ScenarioPackets.cpp b/src/server/game/Server/Packets/ScenarioPackets.cpp
index 47ffbe95696..62268a909dd 100644
--- a/src/server/game/Server/Packets/ScenarioPackets.cpp
+++ b/src/server/game/Server/Packets/ScenarioPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "ScenarioPackets.h"
+#include "PacketOperators.h"
#include "ScenarioMgr.h"
namespace WorldPackets::Scenario
diff --git a/src/server/game/Server/Packets/ScenePackets.cpp b/src/server/game/Server/Packets/ScenePackets.cpp
index 5076031a8ac..ee77b3c3b81 100644
--- a/src/server/game/Server/Packets/ScenePackets.cpp
+++ b/src/server/game/Server/Packets/ScenePackets.cpp
@@ -16,7 +16,7 @@
*/
#include "ScenePackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Scenes
{
diff --git a/src/server/game/Server/Packets/SocialPackets.cpp b/src/server/game/Server/Packets/SocialPackets.cpp
index a2f3c6eebe9..beda98d31e4 100644
--- a/src/server/game/Server/Packets/SocialPackets.cpp
+++ b/src/server/game/Server/Packets/SocialPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "SocialPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Social
{
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index b3580eeff70..dede486e2a6 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -18,6 +18,7 @@
#include "SpellPackets.h"
#include "CharacterPackets.h"
#include "MovementPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Spells
{
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index 651ce1ae4cd..5bf9641f793 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "SystemPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::System
{
diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp
index 39368fd5789..6fd35cc00c0 100644
--- a/src/server/game/Server/Packets/TalentPackets.cpp
+++ b/src/server/game/Server/Packets/TalentPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "TalentPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Talent
{
diff --git a/src/server/game/Server/Packets/TaxiPackets.cpp b/src/server/game/Server/Packets/TaxiPackets.cpp
index 95b02065aa9..a2220de80cf 100644
--- a/src/server/game/Server/Packets/TaxiPackets.cpp
+++ b/src/server/game/Server/Packets/TaxiPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "TaxiPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Taxi
{
diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp
index 0f993b354f0..259141c5848 100644
--- a/src/server/game/Server/Packets/TicketPackets.cpp
+++ b/src/server/game/Server/Packets/TicketPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "TicketPackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
#include "SupportMgr.h"
namespace WorldPackets::Ticket
diff --git a/src/server/game/Server/Packets/TokenPackets.cpp b/src/server/game/Server/Packets/TokenPackets.cpp
index 126af73ba3d..374c6e0548e 100644
--- a/src/server/game/Server/Packets/TokenPackets.cpp
+++ b/src/server/game/Server/Packets/TokenPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "TokenPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Token
{
diff --git a/src/server/game/Server/Packets/TotemPackets.cpp b/src/server/game/Server/Packets/TotemPackets.cpp
index 441d0aa97a7..b08bdf73f45 100644
--- a/src/server/game/Server/Packets/TotemPackets.cpp
+++ b/src/server/game/Server/Packets/TotemPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "TotemPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Totem
{
diff --git a/src/server/game/Server/Packets/ToyPackets.cpp b/src/server/game/Server/Packets/ToyPackets.cpp
index 53d9a0e8e78..94921b1f291 100644
--- a/src/server/game/Server/Packets/ToyPackets.cpp
+++ b/src/server/game/Server/Packets/ToyPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "ToyPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Toy
{
diff --git a/src/server/game/Server/Packets/TradePackets.cpp b/src/server/game/Server/Packets/TradePackets.cpp
index 09ecb19cadf..73e4aba8697 100644
--- a/src/server/game/Server/Packets/TradePackets.cpp
+++ b/src/server/game/Server/Packets/TradePackets.cpp
@@ -16,6 +16,7 @@
*/
#include "TradePackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Trade
{
diff --git a/src/server/game/Server/Packets/TraitPackets.cpp b/src/server/game/Server/Packets/TraitPackets.cpp
index f67b5e54e4a..0edd87395f0 100644
--- a/src/server/game/Server/Packets/TraitPackets.cpp
+++ b/src/server/game/Server/Packets/TraitPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "TraitPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Traits
{
diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.cpp b/src/server/game/Server/Packets/TraitPacketsCommon.cpp
index 3b871552f2e..704d6bc6bf8 100644
--- a/src/server/game/Server/Packets/TraitPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/TraitPacketsCommon.cpp
@@ -17,6 +17,7 @@
#include "TraitPacketsCommon.h"
#include "DBCEnums.h"
+#include "PacketOperators.h"
#include "UpdateFields.h"
namespace WorldPackets::Traits
diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.cpp b/src/server/game/Server/Packets/TransmogrificationPackets.cpp
index f6c34569bb5..68b5c6632a2 100644
--- a/src/server/game/Server/Packets/TransmogrificationPackets.cpp
+++ b/src/server/game/Server/Packets/TransmogrificationPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "TransmogrificationPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Transmogrification
{
diff --git a/src/server/game/Server/Packets/VignettePackets.cpp b/src/server/game/Server/Packets/VignettePackets.cpp
index b9c10780fd3..c7e536028b6 100644
--- a/src/server/game/Server/Packets/VignettePackets.cpp
+++ b/src/server/game/Server/Packets/VignettePackets.cpp
@@ -16,7 +16,7 @@
*/
#include "VignettePackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::Vignette
{
diff --git a/src/server/game/Server/Packets/VoidStoragePackets.cpp b/src/server/game/Server/Packets/VoidStoragePackets.cpp
index 21cabf9a678..0b7cef0f6be 100644
--- a/src/server/game/Server/Packets/VoidStoragePackets.cpp
+++ b/src/server/game/Server/Packets/VoidStoragePackets.cpp
@@ -16,6 +16,7 @@
*/
#include "VoidStoragePackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::VoidStorage
{
diff --git a/src/server/game/Server/Packets/WhoPackets.cpp b/src/server/game/Server/Packets/WhoPackets.cpp
index 5126482fe24..04bf792055d 100644
--- a/src/server/game/Server/Packets/WhoPackets.cpp
+++ b/src/server/game/Server/Packets/WhoPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "WhoPackets.h"
+#include "PacketOperators.h"
namespace WorldPackets::Who
{
diff --git a/src/server/game/Server/Packets/WorldStatePackets.cpp b/src/server/game/Server/Packets/WorldStatePackets.cpp
index 801e273a9fd..f085e52e5ef 100644
--- a/src/server/game/Server/Packets/WorldStatePackets.cpp
+++ b/src/server/game/Server/Packets/WorldStatePackets.cpp
@@ -16,7 +16,7 @@
*/
#include "WorldStatePackets.h"
-#include "PacketUtilities.h"
+#include "PacketOperators.h"
namespace WorldPackets::WorldState
{