rendered paste bodyIndex: 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;