diff options
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index dac03891e43..feb0cbd978e 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -552,23 +552,17 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (e.action.cast.castFlags & SMARTCAST_INTERRUPT_PREVIOUS) me->InterruptNonMeleeSpells(false); + SpellCastResult result = me->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlag); + bool spellCastFailed = (result != SPELL_CAST_OK && result != SPELL_FAILED_SPELL_IN_PROGRESS); + if (e.action.cast.castFlags & SMARTCAST_COMBAT_MOVE) { // If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed unless target is outside spell range, out of mana, or LOS. - bool allowMove = false; - SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(e.action.cast.spell); - int32 mana = me->GetPower(POWER_MANA); - - if (me->GetDistance(target) > spellInfo->GetMaxRange(true) || me->GetDistance(target) < spellInfo->GetMinRange(true) || - !me->IsWithinLOSInMap(target) || - mana < spellInfo->CalcPowerCost(me, spellInfo->GetSchoolMask()) || - me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) - allowMove = true; - - ENSURE_AI(SmartAI, me->AI())->SetCombatMove(allowMove, true); + ENSURE_AI(SmartAI, me->AI())->SetCombatMove(spellCastFailed, true); } - me->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlag); + if (spellCastFailed) + RecalcTimer(e, 500, 500); } else if (go) go->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlag); |