From ce04bc0b92cae65e927ef7d8028b2b17ddf4c398 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Sun, 23 Aug 2009 15:05:09 +0200 Subject: [PATCH] * Correctly calculate spell resist after spell hit check --HG-- branch : trunk --- src/game/Unit.cpp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 571ff140e37..6d58cc31ed8 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2791,9 +2791,6 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit *pVictim, SpellEntry const *spell) // Apply mod modHitChance-=resist_chance; - // Chance resist debuff - modHitChance-=pVictim->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_DEBUFF_RESISTANCE, int32(spell->Dispel)); - int32 HitChance = modHitChance * 100; // Increase hit chance from attacker SPELL_AURA_MOD_SPELL_HIT_CHANCE and attacker ratings HitChance += int32(m_modSpellHitChance*100.0f); @@ -2812,6 +2809,29 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit *pVictim, SpellEntry const *spell) if (rand < tmp) return SPELL_MISS_MISS; + tmp = 0; + // Chance resist mechanic (select max value from every mechanic spell effect) + int32 resist_mech = 0; + // Get effects mechanic and chance + for(uint8 eff = 0; eff < MAX_SPELL_EFFECTS; ++eff) + { + int32 effect_mech = GetEffectMechanic(spell, eff); + if (effect_mech) + { + int32 temp = pVictim->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_MECHANIC_RESISTANCE, effect_mech); + if (resist_mech < temp*100) + resist_mech = temp*100; + } + } + + // Chance resist debuff + tmp -= pVictim->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_DEBUFF_RESISTANCE, int32(spell->Dispel)); + + // Roll chance + tmp += resist_mech; + if (rand < tmp) + return SPELL_MISS_RESIST; + // cast by caster in front of victim if (pVictim->HasInArc(M_PI,this) || pVictim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION)) {