Core/AuraScripts: Fix runtime error messages appearing in aura scripts when one hook is called from inside of another one.

This commit is contained in:
QAston
2011-05-26 16:12:33 +02:00
parent 824e0356a8
commit 0762791754
4 changed files with 35 additions and 27 deletions

View File

@@ -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;
}
}