From 15dcefa71ab298781d920392e6dbb9b2ad7f0ea2 Mon Sep 17 00:00:00 2001 From: Bradyn Glines Date: Thu, 15 Jan 2026 00:40:07 -0700 Subject: [PATCH 1/2] Adjust compulsion buff effect --- Maple2.Server.Game/Manager/BuffManager.cs | 2 +- Maple2.Server.Game/Util/DamageCalculator.cs | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/Maple2.Server.Game/Manager/BuffManager.cs b/Maple2.Server.Game/Manager/BuffManager.cs index 83cc77e16..f9e378c22 100644 --- a/Maple2.Server.Game/Manager/BuffManager.cs +++ b/Maple2.Server.Game/Manager/BuffManager.cs @@ -304,7 +304,7 @@ public float TotalCompulsionRate(BuffCompulsionEventType type, int skillId = 0) } return skillId == 0 ? nestedCompulsionDic.Values.Sum(compulsion => compulsion.Rate) : - nestedCompulsionDic.Values.Where(compulsion => compulsion.SkillIds.Contains(skillId)).Sum(compulsion => compulsion.Rate); + nestedCompulsionDic.Values.Where(compulsion => compulsion.SkillIds.Contains(skillId) || compulsion.SkillIds.Length == 0).Sum(compulsion => compulsion.Rate); } public float GetResistance(BasicAttribute attribute) { diff --git a/Maple2.Server.Game/Util/DamageCalculator.cs b/Maple2.Server.Game/Util/DamageCalculator.cs index a746626e4..9125d80c0 100644 --- a/Maple2.Server.Game/Util/DamageCalculator.cs +++ b/Maple2.Server.Game/Util/DamageCalculator.cs @@ -74,14 +74,12 @@ public static (DamageType, long) CalculateDamage(IActor caster, IActor target, D damageBonus += -target.Buffs.GetResistance(BasicAttribute.AttackSpeed) * caster.Stats.Values[BasicAttribute.AttackSpeed].Total; // Check for crit and get crit damage - if (property.CanCrit) { - if (property.CompulsionTypes.Contains(CompulsionType.Critical)) { - damageType = DamageType.Critical; - } + if (property.CanCrit && property.CompulsionTypes.Contains(CompulsionType.Critical)) { + damageType = DamageType.Critical; + } - if (damageType != DamageType.Critical) { - damageType = caster.Stats.GetCriticalRate(target.Stats.Values[BasicAttribute.CriticalEvasion].Total, caster.Buffs.TotalCompulsionRate(BuffCompulsionEventType.CritChanceOverride, property.SkillId)); - } + if (damageType != DamageType.Critical) { + damageType = caster.Stats.GetCriticalRate(target.Stats.Values[BasicAttribute.CriticalEvasion].Total, caster.Buffs.TotalCompulsionRate(BuffCompulsionEventType.CritChanceOverride, property.SkillId)); } damageBonus *= damageType == DamageType.Critical ? caster.Stats.GetCriticalDamage(target.Buffs.GetResistance(BasicAttribute.CriticalDamage)) : 1; From 2d0bfe9cb6ad9a69cea87eed4aa4f2b424733bb5 Mon Sep 17 00:00:00 2001 From: Bradyn Glines Date: Thu, 15 Jan 2026 01:07:07 -0700 Subject: [PATCH 2/2] Apply crit at the right time --- Maple2.Server.Game/Util/DamageCalculator.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Maple2.Server.Game/Util/DamageCalculator.cs b/Maple2.Server.Game/Util/DamageCalculator.cs index 9125d80c0..e130dcc88 100644 --- a/Maple2.Server.Game/Util/DamageCalculator.cs +++ b/Maple2.Server.Game/Util/DamageCalculator.cs @@ -78,8 +78,9 @@ public static (DamageType, long) CalculateDamage(IActor caster, IActor target, D damageType = DamageType.Critical; } - if (damageType != DamageType.Critical) { - damageType = caster.Stats.GetCriticalRate(target.Stats.Values[BasicAttribute.CriticalEvasion].Total, caster.Buffs.TotalCompulsionRate(BuffCompulsionEventType.CritChanceOverride, property.SkillId)); + float critChanceOverrideRate = caster.Buffs.TotalCompulsionRate(BuffCompulsionEventType.CritChanceOverride, property.SkillId); + if (damageType != DamageType.Critical && critChanceOverrideRate > 0f) { + damageType = caster.Stats.GetCriticalRate(target.Stats.Values[BasicAttribute.CriticalEvasion].Total, critChanceOverrideRate); } damageBonus *= damageType == DamageType.Critical ? caster.Stats.GetCriticalDamage(target.Buffs.GetResistance(BasicAttribute.CriticalDamage)) : 1;