Core/Spells: Improve spell interruption for SPELL_ATTR5_ALLOW_ACTIONS_DURING_CHANNEL and SPELL_ATTR9_ALLOW_CAST_WHILE_CHANNELING
* Fixed spells being interrupted when casting channeled spells with SPELL_ATTR5_ALLOW_ACTIONS_DURING_CHANNEL * Check both attributes when starting autorepeat spells
This commit is contained in:
@@ -3118,17 +3118,23 @@ void Unit::SetCurrentCastSpell(Spell* pSpell)
|
||||
}
|
||||
case CURRENT_CHANNELED_SPELL:
|
||||
{
|
||||
// channel spells always break generic non-delayed and any channeled spells
|
||||
InterruptSpell(CURRENT_GENERIC_SPELL, false);
|
||||
// channel spells always break other channeled spells
|
||||
InterruptSpell(CURRENT_CHANNELED_SPELL);
|
||||
|
||||
// it also does break autorepeat if not Auto Shot
|
||||
if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL] &&
|
||||
m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->GetSpellInfo()->Id != 75)
|
||||
InterruptSpell(CURRENT_AUTOREPEAT_SPELL);
|
||||
|
||||
if (!pSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_ALLOW_ACTIONS_DURING_CHANNEL))
|
||||
{
|
||||
// channel spells break generic non-delayed
|
||||
if (m_currentSpells[CURRENT_GENERIC_SPELL]
|
||||
&& !m_currentSpells[CURRENT_GENERIC_SPELL]->GetSpellInfo()->HasAttribute(SPELL_ATTR9_ALLOW_CAST_WHILE_CHANNELING))
|
||||
InterruptSpell(CURRENT_GENERIC_SPELL, false);
|
||||
|
||||
// it also does break autorepeat if not Auto Shot
|
||||
if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL] &&
|
||||
m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->GetSpellInfo()->Id != 75)
|
||||
InterruptSpell(CURRENT_AUTOREPEAT_SPELL);
|
||||
|
||||
AddUnitState(UNIT_STATE_CASTING);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -3142,7 +3148,11 @@ void Unit::SetCurrentCastSpell(Spell* pSpell)
|
||||
{
|
||||
// generic autorepeats break generic non-delayed and channeled non-delayed spells
|
||||
InterruptSpell(CURRENT_GENERIC_SPELL, false);
|
||||
InterruptSpell(CURRENT_CHANNELED_SPELL, false);
|
||||
|
||||
if (m_currentSpells[CURRENT_CHANNELED_SPELL]
|
||||
&& !m_currentSpells[CURRENT_CHANNELED_SPELL]->GetSpellInfo()->HasAttribute(SPELL_ATTR5_ALLOW_ACTIONS_DURING_CHANNEL)
|
||||
&& !pSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR9_ALLOW_CAST_WHILE_CHANNELING))
|
||||
InterruptSpell(CURRENT_CHANNELED_SPELL, false);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user