diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 370ea566b..8242e6fc3 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -330,7 +330,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= &Aura::HandleNoImmediateEffect, //277 SPELL_AURA_MOD_MAX_AFFECTED_TARGETS Use SpellClassMask for spell select &Aura::HandleNULL, //278 SPELL_AURA_MOD_DISARM_RANGED disarm ranged weapon &Aura::HandleNULL, //279 visual effects? 58836 and 57507 - &Aura::HandleNULL, //280 SPELL_AURA_MOD_TARGET_ARMOR_PCT + &Aura::HandleNoImmediateEffect, //280 SPELL_AURA_MOD_TARGET_ARMOR_PCT implemented in Unit::CalcArmorReducedDamage &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 diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 0aea5fd13..9b3cac73b 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1565,6 +1565,7 @@ uint32 Unit::CalcArmorReducedDamage(Unit* pVictim, const uint32 damage) { uint32 newdamage = 0; float armor = pVictim->GetArmor(); + // Ignore enemy armor by SPELL_AURA_MOD_TARGET_RESISTANCE aura armor += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, SPELL_SCHOOL_MASK_NORMAL); @@ -1572,19 +1573,24 @@ uint32 Unit::CalcArmorReducedDamage(Unit* pVictim, const uint32 damage) if (GetTypeId()==TYPEID_PLAYER) armor *= 1.0f - ((Player*)this)->GetRatingBonusValue(CR_ARMOR_PENETRATION) / 100.0f; - if (armor < 0.0f) armor=0.0f; + // Ignore enemy armor by SPELL_AURA_MOD_TARGET_ARMOR_PCT + armor *= 1.0f - GetTotalAuraModifier(SPELL_AURA_MOD_TARGET_ARMOR_PCT) / 100.0f; + + if (armor < 0.0f) + armor = 0.0f; float levelModifier = getLevel(); - if ( levelModifier > 59 ) + if (levelModifier > 59) levelModifier = levelModifier + (4.5f * (levelModifier-59)); float tmpvalue = 0.1f * armor / (8.5f * levelModifier + 40); tmpvalue = tmpvalue/(1.0f + tmpvalue); - if(tmpvalue < 0.0f) + if (tmpvalue < 0.0f) tmpvalue = 0.0f; - if(tmpvalue > 0.75f) + if (tmpvalue > 0.75f) tmpvalue = 0.75f; + newdamage = uint32(damage - (damage * tmpvalue)); return (newdamage > 1) ? newdamage : 1; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5b5dad3e2..2f244a12e 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 "8453" + #define REVISION_NR "8454" #endif // __REVISION_NR_H__