rendered paste bodyIndex: src/game/SpellAuras.cpp
===================================================================
--- src/game/SpellAuras.cpp (revision 5320)
+++ src/game/SpellAuras.cpp (working copy)
@@ -210,7 +210,7 @@
&Aura::HandleNULL, //157 SPELL_AURA_PET_DAMAGE_MULTI
&Aura::HandleShieldBlockValue, //158 SPELL_AURA_MOD_SHIELD_BLOCKVALUE
&Aura::HandleNULL, //159 SPELL_AURA_NO_PVP_CREDIT only for Honorless Target spell
- &Aura::HandleNULL, //160 SPELL_AURA_MOD_AOE_AVOIDANCE
+ &Aura::HandleNoImmediateEffect, //160 SPELL_AURA_MOD_AOE_AVOIDANCE
&Aura::HandleNoImmediateEffect, //161 SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT
&Aura::HandleNULL, //162 SPELL_AURA_POWER_BURN_MANA
&Aura::HandleNULL, //163 SPELL_AURA_MOD_CRIT_DAMAGE_BONUS_MELEE
Index: src/game/Unit.cpp
===================================================================
--- src/game/Unit.cpp (revision 5320)
+++ src/game/Unit.cpp (working copy)
@@ -1058,8 +1058,27 @@
// TODO this in only generic way, check for exceptions
DEBUG_LOG("DealDamageBySchool (BEFORE) SCHOOL %u >> DMG:%u", spellInfo->School, *damage);
+
+ // All area effect attacks can be avoided base on SPELL_AURA_MOD_AOE_AVOIDANCE
+ for ( uint32 i=0; i<3;i++)
+ {
+ switch (spellInfo->EffectImplicitTargetA[i])
+ {
+ case TARGET_ALL_ENEMY_IN_AREA:
+ case TARGET_ALL_ENEMY_IN_AREA_INSTANT:
+ case TARGET_ALL_AROUND_CASTER:
+ case TARGET_ALL_ENEMY_IN_AREA_CHANNELED:
+ if( AoeAvoidChanceCalc(pVictim) > urand(0,10000) )
+ {
+ cleanDamage->damage = 0;
+ *damage = 0;
+ return;
+ }
+ break;
+ }
+ }
- // Per-school calc
+ // Per-school calc
switch (spellInfo->School)
{
// Physical damage school
@@ -2730,6 +2749,18 @@
((Creature*)victim)->AI().EnterEvadeMode(this);*/
}
+uint32 Unit::AoeAvoidChanceCalc(Unit *pVictim) const
+{
+ if(!pVictim)
+ return 0;
+
+ int32 avoidchance = 0;
+ int32 mod = pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_AOE_AVOIDANCE);
+ avoidchance += mod * 100;
+
+ return avoidchance > 10000 ? 10000 : avoidchance;
+}
+
uint32 Unit::SpellMissChanceCalc(Unit *pVictim) const
{
if(!pVictim)
Index: src/game/Unit.h
===================================================================
--- src/game/Unit.h (revision 5320)
+++ src/game/Unit.h (working copy)
@@ -680,7 +680,8 @@
void ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 damage = 0, SpellEntry const *procSpell = NULL, bool isTriggeredSpell = false, WeaponAttackType attType = BASE_ATTACK);
void HandleEmoteCommand(uint32 anim_id);
void AttackerStateUpdate (Unit *pVictim, WeaponAttackType attType = BASE_ATTACK, bool isTriggered = false);
- uint32 SpellMissChanceCalc(Unit *pVictim) const;
+ uint32 AoeAvoidChanceCalc(Unit *pVictim) const;
+ uint32 SpellMissChanceCalc(Unit *pVictim) const;
int32 MeleeMissChanceCalc(const Unit *pVictim, WeaponAttackType attType) const;
SpellMissInfo SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool canReflect = false);