[8454] Implement aura SPELL_AURA_MOD_TARGET_ARMOR_PCT.

This fix work stance 2457, talent 12284/13709 and ranks, partly talent 61154 and ranks.

Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
Lutik 2009-09-02 18:43:25 +04:00 committed by VladimirMangos
parent 2e09244e57
commit ab9b738e54
3 changed files with 12 additions and 6 deletions

View file

@ -330,7 +330,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
&Aura::HandleNoImmediateEffect, //277 SPELL_AURA_MOD_MAX_AFFECTED_TARGETS Use SpellClassMask for spell select &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, //278 SPELL_AURA_MOD_DISARM_RANGED disarm ranged weapon
&Aura::HandleNULL, //279 visual effects? 58836 and 57507 &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::HandleNULL, //281 SPELL_AURA_MOD_HONOR_GAIN
&Aura::HandleAuraIncreaseBaseHealthPercent, //282 SPELL_AURA_INCREASE_BASE_HEALTH_PERCENT &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

View file

@ -1565,6 +1565,7 @@ uint32 Unit::CalcArmorReducedDamage(Unit* pVictim, const uint32 damage)
{ {
uint32 newdamage = 0; uint32 newdamage = 0;
float armor = pVictim->GetArmor(); float armor = pVictim->GetArmor();
// Ignore enemy armor by SPELL_AURA_MOD_TARGET_RESISTANCE aura // Ignore enemy armor by SPELL_AURA_MOD_TARGET_RESISTANCE aura
armor += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, SPELL_SCHOOL_MASK_NORMAL); 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) if (GetTypeId()==TYPEID_PLAYER)
armor *= 1.0f - ((Player*)this)->GetRatingBonusValue(CR_ARMOR_PENETRATION) / 100.0f; 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(); float levelModifier = getLevel();
if ( levelModifier > 59 ) if (levelModifier > 59)
levelModifier = levelModifier + (4.5f * (levelModifier-59)); levelModifier = levelModifier + (4.5f * (levelModifier-59));
float tmpvalue = 0.1f * armor / (8.5f * levelModifier + 40); float tmpvalue = 0.1f * armor / (8.5f * levelModifier + 40);
tmpvalue = tmpvalue/(1.0f + tmpvalue); tmpvalue = tmpvalue/(1.0f + tmpvalue);
if(tmpvalue < 0.0f) if (tmpvalue < 0.0f)
tmpvalue = 0.0f; tmpvalue = 0.0f;
if(tmpvalue > 0.75f) if (tmpvalue > 0.75f)
tmpvalue = 0.75f; tmpvalue = 0.75f;
newdamage = uint32(damage - (damage * tmpvalue)); newdamage = uint32(damage - (damage * tmpvalue));
return (newdamage > 1) ? newdamage : 1; return (newdamage > 1) ? newdamage : 1;

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "8453" #define REVISION_NR "8454"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__