diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 2fa0bfddc..0493ff6a6 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3797,6 +3797,41 @@ void Spell::_cast(bool skipCheck) handle_immediate(); } + if (IsAutoActionResetSpell()) + { + bool found = false; + 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)) + { + found = true; + break; + } + } + + if (!found && !m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS)) + { + bool allow = true; + if (m_casttime == 0 && m_spellInfo->CalcCastTime()) + { + allow = false; + } + + if (allow) + { + m_caster->resetAttackTimer(BASE_ATTACK); + + if (m_caster->haveOffhandWeapon()) + { + m_caster->resetAttackTimer(OFF_ATTACK); + } + + m_caster->resetAttackTimer(RANGED_ATTACK); + } + } + } + CallScriptAfterCastHandlers(); if (modOwner) @@ -4241,34 +4276,6 @@ void Spell::finish(bool ok) } } - if (IsAutoActionResetSpell()) - { - bool found = false; - 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)) - { - found = true; - break; - } - } - if (!found && !m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS)) - { - bool allow = true; - if (m_casttime == 0 && m_spellInfo->CalcCastTime()) - allow = false; - - if (allow) - { - m_caster->resetAttackTimer(BASE_ATTACK); - if (m_caster->haveOffhandWeapon()) - m_caster->resetAttackTimer(OFF_ATTACK); - m_caster->resetAttackTimer(RANGED_ATTACK); - } - } - } - // potions disabled by client, send event "not in combat" if need if (m_caster->GetTypeId() == TYPEID_PLAYER && !m_triggeredByAuraSpell) m_caster->ToPlayer()->UpdatePotionCooldown(this);