void Player::UpdateArmorPenetration() { m_armorPenetrationPct = GetRatingBonusValue(CR_ARMOR_PENETRATION); AuraList const& armorAuras = GetAurasByType(SPELL_AURA_MOD_TARGET_ARMOR_PCT); for(AuraList::const_iterator itr = armorAuras.begin(); itr != armorAuras.end(); ++itr) { // affects all weapons if((*itr)->GetSpellProto()->EquippedItemClass == -1) { m_armorPenetrationPct += (*itr)->GetModifier()->m_amount; continue; } // dependent on weapon class for(uint8 i = 0; i < MAX_ATTACK; ++i) { Item *weapon = GetWeaponForAttack(WeaponAttackType(i)); if(weapon && weapon->IsFitToSpellRequirements((*itr)->GetSpellProto())) { m_armorPenetrationPct += (*itr)->GetModifier()->m_amount; break; } } } }
void Player::UpdateArmorPenetration(int32 amount) { AuraList const& expAuras = GetAurasByType(SPELL_AURA_MOD_ARMOR_PENETRATION_PCT); for(AuraList::const_iterator itr = expAuras.begin(); itr != expAuras.end(); ++itr) { // item neutral spell if((*itr)->GetSpellProto()->EquippedItemClass == -1) { amount *= ((*itr)->GetAmount() + 100.0f) / 100.0f; continue; } // item dependent spell - check curent weapons for(int i = 0; i < MAX_ATTACK; ++i) { Item *weapon = GetWeaponForAttack(WeaponAttackType(i)); if(weapon && weapon->IsFitToSpellRequirements((*itr)->GetSpellProto())) { amount *= ((*itr)->GetAmount() + 100.0f) / 100.0f; break; } } } // Store Rating Value SetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + CR_ARMOR_PENETRATION, amount); }