diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-10-25 00:30:52 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-10-25 00:30:52 +0200 |
| commit | 010e6f7f49744b16e3ecececb7d9605f8b8db4d5 (patch) | |
| tree | 4e2101b0ffb51bbd3458f74b3dc75b3561833f5d /src/server/game/Entities/GameObject | |
| parent | c672e27f27eda49230d87ec460539429251fefdc (diff) | |
Core/Loot: Implemented dungeon encounter personal loot
Closes #20066
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index caa65afa59e..70e088a23ea 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2268,15 +2268,32 @@ void GameObject::Use(Unit* user) { if (info->chest.chestPersonalLoot) { - Loot* loot = new Loot(GetMap(), GetGUID(), LOOT_CHEST, nullptr); - m_personalLoot[player->GetGUID()].reset(loot); + GameObjectTemplateAddon const* addon = GetTemplateAddon(); + if (info->chest.DungeonEncounter) + { + std::vector<Player*> tappers; + for (ObjectGuid tapperGuid : GetTapList()) + if (Player* tapper = ObjectAccessor::GetPlayer(*this, tapperGuid)) + tappers.push_back(tapper); - loot->SetDungeonEncounterId(info->chest.DungeonEncounter); - loot->FillLoot(info->chest.chestPersonalLoot, LootTemplates_Gameobject, player, true, false, GetLootMode(), GetMap()->GetDifficultyLootItemContext()); + if (tappers.empty()) + tappers.push_back(player); - if (GetLootMode() > 0) - if (GameObjectTemplateAddon const* addon = GetTemplateAddon()) + m_personalLoot = GenerateDungeonEncounterPersonalLoot(info->chest.DungeonEncounter, info->chest.chestPersonalLoot, + LootTemplates_Gameobject, LOOT_CHEST, this, addon ? addon->Mingold : 0, addon ? addon->Maxgold : 0, + GetLootMode(), GetMap()->GetDifficultyLootItemContext(), tappers); + } + else + { + Loot* loot = new Loot(GetMap(), GetGUID(), LOOT_CHEST, nullptr); + m_personalLoot[player->GetGUID()].reset(loot); + + loot->SetDungeonEncounterId(info->chest.DungeonEncounter); + loot->FillLoot(info->chest.chestPersonalLoot, LootTemplates_Gameobject, player, true, false, GetLootMode(), GetMap()->GetDifficultyLootItemContext()); + + if (GetLootMode() > 0 && addon) loot->generateMoneyLoot(addon->Mingold, addon->Maxgold); + } } } |
