diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/SpellMgr.cpp | 4 | ||||
-rw-r--r-- | src/game/Unit.cpp | 22 |
2 files changed, 17 insertions, 9 deletions
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 2a7e0f33472..a5d5033284e 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -3485,10 +3485,6 @@ void SpellMgr::LoadSpellCustomAttr() case 54098: // Poison Bolt Volly - Faerlina (H) spellInfo->MaxAffectedTargets = 10; break; - case 8122: case 8124: case 10888: case 10890: // Psychic Scream - case 12494: // Frostbite - spellInfo->Attributes |= SPELL_ATTR_BREAKABLE_BY_DAMAGE; - break; case 38794: case 33711: //Murmur's Touch spellInfo->MaxAffectedTargets = 1; spellInfo->EffectTriggerSpell[0] = 33760; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index ae285069f74..73d726d300a 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -3875,8 +3875,7 @@ bool Unit::AddAura(Aura *Aur, bool handleEffects) AddInterruptMask(aurSpellInfo->AuraInterruptFlags); } if((aurSpellInfo->Attributes & SPELL_ATTR_BREAKABLE_BY_DAMAGE - && !Aur->IsAuraType(SPELL_AURA_MOD_POSSESS)) //only dummy aura is breakable - || ((GetAllSpellMechanicMask(aurSpellInfo) & 1<<MECHANIC_KNOCKOUT) && Aur->IsAuraType(SPELL_AURA_MOD_STUN))) + && !Aur->IsAuraType(SPELL_AURA_MOD_POSSESS))) //only dummy aura is breakable { m_ccAuras.push_back(Aur); } @@ -4195,8 +4194,7 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode) } if((Aur->GetSpellProto()->Attributes & SPELL_ATTR_BREAKABLE_BY_DAMAGE - && !Aur->IsAuraType(SPELL_AURA_MOD_POSSESS)) //only dummy aura is breakable - || ((GetAllSpellMechanicMask(Aur->GetSpellProto()) & 1<<MECHANIC_KNOCKOUT) && Aur->IsAuraType(SPELL_AURA_MOD_STUN))) + && !Aur->IsAuraType(SPELL_AURA_MOD_POSSESS))) //only dummy aura is breakable { m_ccAuras.remove(Aur); } @@ -12460,7 +12458,8 @@ bool InitTriggerAuraData() isTriggerAura[SPELL_AURA_MOD_DAMAGE_DONE] = true; isTriggerAura[SPELL_AURA_MOD_DAMAGE_TAKEN] = true; isTriggerAura[SPELL_AURA_MOD_RESISTANCE] = true; - isTriggerAura[SPELL_AURA_MOD_STEALTH] = true; // Aura not have charges but need remove him on trigger + isTriggerAura[SPELL_AURA_MOD_STEALTH] = true; + isTriggerAura[SPELL_AURA_MOD_FEAR] = true; // Aura not have charges but need remove him on trigger isTriggerAura[SPELL_AURA_MOD_ROOT] = true; isTriggerAura[SPELL_AURA_REFLECT_SPELLS] = true; isTriggerAura[SPELL_AURA_DAMAGE_IMMUNITY] = true; @@ -12799,6 +12798,19 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag if (!procSpell) continue; break; + // These auras may not have charges - that means they have chance to remove based on dmg + case SPELL_AURA_MOD_FEAR: + case SPELL_AURA_MOD_STUN: + case SPELL_AURA_MOD_ROOT: + if (!useCharges && isVictim && damage && !i->spellProcEvent) + { + // The chance to dispel an aura depends on the damage taken with respect to the casters level. + uint32 max_dmg = getLevel() > 8 ? 25 * getLevel() - 150 : 50; + float chance = float(damage) / max_dmg * 100.0f; + if (roll_chance_f(chance)) + RemoveAura(i->aura); + } + break; /*case SPELL_AURA_ADD_FLAT_MODIFIER: case SPELL_AURA_ADD_PCT_MODIFIER: // HandleSpellModAuraProc |