diff options
Diffstat (limited to 'src')
4 files changed, 36 insertions, 4 deletions
diff --git a/src/server/game/Server/Packets/ArtifactPackets.cpp b/src/server/game/Server/Packets/ArtifactPackets.cpp index 8e8a25f5360..dc53b5b6774 100644 --- a/src/server/game/Server/Packets/ArtifactPackets.cpp +++ b/src/server/game/Server/Packets/ArtifactPackets.cpp @@ -30,7 +30,7 @@ void ArtifactAddPower::Read() { _worldPacket >> ArtifactGUID; _worldPacket >> ForgeGUID; - PowerChoices.resize(_worldPacket.read<uint32>()); + _worldPacket >> Size<uint32>(PowerChoices); for (ArtifactPowerChoice& artifactPowerChoice : PowerChoices) _worldPacket >> artifactPowerChoice; } diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 6ae324494ef..f77493bb2b7 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -157,9 +157,11 @@ WorldPacket const* PVPMatchStatisticsMessage::Write() void 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 5df62d44ebc..68828e80575 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -253,7 +253,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 { |
