aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Groups/Group.cpp16
-rw-r--r--src/server/game/Server/Packets/LootPackets.cpp18
-rw-r--r--src/server/game/Server/Packets/LootPackets.h12
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
4 files changed, 38 insertions, 10 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 2391f152ab3..16aba8426e2 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -36,6 +36,7 @@
#include "LFGMgr.h"
#include "UpdateFieldFlags.h"
#include "PartyPackets.h"
+#include "LootPackets.h"
Roll::Roll(ObjectGuid _guid, LootItem const& li) : itemGUID(_guid), itemid(li.itemid),
itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count),
@@ -930,20 +931,17 @@ void Group::SendLooter(Creature* creature, Player* groupLooter)
{
ASSERT(creature);
- WorldPacket data(SMSG_LOOT_LIST, (8+8));
- data << creature->GetGUID();
+ WorldPackets::Loot::LootList lootList;
+
+ lootList.Owner = creature->GetGUID();
if (GetLootMethod() == MASTER_LOOT && creature->loot.hasOverThresholdItem())
- data << GetMasterLooterGuid();
- else
- data << uint8(0);
+ lootList.Master = GetMasterLooterGuid();
if (groupLooter)
- data << groupLooter->GetPackGUID();
- else
- data << uint8(0);
+ lootList.RoundRobinWinner = groupLooter->GetGUID();
- BroadcastPacket(&data, false);
+ BroadcastPacket(lootList.Write(), false);
}
void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject)
diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp
index 029196d22f7..863179b702e 100644
--- a/src/server/game/Server/Packets/LootPackets.cpp
+++ b/src/server/game/Server/Packets/LootPackets.cpp
@@ -121,3 +121,21 @@ WorldPacket const* WorldPackets::Loot::LootReleaseResponse::Write()
return &_worldPacket;
}
+
+WorldPacket const* WorldPackets::Loot::LootList::Write()
+{
+ _worldPacket << Owner;
+
+ _worldPacket.WriteBit(Master.is_initialized());
+ _worldPacket.WriteBit(RoundRobinWinner.is_initialized());
+
+ _worldPacket.FlushBits();
+
+ if (Master)
+ _worldPacket << *Master;
+
+ if (RoundRobinWinner)
+ _worldPacket << *RoundRobinWinner;
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h
index fd8f545a19f..b3f9e703ba2 100644
--- a/src/server/game/Server/Packets/LootPackets.h
+++ b/src/server/game/Server/Packets/LootPackets.h
@@ -166,6 +166,18 @@ namespace WorldPackets
ObjectGuid LootObj;
ObjectGuid Owner;
};
+
+ class LootList final : public ServerPacket
+ {
+ public:
+ LootList() : ServerPacket(SMSG_LOOT_LIST, 3 * 16) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Owner;
+ Optional<ObjectGuid> Master;
+ Optional<ObjectGuid> RoundRobinWinner;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 7e5fe5e5e29..6eda0a0a009 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1307,7 +1307,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ALL_PASSED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_CONTENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ITEM_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_MONEY_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_RELEASE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_RELEASE_ALL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);