Index: game/Unit.cpp =================================================================== --- game/Unit.cpp (revision 5386) +++ game/Unit.cpp (working copy) @@ -408,19 +408,6 @@ return (!m_modAuras[auraType].empty()); } -/* Called by DealDamage for auras that have a chance to be dispelled on damage taken. */ -void Unit::RemoveSpellbyDamageTaken(AuraType auraType, uint32 damage) -{ - if(!HasAuraType(auraType)) - return; - - // The chance to dispell 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)) - RemoveSpellsCausingAura(auraType); -} - void Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchools damageSchool, SpellEntry const *spellProto, bool durabilityLoss) { if (!pVictim->isAlive() || pVictim->isInFlight() || pVictim->GetTypeId() == TYPEID_UNIT && ((Creature*)pVictim)->IsInEvadeMode()) @@ -465,11 +452,6 @@ return; } - pVictim->RemoveSpellbyDamageTaken(SPELL_AURA_MOD_FEAR, damage); - // root type spells do not dispell the root effect - if(!spellProto || spellProto->Mechanic != MECHANIC_ROOT) - pVictim->RemoveSpellbyDamageTaken(SPELL_AURA_MOD_ROOT, damage); - if(pVictim->GetTypeId() != TYPEID_PLAYER) { //pVictim->SetInFront(this); @@ -921,6 +903,16 @@ // FIXME: this may cause the auras with proc chance to be rerolled several times next = vAuras.begin(); } + } + else if ( (se->Attributes & 0x40000000LL) && se->Id != spellProto->Id ) + { + uint32 max_dmg = pVictim->getLevel() > 8 ? 25 * pVictim->getLevel() - 150 : 50; + float chance = float(damage) / max_dmg * 100.0f; + if (roll_chance_f(chance)) + { + pVictim->RemoveAurasDueToSpell(i->second->GetId()); + next = vAuras.begin(); + } } } Index: game/Unit.h =================================================================== --- game/Unit.h (revision 5386) +++ game/Unit.h (working copy) @@ -751,8 +751,6 @@ bool isFrozen() const; - void RemoveSpellbyDamageTaken(AuraType auraType, uint32 damage); - bool isTargetableForAttack() const; virtual bool IsInWater() const; virtual bool IsUnderWater() const;