fix(Core/Spells): Maelstrom Weapon should not reset attack timers. (#13504)

Fixes #13179
This commit is contained in:
UltraNix
2022-10-29 12:13:09 +02:00
committed by GitHub
parent 0cd6319cfc
commit 4ef1010f37
+23 -24
View File
@@ -3974,6 +3974,20 @@ void Spell::_cast(bool skipCheck)
if (modOwner) if (modOwner)
modOwner->SetSpellModTakingSpell(this, true); modOwner->SetSpellModTakingSpell(this, true);
bool resetAttackTimers = IsAutoActionResetSpell() && !m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS);
if (resetAttackTimers)
{
Unit::AuraEffectList const& vIgnoreReset = m_caster->GetAuraEffectsByType(SPELL_AURA_IGNORE_MELEE_RESET);
for (Unit::AuraEffectList::const_iterator i = vIgnoreReset.begin(); i != vIgnoreReset.end(); ++i)
{
if ((*i)->IsAffectedOnSpell(m_spellInfo))
{
resetAttackTimers = false;
break;
}
}
}
// Okay, everything is prepared. Now we need to distinguish between immediate and evented delayed spells // Okay, everything is prepared. Now we need to distinguish between immediate and evented delayed spells
if ((m_spellInfo->Speed > 0.0f && !m_spellInfo->IsChanneled())/* xinef: we dont need this || m_spellInfo->Id == 14157*/) if ((m_spellInfo->Speed > 0.0f && !m_spellInfo->IsChanneled())/* xinef: we dont need this || m_spellInfo->Id == 14157*/)
{ {
@@ -4006,38 +4020,23 @@ void Spell::_cast(bool skipCheck)
handle_immediate(); handle_immediate();
} }
if (IsAutoActionResetSpell()) if (resetAttackTimers)
{ {
bool found = false; if (m_casttime == 0 && m_spellInfo->CalcCastTime())
Unit::AuraEffectList const& vIgnoreReset = m_caster->GetAuraEffectsByType(SPELL_AURA_IGNORE_MELEE_RESET);
for (Unit::AuraEffectList::const_iterator i = vIgnoreReset.begin(); i != vIgnoreReset.end(); ++i)
{ {
if ((*i)->IsAffectedOnSpell(m_spellInfo)) resetAttackTimers = false;
{
found = true;
break;
}
} }
if (!found && !m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS)) if (resetAttackTimers)
{ {
bool allow = true; m_caster->resetAttackTimer(BASE_ATTACK);
if (m_casttime == 0 && m_spellInfo->CalcCastTime())
if (m_caster->haveOffhandWeapon())
{ {
allow = false; m_caster->resetAttackTimer(OFF_ATTACK);
} }
if (allow) m_caster->resetAttackTimer(RANGED_ATTACK);
{
m_caster->resetAttackTimer(BASE_ATTACK);
if (m_caster->haveOffhandWeapon())
{
m_caster->resetAttackTimer(OFF_ATTACK);
}
m_caster->resetAttackTimer(RANGED_ATTACK);
}
} }
} }