diff options
-rw-r--r-- | src/server/game/Handlers/GroupHandler.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/Packets/LootPackets.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Server/Packets/LootPackets.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
5 files changed, 26 insertions, 12 deletions
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 13f735c793e..bf9b07413c1 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -34,6 +34,7 @@ #include "WorldSession.h" #include "SpellAuraEffects.h" #include "MiscPackets.h" +#include "LootPackets.h" class Aura; @@ -599,22 +600,15 @@ void WorldSession::HandleLootMethodOpcode(WorldPacket& recvData) group->SendUpdate(); } -void WorldSession::HandleLootRoll(WorldPacket& recvData) +void WorldSession::HandleLootRoll(WorldPackets::Loot::LootRoll& packet) { - ObjectGuid guid; - uint32 itemSlot; - uint8 rollType; - recvData >> guid; // guid of the item rolled - recvData >> itemSlot; - recvData >> rollType; // 0: pass, 1: need, 2: greed - Group* group = GetPlayer()->GetGroup(); if (!group) return; - group->CountRollVote(GetPlayer()->GetGUID(), guid, rollType); + group->CountRollVote(GetPlayer()->GetGUID(), packet.LootObj, packet.RollType); - switch (rollType) + switch (packet.RollType) { case ROLL_NEED: GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED, 1); diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp index 55ed260213c..497cb21fe17 100644 --- a/src/server/game/Server/Packets/LootPackets.cpp +++ b/src/server/game/Server/Packets/LootPackets.cpp @@ -106,3 +106,10 @@ WorldPacket const* WorldPackets::Loot::CoinRemoved::Write() return &_worldPacket; } + +void WorldPackets::Loot::LootRoll::Read() +{ + _worldPacket >> LootObj; + _worldPacket >> LootListID; + _worldPacket >> RollType; +} diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h index 0f653f53741..0f6dfe3d032 100644 --- a/src/server/game/Server/Packets/LootPackets.h +++ b/src/server/game/Server/Packets/LootPackets.h @@ -143,6 +143,18 @@ namespace WorldPackets ObjectGuid LootObj; }; + + class LootRoll final : public ClientPacket + { + public: + LootRoll(WorldPacket&& packet) : ClientPacket(CMSG_LOOT_ROLL, std::move(packet)) { } + + void Read() override; + + ObjectGuid LootObj; + uint8 LootListID = 0; + uint8 RollType = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index c7702afb398..6284a8bae21 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -493,7 +493,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_LOOT_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Loot::LootItem, &WorldSession::HandleAutostoreLootItemOpcode); DEFINE_HANDLER(CMSG_LOOT_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Loot::LootMoney, &WorldSession::HandleLootMoneyOpcode); DEFINE_HANDLER(CMSG_LOOT_RELEASE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Loot::LootRelease, &WorldSession::HandleLootReleaseOpcode); - DEFINE_OPCODE_HANDLER_OLD(CMSG_LOOT_ROLL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLootRoll ); + DEFINE_HANDLER(CMSG_LOOT_ROLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Loot::LootRoll, &WorldSession::HandleLootRoll); DEFINE_HANDLER(CMSG_LOOT_UNIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Loot::LootUnit, &WorldSession::HandleLootOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_LOW_LEVEL_RAID1, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_LOW_LEVEL_RAID2, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index f3fc21af19f..ef301ec04d3 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -256,6 +256,7 @@ namespace WorldPackets class LootItem; class LootRelease; class LootMoney; + class LootRoll; } namespace Mail @@ -939,7 +940,7 @@ class WorldSession void HandleGroupDisbandOpcode(WorldPacket& recvPacket); void HandleOptOutOfLootOpcode(WorldPacket& recvData); void HandleLootMethodOpcode(WorldPacket& recvPacket); - void HandleLootRoll(WorldPacket& recvData); + void HandleLootRoll(WorldPackets::Loot::LootRoll& packet); void HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData); void HandleRaidTargetUpdateOpcode(WorldPacket& recvData); void HandleRaidReadyCheckOpcode(WorldPacket& recvData); |