diff --git a/Source/Game/AI/CoreAI/UnitAI.cs b/Source/Game/AI/CoreAI/UnitAI.cs index 91e24d029..a6aebed11 100644 --- a/Source/Game/AI/CoreAI/UnitAI.cs +++ b/Source/Game/AI/CoreAI/UnitAI.cs @@ -241,7 +241,7 @@ namespace Game.AI return targetList; } - public void DoCast(uint spellId) + public SpellCastResult DoCast(uint spellId) { Unit target = null; AITarget aiTargetType = AITarget.Self; @@ -293,27 +293,31 @@ namespace Game.AI } if (target != null) - me.CastSpell(target, spellId, false); + return me.CastSpell(target, spellId, false); + + return SpellCastResult.BadTargets; } - public void DoCast(Unit victim, uint spellId, CastSpellExtraArgs args = null) + public SpellCastResult DoCast(Unit victim, uint spellId, CastSpellExtraArgs args = null) { if (me.HasUnitState(UnitState.Casting) && !args.TriggerFlags.HasAnyFlag(TriggerCastFlags.IgnoreCastInProgress)) - return; + return SpellCastResult.SpellInProgress; - me.CastSpell(victim, spellId, args); + return me.CastSpell(victim, spellId, args); } - public void DoCastSelf(uint spellId, CastSpellExtraArgs args = null) { DoCast(me, spellId, args); } + public SpellCastResult DoCastSelf(uint spellId, CastSpellExtraArgs args = null) { return DoCast(me, spellId, args); } - public void DoCastVictim(uint spellId, CastSpellExtraArgs args = null) + public SpellCastResult DoCastVictim(uint spellId, CastSpellExtraArgs args = null) { Unit victim = me.GetVictim(); if (victim != null) - DoCast(victim, spellId, args); + return DoCast(victim, spellId, args); + + return SpellCastResult.BadTargets; } - public void DoCastAOE(uint spellId, CastSpellExtraArgs args = null) { DoCast(null, spellId, args); } + public SpellCastResult DoCastAOE(uint spellId, CastSpellExtraArgs args = null) { return DoCast(null, spellId, args); } public static void FillAISpellInfo() { diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index cd3e85ca2..8636394e0 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -2178,19 +2178,19 @@ namespace Game.Entities return my_faction.IsNeutralToAll(); } - public void CastSpell(WorldObject target, uint spellId, bool triggered = false) + public SpellCastResult CastSpell(WorldObject target, uint spellId, bool triggered = false) { CastSpellExtraArgs args = new(triggered); - CastSpell(target, spellId, args); + return CastSpell(target, spellId, args); } - public void CastSpell(SpellCastTargets targets, uint spellId, CastSpellExtraArgs args) + public SpellCastResult CastSpell(SpellCastTargets targets, uint spellId, CastSpellExtraArgs args) { SpellInfo info = Global.SpellMgr.GetSpellInfo(spellId, args.CastDifficulty != Difficulty.None ? args.CastDifficulty : GetMap().GetDifficultyID()); if (info == null) { Log.outError(LogFilter.Unit, $"CastSpell: unknown spell {spellId} by caster {GetGUID()}"); - return; + return SpellCastResult.SpellUnavailable; } Spell spell = new(this, info, args.TriggerFlags, args.OriginalCaster, args.OriginalCastId); @@ -2198,10 +2198,10 @@ namespace Game.Entities spell.SetSpellValue(pair.Key, pair.Value); spell.m_CastItem = args.CastItem; - spell.Prepare(targets, args.TriggeringAura); + return spell.Prepare(targets, args.TriggeringAura); } - public void CastSpell(WorldObject target, uint spellId, CastSpellExtraArgs args) + public SpellCastResult CastSpell(WorldObject target, uint spellId, CastSpellExtraArgs args) { SpellCastTargets targets = new(); if (target) @@ -2217,11 +2217,12 @@ namespace Game.Entities else { Log.outError(LogFilter.Unit, $"CastSpell: Invalid target {target.GetGUID()} passed to spell cast by {GetGUID()}"); - return; + return SpellCastResult.BadTargets; } } } - CastSpell(targets, spellId, args); + + return CastSpell(targets, spellId, args); } public void CastSpell(Position dest, uint spellId, CastSpellExtraArgs args) diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index e9f41f80f..ba17e5199 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -2218,7 +2218,7 @@ namespace Game.Spells return channelTargetEffectMask == 0; } - public void Prepare(SpellCastTargets targets, AuraEffect triggeredByAura = null) + public SpellCastResult Prepare(SpellCastTargets targets, AuraEffect triggeredByAura = null) { if (m_CastItem != null) { @@ -2234,7 +2234,7 @@ namespace Game.Spells { SendCastResult(SpellCastResult.EquippedItem); Finish(false); - return; + return SpellCastResult.EquippedItem; } } @@ -2257,7 +2257,7 @@ namespace Game.Spells { SendCastResult(SpellCastResult.SpellUnavailable); Finish(false); - return; + return SpellCastResult.SpellUnavailable; } // Prevent casting at cast another spell (ServerSide check) @@ -2265,7 +2265,7 @@ namespace Game.Spells { SendCastResult(SpellCastResult.SpellInProgress); Finish(false); - return; + return SpellCastResult.SpellInProgress; } LoadScripts(); @@ -2302,7 +2302,7 @@ namespace Game.Spells SendCastResult(result); Finish(false); - return; + return result; } // Prepare data for triggers @@ -2333,7 +2333,7 @@ namespace Game.Spells { SendCastResult(SpellCastResult.Moving); Finish(false); - return; + return SpellCastResult.Moving; } } @@ -2387,6 +2387,8 @@ namespace Game.Spells if (m_casttime == 0 && /*m_spellInfo.StartRecoveryTime == 0 && */ GetCurrentContainer() == CurrentSpellTypes.Generic) Cast(true); } + + return SpellCastResult.SpellCastOk; } public void Cancel()