diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Server/Packets/BattlegroundPackets.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/BattlegroundPackets.h | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/PacketUtilities.h | 30 |
3 files changed, 35 insertions, 3 deletions
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 75369ca6133..052cead02d6 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -135,9 +135,11 @@ WorldPacket const* WorldPackets::Battleground::PVPMatchStatisticsMessage::Write( void WorldPackets::Battleground::BattlemasterJoin::Read() { - QueueIDs.resize(_worldPacket.read<uint32>()); + _worldPacket >> Size<uint32>(QueueIDs); _worldPacket >> Roles; - _worldPacket >> BlacklistMap[0] >> BlacklistMap[1]; + for (int32& blacklistMap : BlacklistMap) + _worldPacket >> blacklistMap; + for (uint64& queueId : QueueIDs) _worldPacket >> queueId; } diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index fa9bfe64543..defae18ca88 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -233,7 +233,7 @@ namespace WorldPackets Array<uint64, 1> QueueIDs; uint8 Roles = 0; - int32 BlacklistMap[2] = { }; + std::array<int32, 2> BlacklistMap = { }; }; class BattlemasterJoinArena final : public ClientPacket diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h index e865ec40061..932b3491344 100644 --- a/src/server/game/Server/Packets/PacketUtilities.h +++ b/src/server/game/Server/Packets/PacketUtilities.h @@ -446,6 +446,36 @@ namespace WorldPackets template<uint32 BitCount, typename T> inline BitsReaderWriter<BitCount, T> Bits(T& value) { return { value }; } + template<typename Underlying, typename 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<typename Underlying, typename 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<typename Underlying, typename Container> + inline SizeWriter<Underlying, Container> Size(Container const& value) { return { value }; } + + template<typename Underlying, typename Container> + inline SizeReaderWriter<Underlying, Container> Size(Container& value) { return { value }; } + template<uint32 BitCount, typename Container> struct BitsSizeWriter { |