diff options
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 |
5 files changed, 24 insertions, 8 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 072f53f7d97..18116e0ef99 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -163,10 +163,6 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this) m_session = session; - m_modMeleeHitChance = 7.5f; - m_modRangedHitChance = 7.5f; - m_modSpellHitChance = 15.0f; - m_ingametime = 0; m_sharedQuestId = 0; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 936756c80bf..56f42fc6c98 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2058,6 +2058,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> void UpdateMeleeHitChances(); void UpdateRangedHitChances(); void UpdateSpellHitChances(); + void UpdateUIHitModifier(); void UpdateAllSpellCritChances(); void UpdateSpellCritChance(SpellSchools school); diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index cc247e09f78..cdd4777d6ce 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -878,20 +878,27 @@ void Player::UpdateArmorPenetration(int32 amount) void Player::UpdateMeleeHitChances() { - m_modMeleeHitChance = 7.5f + GetRatingBonusValue(CR_HIT_MELEE); + m_modMeleeHitChance = GetRatingBonusValue(CR_HIT_MELEE); } void Player::UpdateRangedHitChances() { - m_modRangedHitChance = 7.5f + GetRatingBonusValue(CR_HIT_RANGED); + m_modRangedHitChance = GetRatingBonusValue(CR_HIT_RANGED); } void Player::UpdateSpellHitChances() { - m_modSpellHitChance = 15.0f + (float)GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE); + m_modSpellHitChance = (float)GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::UiSpellHitModifier), m_modSpellHitChance); m_modSpellHitChance += GetRatingBonusValue(CR_HIT_SPELL); } +void Player::UpdateUIHitModifier() +{ + float modifier = (float)GetTotalAuraModifier(SPELL_AURA_MOD_HIT_CHANCE); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::UiHitModifier), modifier); +} + void Player::UpdateExpertise(WeaponAttackType attack) { if (attack == RANGED_ATTACK) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index acf008b281f..2c454ee55d9 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -123,7 +123,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleAuraModBlockPercent, // 51 SPELL_AURA_MOD_BLOCK_PERCENT &AuraEffect::HandleAuraModWeaponCritPercent, // 52 SPELL_AURA_MOD_WEAPON_CRIT_PERCENT &AuraEffect::HandleNoImmediateEffect, // 53 SPELL_AURA_PERIODIC_LEECH implemented in AuraEffect::PeriodicTick - &AuraEffect::HandleNoImmediateEffect, // 54 SPELL_AURA_MOD_HIT_CHANCE implemented in Unit::MeleeSpellMissChance + &AuraEffect::HandleModHitChance, // 54 SPELL_AURA_MOD_HIT_CHANCE implemented in Unit::MeleeSpellMissChance, the aura effect handler only sets the UpdateField &AuraEffect::HandleModSpellHitChance, // 55 SPELL_AURA_MOD_SPELL_HIT_CHANCE &AuraEffect::HandleAuraTransform, // 56 SPELL_AURA_TRANSFORM &AuraEffect::HandleModSpellCritChance, // 57 SPELL_AURA_MOD_SPELL_CRIT_CHANCE @@ -4278,6 +4278,17 @@ void AuraEffect::HandleAuraModWeaponCritPercent(AuraApplication const* aurApp, u target->UpdateAllWeaponDependentCritAuras(); } +void AuraEffect::HandleModHitChance(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) + target->ToPlayer()->UpdateUIHitModifier(); +} + void AuraEffect::HandleModSpellHitChance(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 1bb46abe8b8..b7b964d1d48 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -271,6 +271,7 @@ class TC_GAME_API AuraEffect void HandleAuraModBlockPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModRegenInterrupt(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModWeaponCritPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const; + 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 HandleAuraModCritPct(AuraApplication const* aurApp, uint8 mode, bool apply) const; |