Core/Spells: rework part 3: spells only handle at most one UnitAura and one DynObjAura during its lifetime

Closes #15088
This commit is contained in:
ariel-
2018-01-27 03:45:40 -03:00
committed by Ariel Silva
parent 9b38a6352c
commit e8d5aa56cc
15 changed files with 517 additions and 323 deletions

View File

@@ -576,18 +576,22 @@ void SpellScript::SetHitHeal(int32 heal)
m_spell->m_healing = heal;
}
Aura* SpellScript::GetHitAura() const
Aura* SpellScript::GetHitAura(bool dynObjAura /*= false*/) const
{
if (!IsInTargetHook())
{
TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::GetHitAura was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId);
return nullptr;
}
if (!m_spell->m_spellAura)
Aura* aura = m_spell->_spellAura;
if (dynObjAura)
aura = m_spell->_dynObjAura;
if (!aura || aura->IsRemoved())
return nullptr;
if (m_spell->m_spellAura->IsRemoved())
return nullptr;
return m_spell->m_spellAura;
return aura;
}
void SpellScript::PreventHitAura()
@@ -597,8 +601,10 @@ void SpellScript::PreventHitAura()
TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::PreventHitAura was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId);
return;
}
if (m_spell->m_spellAura)
m_spell->m_spellAura->Remove();
if (UnitAura* aura = m_spell->_spellAura)
aura->Remove();
if (DynObjAura* aura = m_spell->_dynObjAura)
aura->Remove();
}
void SpellScript::PreventHitEffect(SpellEffIndex effIndex)