diff options
| author | Shauren <shauren.trinity@gmail.com> | 2016-12-27 21:36:40 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-12-27 21:36:40 +0100 |
| commit | fe26f8ae48bd2da160ba4cf42900e0983575b96c (patch) | |
| tree | 043ec6e36594d2df4ea4c873b51e3f593a5d9348 /src/server/game/Loot | |
| parent | 87427321497aad5ba3c6dbc1b7f4838f255e052b (diff) | |
Core/Loot: Fixed group loot
Closes #17696
Diffstat (limited to 'src/server/game/Loot')
| -rw-r--r-- | src/server/game/Loot/LootMgr.cpp | 22 | ||||
| -rw-r--r-- | src/server/game/Loot/LootMgr.h | 1 |
2 files changed, 18 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); diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index b7d3ba2123b..e64661aa337 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -384,6 +384,7 @@ struct TC_GAME_API Loot // Inserts the item into the loot (called by LootTemplate processors) void AddItem(LootStoreItem const & item); + LootItem const* GetItemInSlot(uint32 lootSlot) const; LootItem* LootItemInSlot(uint32 lootslot, Player* player, QuestItem** qitem = NULL, QuestItem** ffaitem = NULL, QuestItem** conditem = NULL); uint32 GetMaxSlotInLootFor(Player* player) const; bool hasItemFor(Player* player) const; |
