diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-12-27 15:55:01 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-12-27 15:55:01 +0100 |
commit | 28d3c1bc2366d5b19c065c6203e2c9b2504a4b38 (patch) | |
tree | ad43ed5f39b1ba18765ad398d572d75ee18c736d /src | |
parent | aefcd2fac7bb8b1a29a3d346f79bf02d1d5efc4a (diff) |
Core/PacketIO: Refactor LootPackets to use new Bits<> writing utilities
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Loot/Loot.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Server/Packets/LootPackets.cpp | 85 | ||||
-rw-r--r-- | src/server/game/Server/Packets/LootPackets.h | 7 |
3 files changed, 51 insertions, 42 deletions
diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp index 663acfb3b9c..35fe799915f 100644 --- a/src/server/game/Loot/Loot.cpp +++ b/src/server/game/Loot/Loot.cpp @@ -1113,6 +1113,7 @@ void Loot::BuildLootResponse(WorldPackets::Loot::LootResponse& packet, Player co { WorldPackets::Loot::LootItemData& lootItem = packet.Items.emplace_back(); lootItem.LootListID = item.LootListId; + lootItem.Type = item.type; lootItem.UIType = *uiType; lootItem.Quantity = item.count; lootItem.Loot.Initialize(item); diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp index addb96af535..75c9c54e8fa 100644 --- a/src/server/game/Server/Packets/LootPackets.cpp +++ b/src/server/game/Server/Packets/LootPackets.cpp @@ -17,11 +17,13 @@ #include "LootPackets.h" -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Loot::LootItemData const& lootItem) +namespace WorldPackets::Loot { - data.WriteBits(lootItem.Type, 2); - data.WriteBits(lootItem.UIType, 3); - data.WriteBit(lootItem.CanTradeToTapList); +static ByteBuffer& operator<<(ByteBuffer& data, LootItemData const& lootItem) +{ + data << Bits<2>(lootItem.Type); + data << Bits<3>(lootItem.UIType); + data << Bits<1>(lootItem.CanTradeToTapList); data.FlushBits(); data << lootItem.Loot; // WorldPackets::Item::ItemInstance data << uint32(lootItem.Quantity); @@ -30,12 +32,22 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Loot::LootItemData const& return data; } -void WorldPackets::Loot::LootUnit::Read() +static ByteBuffer& operator<<(ByteBuffer& data, LootCurrency const& lootCurrency) +{ + data << uint32(lootCurrency.CurrencyID); + data << uint32(lootCurrency.Quantity); + data << uint8(lootCurrency.LootListID); + data << Bits<3>(lootCurrency.UIType); + data.FlushBits(); + return data; +} + +void LootUnit::Read() { _worldPacket >> Unit; } -WorldPacket const* WorldPackets::Loot::LootResponse::Write() +WorldPacket const* LootResponse::Write() { _worldPacket << Owner; _worldPacket << LootObj; @@ -55,18 +67,12 @@ WorldPacket const* WorldPackets::Loot::LootResponse::Write() _worldPacket << item; for (LootCurrency const& currency : Currencies) - { - _worldPacket << uint32(currency.CurrencyID); - _worldPacket << uint32(currency.Quantity); - _worldPacket << uint8(currency.LootListID); - _worldPacket.WriteBits(currency.UIType, 3); - _worldPacket.FlushBits(); - } + _worldPacket << currency; return &_worldPacket; } -void WorldPackets::Loot::LootItem::Read() +void LootItem::Read() { uint32 Count; _worldPacket >> Count; @@ -78,10 +84,10 @@ void WorldPackets::Loot::LootItem::Read() _worldPacket >> Loot[i].LootListID; } - IsSoftInteract = _worldPacket.ReadBit(); + _worldPacket >> Bits<1>(IsSoftInteract); } -void WorldPackets::Loot::MasterLootItem::Read() +void MasterLootItem::Read() { uint32 Count; _worldPacket >> Count; @@ -95,7 +101,7 @@ void WorldPackets::Loot::MasterLootItem::Read() } } -WorldPacket const* WorldPackets::Loot::LootRemoved::Write() +WorldPacket const* LootRemoved::Write() { _worldPacket << Owner; _worldPacket << LootObj; @@ -104,41 +110,41 @@ WorldPacket const* WorldPackets::Loot::LootRemoved::Write() return &_worldPacket; } -void WorldPackets::Loot::LootRelease::Read() +void LootRelease::Read() { _worldPacket >> Unit; } -void WorldPackets::Loot::LootMoney::Read() +void LootMoney::Read() { - IsSoftInteract = _worldPacket.ReadBit(); + _worldPacket >> Bits<1>(IsSoftInteract); } -WorldPacket const* WorldPackets::Loot::LootMoneyNotify::Write() +WorldPacket const* LootMoneyNotify::Write() { _worldPacket << uint64(Money); _worldPacket << uint64(MoneyMod); - _worldPacket.WriteBit(SoleLooter); + _worldPacket << Bits<1>(SoleLooter); _worldPacket.FlushBits(); return &_worldPacket; } -WorldPacket const* WorldPackets::Loot::CoinRemoved::Write() +WorldPacket const* CoinRemoved::Write() { _worldPacket << LootObj; return &_worldPacket; } -void WorldPackets::Loot::LootRoll::Read() +void LootRoll::Read() { _worldPacket >> LootObj; _worldPacket >> LootListID; _worldPacket >> RollType; } -WorldPacket const* WorldPackets::Loot::LootReleaseResponse::Write() +WorldPacket const* LootReleaseResponse::Write() { _worldPacket << LootObj; _worldPacket << Owner; @@ -146,13 +152,13 @@ WorldPacket const* WorldPackets::Loot::LootReleaseResponse::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Loot::LootList::Write() +WorldPacket const* LootList::Write() { _worldPacket << Owner; _worldPacket << LootObj; - _worldPacket.WriteBit(Master.has_value()); - _worldPacket.WriteBit(RoundRobinWinner.has_value()); + _worldPacket << OptionalInit(Master); + _worldPacket << OptionalInit(RoundRobinWinner); _worldPacket.FlushBits(); @@ -165,12 +171,12 @@ WorldPacket const* WorldPackets::Loot::LootList::Write() return &_worldPacket; } -void WorldPackets::Loot::SetLootSpecialization::Read() +void SetLootSpecialization::Read() { _worldPacket >> SpecID; } -WorldPacket const* WorldPackets::Loot::StartLootRoll::Write() +WorldPacket const* StartLootRoll::Write() { _worldPacket << LootObj; _worldPacket << int32(MapID); @@ -184,7 +190,7 @@ WorldPacket const* WorldPackets::Loot::StartLootRoll::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Loot::LootRollBroadcast::Write() +WorldPacket const* LootRollBroadcast::Write() { _worldPacket << LootObj; _worldPacket << Player; @@ -192,14 +198,14 @@ WorldPacket const* WorldPackets::Loot::LootRollBroadcast::Write() _worldPacket << uint8(RollType); _worldPacket << int32(DungeonEncounterID); _worldPacket << Item; - _worldPacket.WriteBit(Autopassed); - _worldPacket.WriteBit(OffSpec); + _worldPacket << Bits<1>(Autopassed); + _worldPacket << Bits<1>(OffSpec); _worldPacket.FlushBits(); return &_worldPacket; } -WorldPacket const* WorldPackets::Loot::LootRollWon::Write() +WorldPacket const* LootRollWon::Write() { _worldPacket << LootObj; _worldPacket << Winner; @@ -207,13 +213,13 @@ WorldPacket const* WorldPackets::Loot::LootRollWon::Write() _worldPacket << uint8(RollType); _worldPacket << int32(DungeonEncounterID); _worldPacket << Item; - _worldPacket.WriteBit(MainSpec); + _worldPacket << Bits<1>(MainSpec); _worldPacket.FlushBits(); return &_worldPacket; } -WorldPacket const* WorldPackets::Loot::LootAllPassed::Write() +WorldPacket const* LootAllPassed::Write() { _worldPacket << LootObj; _worldPacket << int32(DungeonEncounterID); @@ -222,7 +228,7 @@ WorldPacket const* WorldPackets::Loot::LootAllPassed::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Loot::LootRollsComplete::Write() +WorldPacket const* LootRollsComplete::Write() { _worldPacket << LootObj; _worldPacket << uint8(LootListID); @@ -231,7 +237,7 @@ WorldPacket const* WorldPackets::Loot::LootRollsComplete::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Loot::MasterLootCandidateList::Write() +WorldPacket const* MasterLootCandidateList::Write() { _worldPacket << LootObj; _worldPacket << uint32(Players.size()); @@ -241,9 +247,10 @@ WorldPacket const* WorldPackets::Loot::MasterLootCandidateList::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Loot::AELootTargets::Write() +WorldPacket const* AELootTargets::Write() { _worldPacket << uint32(Count); return &_worldPacket; } +} diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h index 146537845af..6a1b79cdfd3 100644 --- a/src/server/game/Server/Packets/LootPackets.h +++ b/src/server/game/Server/Packets/LootPackets.h @@ -18,9 +18,10 @@ #ifndef LootPackets_h__ #define LootPackets_h__ -#include "Packet.h" -#include "ObjectGuid.h" #include "ItemPacketsCommon.h" +#include "LootItemType.h" +#include "ObjectGuid.h" +#include "Packet.h" enum class LootRollIneligibilityReason : uint32; @@ -40,7 +41,7 @@ namespace WorldPackets struct LootItemData { - uint8 Type = 0; + ::LootItemType Type = LootItemType::Item; uint8 UIType = 0; uint32 Quantity = 0; uint8 LootItemType = 0; |