aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Loot/LootMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Loot/LootMgr.cpp')
-rw-r--r--src/server/game/Loot/LootMgr.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp
index caf06cfb3a5..e4a9ef76a1e 100644
--- a/src/server/game/Loot/LootMgr.cpp
+++ b/src/server/game/Loot/LootMgr.cpp
@@ -447,6 +447,18 @@ void Loot::AddItem(LootStoreItem const& item)
}
}
+LootItem const* Loot::GetItemInSlot(uint32 lootSlot) const
+{
+ if (lootSlot < items.size())
+ return &items[lootSlot];
+
+ lootSlot -= uint32(items.size());
+ if (lootSlot < quest_items.size())
+ return &quest_items[lootSlot];
+
+ return nullptr;
+}
+
// Calls processor of corresponding LootTemplate (which handles everything including references)
bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bool personal, bool noEmptyError, uint16 lootMode /*= LOOT_MODE_DEFAULT*/)
{
@@ -913,7 +925,7 @@ void Loot::BuildLootResponse(WorldPackets::Loot::LootResponse& packet, Player* v
continue;
WorldPackets::Loot::LootItemData lootItem;
- lootItem.LootListID = packet.Items.size()+1;
+ lootItem.LootListID = i + 1;
lootItem.UIType = slot_type;
lootItem.Quantity = items[i].count;
lootItem.Loot.Initialize(items[i]);
@@ -930,7 +942,7 @@ void Loot::BuildLootResponse(WorldPackets::Loot::LootResponse& packet, Player* v
if (!items[i].is_looted && !items[i].freeforall && items[i].conditions.empty() && items[i].AllowedForPlayer(viewer))
{
WorldPackets::Loot::LootItemData lootItem;
- lootItem.LootListID = packet.Items.size()+1;
+ lootItem.LootListID = i + 1;
lootItem.UIType = permission == OWNER_PERMISSION ? LOOT_SLOT_TYPE_OWNER : LOOT_SLOT_TYPE_ALLOW_LOOT;
lootItem.Quantity = items[i].count;
lootItem.Loot.Initialize(items[i]);
@@ -955,7 +967,7 @@ void Loot::BuildLootResponse(WorldPackets::Loot::LootResponse& packet, Player* v
if (!qi->is_looted && !item.is_looted)
{
WorldPackets::Loot::LootItemData lootItem;
- lootItem.LootListID = packet.Items.size()+1;
+ lootItem.LootListID = items.size() + qi->index + 1;
lootItem.Quantity = item.count;
lootItem.Loot.Initialize(item);
@@ -999,7 +1011,7 @@ void Loot::BuildLootResponse(WorldPackets::Loot::LootResponse& packet, Player* v
if (!fi->is_looted && !item.is_looted)
{
WorldPackets::Loot::LootItemData lootItem;
- lootItem.LootListID = packet.Items.size()+1;
+ lootItem.LootListID = items.size() + fi->index + 1;
lootItem.UIType = slotType;
lootItem.Quantity = item.count;
lootItem.Loot.Initialize(item);
@@ -1019,7 +1031,7 @@ void Loot::BuildLootResponse(WorldPackets::Loot::LootResponse& packet, Player* v
if (!ci->is_looted && !item.is_looted)
{
WorldPackets::Loot::LootItemData lootItem;
- lootItem.LootListID = packet.Items.size()+1;
+ lootItem.LootListID = items.size() + ci->index + 1;
lootItem.Quantity = item.count;
lootItem.Loot.Initialize(item);