From 39df5e9ead83783585590241aa21014e550f68a2 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 6 Nov 2016 00:14:50 +0100 Subject: [PATCH] Core/Stats: Updated handling crit chance - removed school specific crit chances --- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Entities/Player/Player.h | 3 +-- src/server/game/Entities/Unit/StatSystem.cpp | 23 ++++--------------- src/server/game/Entities/Unit/Unit.cpp | 6 ----- .../game/Spells/Auras/SpellAuraDefines.h | 2 +- .../game/Spells/Auras/SpellAuraEffects.cpp | 21 +++-------------- .../game/Spells/Auras/SpellAuraEffects.h | 1 - 7 files changed, 10 insertions(+), 48 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f64078f811..38675cf6b5 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5086,7 +5086,7 @@ void Player::UpdateRating(CombatRating cr) break; case CR_CRIT_SPELL: if (affectStats) - UpdateAllSpellCritChances(); + UpdateSpellCritChance(); break; case CR_MULTISTRIKE: case CR_READINESS: diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 068d253610..97fe7df32c 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1966,8 +1966,7 @@ class TC_GAME_API Player : public Unit, public GridObject void UpdateRangedHitChances(); void UpdateSpellHitChances(); - void UpdateAllSpellCritChances(); - void UpdateSpellCritChance(uint32 school); + void UpdateSpellCritChance(); void UpdateArmorPenetration(int32 amount); void UpdateExpertise(WeaponAttackType attType); void ApplyManaRegenBonus(int32 amount, bool apply); diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index b9b0dca17c..04124e71c6 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -114,7 +114,7 @@ bool Player::UpdateStats(Stats stat) UpdateMaxHealth(); break; case STAT_INTELLECT: - UpdateAllSpellCritChances(); + UpdateSpellCritChance(); UpdateArmor(); //SPELL_AURA_MOD_RESISTANCE_OF_INTELLECT_PERCENT, only armor currently break; default: @@ -201,7 +201,7 @@ bool Player::UpdateAllStats() UpdateAllRatings(); UpdateAllCritPercentages(); - UpdateAllSpellCritChances(); + UpdateSpellCritChance(); UpdateBlockPercentage(); UpdateParryPercentage(); UpdateDodgePercentage(); @@ -636,27 +636,18 @@ void Player::UpdateDodgePercentage() SetStatFloatValue(PLAYER_DODGE_PERCENTAGE, value); } -void Player::UpdateSpellCritChance(uint32 school) +void Player::UpdateSpellCritChance() { - // For normal school set zero crit chance - if (school == SPELL_SCHOOL_NORMAL) - { - SetFloatValue(PLAYER_SPELL_CRIT_PERCENTAGE1, 0.0f); - return; - } - // For others recalculate it from: float crit = 5.0f; // Increase crit from SPELL_AURA_MOD_SPELL_CRIT_CHANCE crit += GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_CRIT_CHANCE); // Increase crit from SPELL_AURA_MOD_CRIT_PCT crit += GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_PCT); - // Increase crit by school from SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL - crit += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL, 1<GetTarget(); if (target->GetTypeId() == TYPEID_PLAYER) - target->ToPlayer()->UpdateAllSpellCritChances(); + target->ToPlayer()->UpdateSpellCritChance(); else target->m_baseSpellCritChance += (apply) ? GetAmount():-GetAmount(); } -void AuraEffect::HandleModSpellCritChanceShool(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const -{ - if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) - return; - - Unit* target = aurApp->GetTarget(); - - if (target->GetTypeId() != TYPEID_PLAYER) - return; - - for (int school = SPELL_SCHOOL_NORMAL; school < MAX_SPELL_SCHOOL; ++school) - if (GetMiscValue() & (1<ToPlayer()->UpdateSpellCritChance(school); -} - void AuraEffect::HandleAuraModCritPct(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) @@ -4366,7 +4351,7 @@ void AuraEffect::HandleAuraModCritPct(AuraApplication const* aurApp, uint8 mode, target->ToPlayer()->HandleBaseModValue(RANGED_CRIT_PERCENTAGE, FLAT_MOD, float (GetAmount()), apply); // included in Player::UpdateSpellCritChance calculation - target->ToPlayer()->UpdateAllSpellCritChances(); + target->ToPlayer()->UpdateSpellCritChance(); } /********************************/ diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 04597a7609..c6da3bf57f 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -258,7 +258,6 @@ class TC_GAME_API AuraEffect void HandleModHitChance(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModSpellHitChance(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModSpellCritChance(AuraApplication const* aurApp, uint8 mode, bool apply) const; - void HandleModSpellCritChanceShool(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModCritPct(AuraApplication const* aurApp, uint8 mode, bool apply) const; // attack speed void HandleModCastingSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;