mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 17:05:44 +01:00
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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user