From 9784be7fced6ef58cfc98e3383543aec3cd727d6 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Fri, 26 Jul 2019 10:52:49 +0200 Subject: [PATCH] Core/Spells: removed miss chance cap for melee attacks --- src/server/game/Entities/Unit/StatSystem.cpp | 6 ++--- src/server/game/Entities/Unit/Unit.cpp | 15 +++++++----- .../game/Spells/Auras/SpellAuraEffects.cpp | 23 +------------------ .../game/Spells/Auras/SpellAuraEffects.h | 1 - 4 files changed, 12 insertions(+), 33 deletions(-) diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 74333a47df..a951bc6532 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -681,14 +681,12 @@ void Player::UpdateArmorPenetration(int32 amount) void Player::UpdateMeleeHitChances() { - m_modMeleeHitChance = (float)GetTotalAuraModifier(SPELL_AURA_MOD_HIT_CHANCE); - m_modMeleeHitChance += GetRatingBonusValue(CR_HIT_MELEE); + m_modMeleeHitChance = GetRatingBonusValue(CR_HIT_MELEE); } void Player::UpdateRangedHitChances() { - m_modRangedHitChance = (float)GetTotalAuraModifier(SPELL_AURA_MOD_HIT_CHANCE); - m_modRangedHitChance += GetRatingBonusValue(CR_HIT_RANGED); + m_modRangedHitChance = GetRatingBonusValue(CR_HIT_RANGED); } void Player::UpdateSpellHitChances() diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a49632e92d..b48904f0e7 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12749,12 +12749,15 @@ float Unit::MeleeSpellMissChance(Unit const* victim, WeaponAttackType attType, u else missChance -= m_modMeleeHitChance; - // Limit miss chance from 0 to 60% - if (missChance < 0.0f) - return 0.0f; - if (missChance > 60.0f) - return 60.0f; - return missChance; + // miss chance from auras after calculating skill based miss + missChance -= GetTotalAuraModifier(SPELL_AURA_MOD_HIT_CHANCE); + + if (attType == RANGED_ATTACK) + missChance -= victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE); + else + missChance -= victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE); + + return std::max(missChance, 0.f); } void Unit::OnPhaseChange() diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 348d678ea0..979acd7bf5 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -118,7 +118,7 @@ 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::HandleModHitChance, // 54 SPELL_AURA_MOD_HIT_CHANCE + &AuraEffect::HandleNoImmediateEffect, // 54 SPELL_AURA_MOD_HIT_CHANCE &AuraEffect::HandleModSpellHitChance, // 55 SPELL_AURA_MOD_SPELL_HIT_CHANCE &AuraEffect::HandleAuraTransform, // 56 SPELL_AURA_TRANSFORM &AuraEffect::HandleModSpellCritChance, // 57 SPELL_AURA_MOD_SPELL_CRIT_CHANCE @@ -3867,27 +3867,6 @@ void AuraEffect::HandleAuraModWeaponCritPercent(AuraApplication const* aurApp, u target->HandleBaseModValue(RANGED_CRIT_PERCENTAGE, FLAT_MOD, float(GetAmount()), apply); } -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(); - - // handle stack rules - if (target->GetTypeId() == TYPEID_PLAYER) - { - target->ToPlayer()->UpdateMeleeHitChances(); - target->ToPlayer()->UpdateRangedHitChances(); - } - else - { - float value = target->GetTotalAuraModifier(SPELL_AURA_MOD_HIT_CHANCE); - target->m_modMeleeHitChance = value; - target->m_modRangedHitChance = value; - } -} - 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 80359eb25c..c9d2f6dbeb 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -246,7 +246,6 @@ 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 HandleModSpellCritChanceShool(AuraApplication const* aurApp, uint8 mode, bool apply) const;