aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Handlers/GroupHandler.cpp14
-rw-r--r--src/server/game/Server/Packets/LootPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/LootPackets.h12
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h3
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);