aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellScript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/SpellScript.cpp')
-rwxr-xr-xsrc/server/game/Spells/SpellScript.cpp32
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;
}
}