mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Loot: make Loot::AddItem() honor LootItem::AllowedForPlayer() so that items that cannot be looted don't prevent skinning. (#23408)
(cherry picked from commit a1b2aa97fc)
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user