diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 32ae9349f..e6cc19c57 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2861,6 +2861,10 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) if (missInfo != SPELL_MISS_EVADE && effectUnit != m_caster && m_caster->IsFriendlyTo(effectUnit) && m_spellInfo->IsPositive() && effectUnit->IsInCombat()) m_caster->SetInCombatWith(effectUnit); + // Check for SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER + if (m_spellInfo->HasAttribute(SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER) && effectUnit->GetTypeId() != TYPEID_PLAYER) + caster->CastSpell(effectUnit, SPELL_INTERRUPT_NONPLAYER, true); + if (spellHitTarget) { //AI functions diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 9523511b2..3da61d021 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -234,6 +234,8 @@ struct ChannelTargetData SpellDestination spellDst; }; +static const uint32 SPELL_INTERRUPT_NONPLAYER = 32747; + class Spell { friend void Unit::SetCurrentCastedSpell(Spell* pSpell); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index bab5bf996..2e503ad09 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -6363,6 +6363,14 @@ void SpellMgr::LoadDbcDataCorrections() spellInfo->EffectImplicitTargetA[EFFECT_1] = TARGET_UNIT_TARGET_ANY; spellInfo->EffectImplicitTargetA[EFFECT_2] = TARGET_UNIT_TARGET_ANY; break; + // Check for SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER + case 47476: // Deathknight - Strangulate + case 15487: // Priest - Silence + case 5211: // Druid - Bash - R1 + case 6798: // Druid - Bash - R2 + case 8983: // Druid - Bash - R3 + spellInfo->AttributesEx7 |= SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER; + break; } switch (spellInfo->SpellFamilyName)