diff options
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 7 | ||||
| -rwxr-xr-x | src/server/game/Spells/SpellEffects.cpp | 7 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 4523397d8e6..877bf115368 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -53,7 +53,8 @@ enum SpellInterruptFlags // See SpellAuraInterruptFlags for other values definitions enum SpellChannelInterruptFlags { - CHANNEL_FLAG_DELAY = 0x4000 + CHANNEL_INTERRUPT_FLAG_INTERRUPT = 0x08, // interrupt + CHANNEL_FLAG_DELAY = 0x4000 }; enum SpellAuraInterruptFlags @@ -1007,8 +1008,8 @@ enum CurrentSpellTypes { CURRENT_MELEE_SPELL = 0, CURRENT_GENERIC_SPELL = 1, - CURRENT_AUTOREPEAT_SPELL = 2, - CURRENT_CHANNELED_SPELL = 3 + CURRENT_CHANNELED_SPELL = 2, + CURRENT_AUTOREPEAT_SPELL = 3 }; #define CURRENT_FIRST_NON_MELEE_SPELL 1 diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 1c8ce35d50d..c17b33448d5 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4333,7 +4333,8 @@ void Spell::EffectInterruptCast(SpellEffIndex effIndex) // TODO: not all spells that used this effect apply cooldown at school spells // also exist case: apply cooldown to interrupted cast only and to all spells - for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; ++i) + // there is no CURRENT_AUTOREPEAT_SPELL spells that can be interrupted + for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_AUTOREPEAT_SPELL; ++i) { if (Spell* spell = unitTarget->GetCurrentSpell(CurrentSpellTypes(i))) { @@ -4341,7 +4342,9 @@ void Spell::EffectInterruptCast(SpellEffIndex effIndex) // check if we can interrupt spell if ((spell->getState() == SPELL_STATE_CASTING || (spell->getState() == SPELL_STATE_PREPARING && spell->CalcCastTime() > 0.0f)) - && curSpellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_INTERRUPT && curSpellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE) + && curSpellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE + && ((i == CURRENT_GENERIC_SPELL && curSpellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_INTERRUPT) + || (i == CURRENT_CHANNELED_SPELL && curSpellInfo->ChannelInterruptFlags & CHANNEL_INTERRUPT_FLAG_INTERRUPT))) { if (m_originalCaster) { |
