fix(Core/Loot): (#7452)

- Players that did not participate in killing dungeon boss are not eligible to get loot.
- Players that are too far away from the looted object are not eligible to get loot.
- Players that released spirit and were outside the dungeon when the loot has been released are eligible to get loot.
- Players that have pending bind are not eligible to get loot.
- Properly get loot recipient for some chests in dungeons.
- All above fixes should work in any loot mode (group loot, master loot, etc.)
- Closes #2104.
This commit is contained in:
UltraNix
2021-08-24 23:48:22 +02:00
committed by GitHub
parent a594bf5b29
commit 1b7d3708a6
19 changed files with 197 additions and 97 deletions
+3 -3
View File
@@ -362,7 +362,7 @@ struct Loot
void RemoveLooter(ObjectGuid GUID) { PlayersLooting.erase(GUID); }
void generateMoneyLoot(uint32 minAmount, uint32 maxAmount);
bool FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bool personal, bool noEmptyError = false, uint16 lootMode = LOOT_MODE_DEFAULT);
bool FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bool personal, bool noEmptyError = false, uint16 lootMode = LOOT_MODE_DEFAULT, WorldObject* lootSource = nullptr);
// Inserts the item into the loot (called by LootTemplate processors)
void AddItem(LootStoreItem const& item);
@@ -372,12 +372,12 @@ struct Loot
bool hasItemForAll() const;
bool hasItemFor(Player* player) const;
[[nodiscard]] bool hasOverThresholdItem() const;
void FillNotNormalLootFor(Player* player, bool presentAtLooting);
void FillNotNormalLootFor(Player* player);
private:
QuestItemList* FillFFALoot(Player* player);
QuestItemList* FillQuestLoot(Player* player);
QuestItemList* FillNonQuestNonFFAConditionalLoot(Player* player, bool presentAtLooting);
QuestItemList* FillNonQuestNonFFAConditionalLoot(Player* player);
typedef GuidSet PlayersLootingSet;
PlayersLootingSet PlayersLooting;