aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Loot/Loot.cpp20
-rw-r--r--src/server/game/Loot/Loot.h1
2 files changed, 21 insertions, 0 deletions
diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp
index 5132a4b4e52..7fb6c867973 100644
--- a/src/server/game/Loot/Loot.cpp
+++ b/src/server/game/Loot/Loot.cpp
@@ -248,6 +248,8 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo
if (!lootOwner)
return false;
+ lootOwnerGUID = lootOwner->GetGUID();
+
LootTemplate const* tab = store.GetLootFor(lootId);
if (!tab)
@@ -316,6 +318,24 @@ void Loot::AddItem(LootStoreItem const& item)
lootItems.push_back(generatedLoot);
count -= proto->GetMaxStackSize();
+ // In some cases, a dropped item should be visible/lootable only for some players in group
+ bool canSeeItemInLootWindow = false;
+ if (Player* player = ObjectAccessor::FindPlayer(lootOwnerGUID))
+ {
+ if (Group* group = player->GetGroup())
+ {
+ for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
+ if (Player* member = itr->GetSource())
+ if (generatedLoot.AllowedForPlayer(member))
+ canSeeItemInLootWindow = true;
+ }
+ else if (generatedLoot.AllowedForPlayer(player))
+ canSeeItemInLootWindow = true;
+ }
+
+ if (!canSeeItemInLootWindow)
+ continue;
+
// non-conditional one-player only items are counted here,
// free for all items are counted in FillFFALoot(),
// non-ffa conditionals are counted in FillNonQuestNonFFAConditionalLoot()
diff --git a/src/server/game/Loot/Loot.h b/src/server/game/Loot/Loot.h
index 99edb8ac009..4140d04c74a 100644
--- a/src/server/game/Loot/Loot.h
+++ b/src/server/game/Loot/Loot.h
@@ -215,6 +215,7 @@ struct TC_GAME_API Loot
uint32 gold;
uint8 unlootedCount;
ObjectGuid roundRobinPlayer; // GUID of the player having the Round-Robin ownership for the loot. If 0, round robin owner has released.
+ ObjectGuid lootOwnerGUID;
LootType loot_type; // required for achievement system
uint8 maxDuplicates; // Max amount of items with the same entry that can drop (default is 1; on 25 man raid mode 3)