diff options
Diffstat (limited to 'src/server/game/Spells/SpellScript.cpp')
| -rwxr-xr-x | src/server/game/Spells/SpellScript.cpp | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 30b4f9d92d0..95ca8c9c37f 100755 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -227,10 +227,10 @@ bool SpellScript::_Validate(SpellEntry const * entry) bool SpellScript::_Load(Spell* spell) { - m_currentScriptState = SPELL_SCRIPT_STATE_LOADING; m_spell = spell; + _PrepareScriptCall((SpellScriptHookType)SPELL_SCRIPT_STATE_LOADING); bool load = Load(); - m_currentScriptState = SPELL_SCRIPT_STATE_NONE; + _FinishScriptCall(); return load; } @@ -630,35 +630,28 @@ void AuraScript::EffectManaShieldHandler::Call(AuraScript* auraScript, AuraEffec bool AuraScript::_Load(Aura* aura) { - m_currentScriptState = SPELL_SCRIPT_STATE_LOADING; m_aura = aura; + _PrepareScriptCall((AuraScriptHookType)SPELL_SCRIPT_STATE_LOADING, NULL); bool load = Load(); - m_currentScriptState = SPELL_SCRIPT_STATE_NONE; + _FinishScriptCall(); return load; } void AuraScript::_PrepareScriptCall(AuraScriptHookType hookType, AuraApplication const* aurApp) { + m_scriptStates.push(ScriptStateStore(m_currentScriptState, m_auraApplication, m_defaultActionPrevented)); m_currentScriptState = hookType; - switch (m_currentScriptState) - { - case AURA_SCRIPT_HOOK_EFFECT_APPLY: - case AURA_SCRIPT_HOOK_EFFECT_REMOVE: - case AURA_SCRIPT_HOOK_EFFECT_PERIODIC: - case AURA_SCRIPT_HOOK_EFFECT_ABSORB: - case AURA_SCRIPT_HOOK_EFFECT_MANASHIELD: - m_defaultActionPrevented = false; - break; - default: - break; - } + m_defaultActionPrevented = false; m_auraApplication = aurApp; } void AuraScript::_FinishScriptCall() { - m_currentScriptState = SPELL_SCRIPT_STATE_NONE; - m_auraApplication = NULL; + ScriptStateStore stateStore = m_scriptStates.top(); + m_currentScriptState = stateStore._currentScriptState; + m_auraApplication = stateStore._auraApplication; + m_defaultActionPrevented = stateStore._defaultActionPrevented; + m_scriptStates.pop(); } bool AuraScript::_IsDefaultActionPrevented() @@ -670,8 +663,7 @@ bool AuraScript::_IsDefaultActionPrevented() case AURA_SCRIPT_HOOK_EFFECT_PERIODIC: return m_defaultActionPrevented; default: - //TOFIX: probably one hook is called from another hook - //ASSERT(false && "m_defaultActionPrevented has incorrect value, or AuraScript::_IsDefaultActionPrevented is called in a wrong place"); + ASSERT(false && "AuraScript::_IsDefaultActionPrevented is called in a wrong place"); return false; } } |
