aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp13
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp13
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
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;