void Player::UpdatePvPPowerPercentage() { float value = GetRatingBonusValue(CR_PVP_POWER); value = value < 0.0f ? 0.0f : value; float damage_value = value; float heal_value = value; switch (GetSpecializationId(GetActiveSpec())) { // All other specializations and classes (including tanking) receive a 40% bonus to healing from PvP Power. case SPEC_MAGE_ARCANE: case SPEC_MAGE_FIRE: case SPEC_MAGE_FROST: case SPEC_PALADIN_PROTECTION: case SPEC_WARRIOR_ARMS: case SPEC_WARRIOR_FURY: case SPEC_WARRIOR_PROTECTION: case SPEC_DRUID_GUARDIAN: case SPEC_DK_BLOOD: case SPEC_DK_FROST: case SPEC_DK_UNHOLY: case SPEC_HUNTER_BEASTMASTER: case SPEC_HUNTER_MARKSMAN: case SPEC_HUNTER_SURVIVAL: case SPEC_ROGUE_ASSASSINATION: case SPEC_ROGUE_COMBAT: case SPEC_ROGUE_SUBTLETY: case SPEC_WARLOCK_AFFLICTION: case SPEC_WARLOCK_DEMONOLOGY: case SPEC_WARLOCK_DESTRUCTION: case SPEC_MONK_BREWMASTER: heal_value *= 0.4f; break; // Healing specializations receive a 100% bonus to healing from PvP Power. case SPEC_PALADIN_HOLY: case SPEC_PRIEST_DISCIPLINE: case SPEC_PRIEST_HOLY: case SPEC_SHAMAN_RESTORATION: case SPEC_DRUID_RESTORATION: case SPEC_MONK_MISTWEAVER: damage_value = 0.0f; break; // Damage specializations for Druids, Monks, Paladins, Priests, and Shaman receive a 70% bonus to healing from PvP Power. default: heal_value *= 0.7f; break; } SetFloatValue(PLAYER_FIELD_PVP_POWER_DAMAGE, damage_value); SetFloatValue(PLAYER_FIELD_PVP_POWER_HEALING, heal_value); }
void Player::UpdateMastery() { if (!IsMasteryLearned()) { SetFloatValue(PLAYER_MASTERY, 0.0f); return; } TalentTabEntry const* talentTab = sTalentTabStore.LookupEntry(GetPrimaryTalentTree(GetActiveSpec())); if (!talentTab) { SetFloatValue(PLAYER_MASTERY, 0.0f); return; } float value = GetTotalAuraModifier(SPELL_AURA_MASTERY); value += GetRatingBonusValue(CR_MASTERY); SetFloatValue(PLAYER_MASTERY, value); for (uint32 i = 0; i < MAX_MASTERY_SPELLS; ++i) { if (!talentTab->MasterySpells[i]) continue; if (Aura* aura = GetAura(talentTab->MasterySpells[i])) { for (uint32 j = 0; j < MAX_SPELL_EFFECTS; ++j) { if (!aura->HasEffect(j)) continue; if (aura->GetSpellInfo()->Effects[j].BasePoints == 0) aura->GetEffect(j)->ChangeAmount(int32(value * aura->GetSpellInfo()->Effects[j].BonusMultiplier)); } } } }