From fe26f8ae48bd2da160ba4cf42900e0983575b96c Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 27 Dec 2016 21:36:40 +0100 Subject: Core/Loot: Fixed group loot Closes #17696 --- src/server/game/Loot/LootMgr.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'src/server/game/Loot/LootMgr.cpp') 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); -- cgit v1.2.3