aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-10-25 00:30:52 +0200
committerShauren <shauren.trinity@gmail.com>2022-10-25 00:30:52 +0200
commit010e6f7f49744b16e3ecececb7d9605f8b8db4d5 (patch)
tree4e2101b0ffb51bbd3458f74b3dc75b3561833f5d /src/server/game/Entities/GameObject
parentc672e27f27eda49230d87ec460539429251fefdc (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.cpp29
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);
+ }
}
}