fix(Core/Spells): Maelstrom Weapon should not reset attack timers. (#13504)
Fixes #13179
This commit is contained in:
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user