diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 11 | 
1 files changed, 11 insertions, 0 deletions
| diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 88c0bb38f17..2f6c68c8bb6 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -621,6 +621,17 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam          else              victim->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TAKE_DAMAGE, 0); +       // interrupt spells with SPELL_INTERRUPT_FLAG_ABORT_ON_DMG on absorbed damage (no dots) +       if (!damage && damagetype != DOT && cleanDamage && cleanDamage->absorbed_damage) +           if (victim != this && victim->GetTypeId() == TYPEID_PLAYER) +               if (Spell* spell = victim->m_currentSpells[CURRENT_GENERIC_SPELL]) +                   if (spell->getState() == SPELL_STATE_PREPARING) +                   { +                       uint32 interruptFlags = spell->m_spellInfo->InterruptFlags; +                       if ((interruptFlags & SPELL_INTERRUPT_FLAG_ABORT_ON_DMG) != 0) +                           victim->InterruptNonMeleeSpells(false); +                   } +          // We're going to call functions which can modify content of the list during iteration over it's elements          // Let's copy the list so we can prevent iterator invalidation          AuraEffectList vCopyDamageCopy(victim->GetAuraEffectsByType(SPELL_AURA_SHARE_DAMAGE_PCT)); | 
