From 519c642cfff4d5ca27887f8ea3bbba709ac91ff1 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Sun, 23 Feb 2025 14:29:53 -0500 Subject: [PATCH] Core/GameObjects: Fixed gameobject spell casts failing when triggered by SPELL_EFFECT_OPEN_LOCK Port From (https://github.com/TrinityCore/TrinityCore/commit/3177c410e488866ece2803ddcf9ea09ea4b2b4fb) --- Source/Game/Entities/GameObject/GameObject.cs | 16 +++++++++------- Source/Game/Spells/SpellEffects.cs | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Source/Game/Entities/GameObject/GameObject.cs b/Source/Game/Entities/GameObject/GameObject.cs index 62a5d9b39..b3c9b8e63 100644 --- a/Source/Game/Entities/GameObject/GameObject.cs +++ b/Source/Game/Entities/GameObject/GameObject.cs @@ -1684,12 +1684,14 @@ namespace Game.Entities SetGoState(GameObjectState.Ready); } - public void Use(Unit user) + public void Use(Unit user, bool ignoreCastInProgress = false) { // by default spell caster is user Unit spellCaster = user; uint spellId = 0; - bool triggered = false; + CastSpellExtraArgs spellArgs = new(); + if (ignoreCastInProgress) + spellArgs.TriggerFlags |= TriggerCastFlags.IgnoreCastInProgress; Player playerUser = user.ToPlayer(); if (playerUser != null) @@ -2101,7 +2103,7 @@ namespace Game.Entities if (fishingPool != null) { - fishingPool.Use(player); + fishingPool.Use(player, ignoreCastInProgress); SetLootState(LootState.JustDeactivated); } else @@ -2177,7 +2179,7 @@ namespace Game.Entities player.CastSpell(player, info.Ritual.animSpell, true); // for this case, summoningRitual.spellId is always triggered - triggered = true; + spellArgs.TriggerFlags = TriggerCastFlags.FullMask; } // full amount unique participants including original summoner @@ -2193,7 +2195,7 @@ namespace Game.Entities // spell have reagent and mana cost but it not expected use its // it triggered spell in fact casted at currently channeled GO spellId = 61993; - triggered = true; + spellArgs.TriggerFlags = TriggerCastFlags.FullMask; } // Cast casterTargetSpell at a random GO user @@ -2636,10 +2638,10 @@ namespace Game.Entities Global.OutdoorPvPMgr.HandleCustomSpell(player1, spellId, this); if (spellCaster != null) - spellCaster.CastSpell(user, spellId, triggered); + spellCaster.CastSpell(user, spellId, spellArgs); else { - SpellCastResult castResult = CastSpell(user, spellId); + SpellCastResult castResult = CastSpell(user, spellId, spellArgs); if (castResult == SpellCastResult.Success) { switch (GetGoType()) diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 9db9e35cd..59f1da2ee 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -1270,7 +1270,7 @@ namespace Game.Spells } if (gameObjTarget != null) - gameObjTarget.Use(player); + gameObjTarget.Use(player, true); else if (itemTarget != null) { itemTarget.SetItemFlag(ItemFieldFlags.Unlocked);