aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-02-21 13:15:52 +0100
committerShauren <shauren.trinity@gmail.com>2024-02-21 13:15:52 +0100
commitccafdfa93c0405dd9d89a4c3b8853e6c7a083344 (patch)
treeb7429f830da5df209f0a6d3a52968d90275a3923
parent08664aa07f911c84d9c6ecae56f67401faf90016 (diff)
Core/Spells: Fixed incorrect switch logic in Unit::SpellCritChanceDone
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 4d9393f4ee8..f879b65074e 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -7012,6 +7012,11 @@ float Unit::SpellCritChanceDone(SpellInfo const* spellInfo, SpellSchoolMask scho
case SPELL_DAMAGE_CLASS_NONE:
case SPELL_DAMAGE_CLASS_MAGIC:
{
+ auto getPhysicalCritChance = [&]
+ {
+ return GetUnitCriticalChanceDone(attackType) + GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL, schoolMask);
+ };
+
auto getMagicCritChance = [&]
{
if (IsPlayer())
@@ -7020,18 +7025,11 @@ float Unit::SpellCritChanceDone(SpellInfo const* spellInfo, SpellSchoolMask scho
return m_baseSpellCritChance + GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL, schoolMask);
};
- switch (schoolMask & SPELL_SCHOOL_MASK_NORMAL)
- {
- case SPELL_SCHOOL_MASK_NORMAL: // physical only
- crit_chance = GetUnitCriticalChanceDone(attackType);
- break;
- case 0: // spell only
- crit_chance = getMagicCritChance();
- break;
- default: // mix of physical and magic
- crit_chance = std::max(getMagicCritChance(), GetUnitCriticalChanceDone(attackType));
- break;
- }
+ if (schoolMask & SPELL_SCHOOL_MASK_NORMAL)
+ crit_chance = std::max(crit_chance, getPhysicalCritChance());
+
+ if (schoolMask & ~SPELL_SCHOOL_MASK_NORMAL)
+ crit_chance = std::max(crit_chance, getMagicCritChance());
break;
}
case SPELL_DAMAGE_CLASS_MELEE: