From 56e97b4d9e47e4d188dfaefad3360ade9f1ee7b0 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sat, 14 Feb 2009 18:57:54 +0300 Subject: [PATCH] [7280] Implement 287 SPELL_AURA_DEFLECT_SPELLS aura Signed-off-by: DiSlord --- src/game/SpellAuraDefines.h | 6 +++++- src/game/SpellAuras.cpp | 6 +++++- src/game/Unit.cpp | 27 +++++++++++++++++++++++++-- src/shared/revision_nr.h | 2 +- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h index 8f1ecd649..2245b930a 100644 --- a/src/game/SpellAuraDefines.h +++ b/src/game/SpellAuraDefines.h @@ -326,7 +326,11 @@ enum AuraType SPELL_AURA_MOD_HONOR_GAIN = 281, SPELL_AURA_MOD_BASE_HEALTH_PCT = 282, SPELL_AURA_MOD_HEALING_RECEIVED = 283, // Possibly only for some spell family class spells - TOTAL_AURAS = 284 + SPELL_AURA_284, + SPELL_AURA_285, + SPELL_AURA_286, + SPELL_AURA_DEFLECT_SPELLS, + TOTAL_AURAS = 288 }; enum AreaAuraType diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 5d2b77f8e..fa91f5dca 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -333,7 +333,11 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= &Aura::HandleNULL, //280 SPELL_AURA_MOD_TARGET_ARMOR_PCT &Aura::HandleNULL, //281 SPELL_AURA_MOD_HONOR_GAIN &Aura::HandleAuraIncreaseBaseHealthPercent, //282 SPELL_AURA_INCREASE_BASE_HEALTH_PERCENT - &Aura::HandleNoImmediateEffect //283 SPELL_AURA_MOD_HEALING_RECEIVED implemented in Unit::SpellHealingBonus + &Aura::HandleNoImmediateEffect, //283 SPELL_AURA_MOD_HEALING_RECEIVED implemented in Unit::SpellHealingBonus + &Aura::HandleNULL, //284 + &Aura::HandleNULL, //285 + &Aura::HandleNULL, //286 + &Aura::HandleNULL, //287 SPELL_AURA_DEFLECT_SPELLS implemented in Unit::MagicSpellHitResult and Unit::MeleeSpellHitResult }; Aura::Aura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target, Unit *caster, Item* castItem) : diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a6d8b4f86..11ffcae35 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2390,9 +2390,19 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell) if (spell->Attributes & SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK) return SPELL_MISS_NONE; - // Ranged attack cannot be parry/dodge + // Ranged attack cannot be parry/dodge only deflect if (attType == RANGED_ATTACK) + { + // only if in front + if (pVictim->HasInArc(M_PI,this)) + { + int32 deflect_chance = pVictim->GetTotalAuraModifier(SPELL_AURA_DEFLECT_SPELLS)*100; + tmp+=deflect_chance; + if (roll < tmp) + return SPELL_MISS_DEFLECT; + } return SPELL_MISS_NONE; + } // Check for attack from behind if (!pVictim->HasInArc(M_PI,this)) @@ -2524,9 +2534,22 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit *pVictim, SpellEntry const *spell) if (HitChance < 100) HitChance = 100; if (HitChance > 9900) HitChance = 9900; + int32 tmp = 10000 - HitChance; + uint32 rand = urand(0,10000); - if (rand > HitChance) + + if (rand < tmp) return SPELL_MISS_RESIST; + + // cast by caster in front of victim + if (pVictim->HasInArc(M_PI,this)) + { + int32 deflect_chance = pVictim->GetTotalAuraModifier(SPELL_AURA_DEFLECT_SPELLS)*100; + tmp+=deflect_chance; + if (rand < tmp) + return SPELL_MISS_DEFLECT; + } + return SPELL_MISS_NONE; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 281e8a4ae..6e703d2b3 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7279" + #define REVISION_NR "7280" #endif // __REVISION_NR_H__