aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Loot
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-12-27 21:36:40 +0100
committerShauren <shauren.trinity@gmail.com>2016-12-27 21:36:40 +0100
commitfe26f8ae48bd2da160ba4cf42900e0983575b96c (patch)
tree043ec6e36594d2df4ea4c873b51e3f593a5d9348 /src/server/game/Loot
parent87427321497aad5ba3c6dbc1b7f4838f255e052b (diff)
Core/Loot: Fixed group loot
Closes #17696
Diffstat (limited to 'src/server/game/Loot')
-rw-r--r--src/server/game/Loot/LootMgr.cpp22
-rw-r--r--src/server/game/Loot/LootMgr.h1
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;