diff options
| author | QAston <none@none> | 2009-06-28 13:11:49 +0200 | 
|---|---|---|
| committer | QAston <none@none> | 2009-06-28 13:11:49 +0200 | 
| commit | 95a755170eac052616b425aab9477e97a913ba7f (patch) | |
| tree | 21bece7bde6a8618fd42555ad154e0e0cc68945d /src | |
| parent | fa4838de217fd0b382b77c774e57c632829be69b (diff) | |
*Author of 4305 is thenecromancer
*Fix the bug that Intimidating shout aoe isn't removed by damage.
--HG--
branch : trunk
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  | 
