diff --git a/Maple2.Server.Game/Manager/BuffManager.cs b/Maple2.Server.Game/Manager/BuffManager.cs index 83cc77e1..f9e378c2 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 a746626e..e130dcc8 100644 --- a/Maple2.Server.Game/Util/DamageCalculator.cs +++ b/Maple2.Server.Game/Util/DamageCalculator.cs @@ -74,14 +74,13 @@ 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)); - } + 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;