From 86fa768ef38b22afb3ebe9459179147d8e7c80e3 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 5 Oct 2022 16:21:19 -0400 Subject: [PATCH] Core/Loot: Set loot dungeon encounter id before generating Port From (https://github.com/TrinityCore/TrinityCore/commit/5f1a4cf9044d9ad65b49eb859ec36e1f62c2be10) --- Source/Game/AI/ScriptedAI/ScriptedAI.cs | 13 +++---------- Source/Game/Entities/Unit/Unit.Combat.cs | 9 +++++++++ Source/Game/Maps/Instances/InstanceScript.cs | 14 ++++++++++---- Source/Game/Spells/SpellEffects.cs | 3 +-- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/Source/Game/AI/ScriptedAI/ScriptedAI.cs b/Source/Game/AI/ScriptedAI/ScriptedAI.cs index 0e0b50472..8d91c20d9 100644 --- a/Source/Game/AI/ScriptedAI/ScriptedAI.cs +++ b/Source/Game/AI/ScriptedAI/ScriptedAI.cs @@ -547,16 +547,7 @@ namespace Game.AI summons.DespawnAll(); _scheduler.CancelAll(); if (instance != null) - { - if (me.loot != null) - { - DungeonEncounterRecord dungeonEncounter = instance.GetBossDungeonEncounter(_bossId); - if (dungeonEncounter != null) - me.loot.SetDungeonEncounterId(dungeonEncounter.Id); - } - instance.SetBossState(_bossId, EncounterState.Done); - } } public void _JustEngagedWith(Unit who) @@ -587,7 +578,7 @@ namespace Game.AI { Unit target = pair.Value.GetOther(me); if (target.IsControlledByPlayer() && !IsInBoundary(target)) - target.NearTeleportTo(x, y, z, 0); + target.NearTeleportTo(x, y, z, 0); } } @@ -689,6 +680,8 @@ namespace Game.AI public override bool CanAIAttack(Unit victim) { return IsInBoundary(victim); } public void _JustReachedHome() { me.SetActive(false); } + + public uint GetBossId() { return _bossId; } } public class WorldBossAI : ScriptedAI diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index 92328280a..e0df1e954 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -20,6 +20,7 @@ using Game.AI; using Game.BattleFields; using Game.BattleGrounds; using Game.Combat; +using Game.DataStorage; using Game.Groups; using Game.Loots; using Game.Maps; @@ -778,6 +779,14 @@ namespace Game.Entities if (creature.GetMap().Is25ManRaid()) loot.maxDuplicates = 3; + InstanceScript instance = creature.GetInstanceScript(); + if (instance != null) + { + DungeonEncounterRecord dungeonEncounter = instance.GetBossDungeonEncounter(creature); + if (dungeonEncounter != null) + loot.SetDungeonEncounterId(dungeonEncounter.Id); + } + uint lootid = creature.GetCreatureTemplate().LootId; if (lootid != 0) loot.FillLoot(lootid, LootStorage.Creature, looter, false, false, creature.GetLootMode(), creature.GetMap().GetDifficultyLootItemContext()); diff --git a/Source/Game/Maps/Instances/InstanceScript.cs b/Source/Game/Maps/Instances/InstanceScript.cs index d343a2a8e..7c734d90a 100644 --- a/Source/Game/Maps/Instances/InstanceScript.cs +++ b/Source/Game/Maps/Instances/InstanceScript.cs @@ -16,18 +16,15 @@ */ using Framework.Constants; -using Framework.Database; -using Framework.IO; +using Game.AI; using Game.DataStorage; using Game.Entities; using Game.Groups; using Game.Networking.Packets; -using Game.Scenarios; using Game.Spells; using System; using System.Collections.Generic; using System.Linq; -using System.Text; namespace Game.Maps { @@ -703,6 +700,15 @@ namespace Game.Maps { return id < bosses.Count ? bosses[id].GetDungeonEncounterForDifficulty(instance.GetDifficultyID()) : null; } + + public DungeonEncounterRecord GetBossDungeonEncounter(Creature creature) + { + BossAI bossAi = (BossAI)creature.GetAI(); + if (bossAi != null) + return GetBossDungeonEncounter(bossAi.GetBossId()); + + return null; + } public virtual bool CheckAchievementCriteriaMeet(uint criteria_id, Player source, Unit target = null, uint miscvalue1 = 0) { diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 341b8bbbe..184a679cf 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -1259,6 +1259,7 @@ namespace Game.Spells loot = new(gameObjTarget.GetMap(), guid, loottype, groupRules ? group : null); gameObjTarget.loot = loot; + loot.SetDungeonEncounterId(gameObjTarget.GetGoInfo().Chest.DungeonEncounter); loot.FillLoot(lootId, LootStorage.Gameobject, player, !groupRules, false, gameObjTarget.GetLootMode(), gameObjTarget.GetMap().GetDifficultyLootItemContext()); if (gameObjTarget.GetLootMode() > 0) @@ -1267,8 +1268,6 @@ namespace Game.Spells if (addon != null) loot.GenerateMoneyLoot(addon.Mingold, addon.Maxgold); } - - loot.SetDungeonEncounterId(gameObjTarget.GetGoInfo().Chest.DungeonEncounter); } /// @todo possible must be moved to loot release (in different from linked triggering)