From 010e6f7f49744b16e3ecececb7d9605f8b8db4d5 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 25 Oct 2022 00:30:52 +0200 Subject: Core/Loot: Implemented dungeon encounter personal loot Closes #20066 --- src/server/game/Entities/GameObject/GameObject.cpp | 29 +++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'src/server/game/Entities/GameObject') 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 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); + } } } -- cgit v1.2.3