diff --git a/OshimaModules/Effects/SkillEffects/施加概率负面.cs b/OshimaModules/Effects/SkillEffects/施加概率负面.cs index f6420e5..c083147 100644 --- a/OshimaModules/Effects/SkillEffects/施加概率负面.cs +++ b/OshimaModules/Effects/SkillEffects/施加概率负面.cs @@ -9,7 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"{ActualProbability * 100:0.##}% 概率对{Skill.TargetDescription()}造成{GetEffectTypeName(_effectType)} {持续时间}。{(_description != "" ? _description : "")}"; + public override string Description + { + get + { + SetDescription(); + return $"{ActualProbability * 100:0.##}% 概率对{Skill.TargetDescription()}造成{GetEffectTypeName(_effectType)} {持续时间}。{(_description != "" ? _description : "")}"; + } + } public override EffectType EffectType => _effectType; public override DispelledType DispelledType => _dispelledType; @@ -17,7 +24,6 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects private string 持续时间 => _durative && _duration > 0 ? $"{实际持续时间:0.##}" + $" {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? 实际持续时间 + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}"); private double 实际持续时间 => _durative && _duration > 0 ? _duration + _levelGrowth * (Level - 1) : (!_durative && _durationTurn > 0 ? _durationTurn + _levelGrowth * (Level - 1) : 0); private readonly EffectType _effectType; - private readonly DispelledType _dispelledType = DispelledType.Weak; private readonly bool _durative; private readonly double _duration; private readonly int _durationTurn; @@ -25,7 +31,8 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects private readonly double _probability; private readonly double _probabilityLevelGrowth; private readonly object[] _args; - private readonly string _description = ""; + private DispelledType _dispelledType = DispelledType.Weak; + private string _description = ""; public 施加概率负面(Skill skill, EffectType effectType, bool durative = false, double duration = 0, int durationTurn = 1, double levelGrowth = 0, double probability = 0, double probabilityLevelGrowth = 0, params object[] args) : base(skill) { @@ -38,83 +45,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects _probability = probability; _probabilityLevelGrowth = probabilityLevelGrowth; _args = args; - switch (_effectType) - { - case EffectType.Silence: - _dispelledType = DispelledType.Weak; - _description = "封技:不能使用技能(魔法、战技和爆发技),并解除当前施法。"; - break; - case EffectType.Confusion: - _dispelledType = DispelledType.Strong; - _description = "混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。"; - break; - case EffectType.Taunt: - _dispelledType = DispelledType.Strong; - _description = "愤怒:进入行动受限状态,失控并随机行动,行动回合内仅能对嘲讽者发起普通攻击。"; - break; - case EffectType.Delay: - _dispelledType = DispelledType.Weak; - _description = "迟滞:延长普通攻击和技能的硬直时间、当前行动等待时间。"; - break; - case EffectType.Stun: - _dispelledType = DispelledType.Strong; - _description = "眩晕:进入完全行动不能状态。"; - break; - case EffectType.Freeze: - _dispelledType = DispelledType.Strong; - _description = "冻结:进入完全行动不能状态。"; - break; - case EffectType.Petrify: - _dispelledType = DispelledType.Strong; - _description = "石化:进入完全行动不能状态。"; - break; - case EffectType.Vulnerable: - DamageType damageType = DamageType.Magical; - if (_args.Length > 0 && _args[0] is DamageType dt) - { - damageType = dt; - } - double exDamagePercent = 0; - if (_args.Length > 1 && _args[1] is double percent) - { - exDamagePercent = percent; - } - if (exDamagePercent > 0) - { - _dispelledType = DispelledType.Weak; - _description = $"易伤:额外受到 {exDamagePercent * 100:0.##}% {CharacterSet.GetDamageTypeName(damageType)}。"; - } - break; - case EffectType.Bleed: - _dispelledType = DispelledType.Strong; - bool isPercentage = false; - double durationDamage = 0; - double durationDamagePercent = 0; - if (_args.Length > 0 && _args[0] is bool isPerc) - { - isPercentage = isPerc; - } - if (_args.Length > 1 && _args[1] is double durDamage) - { - durationDamage = durDamage; - } - if (_args.Length > 2 && _args[2] is double durDamagePercent) - { - durationDamagePercent = durDamagePercent; - } - if (isPercentage && durationDamagePercent > 0 || !isPercentage && durationDamage > 0) - { - string damageString = isPercentage ? $"流失 {durationDamagePercent * 100:0.##}% 当前生命值" : $"流失 {durationDamage:0.##} 点生命值"; - _description = $"气绝:进入行动受限状态并每{GameplayEquilibriumConstant.InGameTime}{damageString},此效果不会导致角色死亡。"; - } - break; - case EffectType.Cripple: - _dispelledType = DispelledType.Strong; - _description = "战斗不能:无法普通攻击和使用技能(魔法、战技和爆发技)。"; - break; - default: - break; - } + SetDescription(); } public override void OnSkillCasted(Character caster, List targets, Dictionary others) @@ -176,6 +107,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects bool isPercentage = false; double durationDamage = 0; double durationDamagePercent = 0; + double durationDamageLevelGrowth = 0; if (_args.Length > 0 && _args[0] is bool isPerc) { isPercentage = isPerc; @@ -188,8 +120,14 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects { durationDamagePercent = durDamagePercent; } + if (_args.Length > 3 && _args[3] is double durDamageLevelGrowth) + { + durationDamageLevelGrowth = durDamageLevelGrowth; + } if (isPercentage && durationDamagePercent > 0 || !isPercentage && durationDamage > 0) { + if (Level > 0) durationDamage += durationDamageLevelGrowth * (Level - 1); + if (Level > 0) durationDamagePercent += durationDamageLevelGrowth * (Level - 1); string damageString = isPercentage ? $"流失 {durationDamagePercent * 100:0.##}% 当前生命值" : $"流失 {durationDamage:0.##} 点生命值"; WriteLine($"[ {caster} ] 对 [ {target} ] 造成了气绝! [ {target} ] 进入行动受限状态且每{GameplayEquilibriumConstant.InGameTime}{damageString}!持续时间:{持续时间}!"); e = new 气绝(Skill, target, caster, _durative, duration, durationTurn, isPercentage, durationDamage, durationDamagePercent); @@ -211,6 +149,94 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects } } + private void SetDescription() + { + switch (_effectType) + { + case EffectType.Silence: + _dispelledType = DispelledType.Weak; + _description = "封技:不能使用技能(魔法、战技和爆发技),并解除当前施法。"; + break; + case EffectType.Confusion: + _dispelledType = DispelledType.Strong; + _description = "混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。"; + break; + case EffectType.Taunt: + _dispelledType = DispelledType.Strong; + _description = "愤怒:进入行动受限状态,失控并随机行动,行动回合内仅能对嘲讽者发起普通攻击。"; + break; + case EffectType.Delay: + _dispelledType = DispelledType.Weak; + _description = "迟滞:延长普通攻击和技能的硬直时间、当前行动等待时间。"; + break; + case EffectType.Stun: + _dispelledType = DispelledType.Strong; + _description = "眩晕:进入完全行动不能状态。"; + break; + case EffectType.Freeze: + _dispelledType = DispelledType.Strong; + _description = "冻结:进入完全行动不能状态。"; + break; + case EffectType.Petrify: + _dispelledType = DispelledType.Strong; + _description = "石化:进入完全行动不能状态。"; + break; + case EffectType.Vulnerable: + DamageType damageType = DamageType.Magical; + if (_args.Length > 0 && _args[0] is DamageType dt) + { + damageType = dt; + } + double exDamagePercent = 0; + if (_args.Length > 1 && _args[1] is double percent) + { + exDamagePercent = percent; + } + if (exDamagePercent > 0) + { + _dispelledType = DispelledType.Weak; + _description = $"易伤:额外受到 {exDamagePercent * 100:0.##}% {CharacterSet.GetDamageTypeName(damageType)}。"; + } + break; + case EffectType.Bleed: + _dispelledType = DispelledType.Strong; + bool isPercentage = false; + double durationDamage = 0; + double durationDamagePercent = 0; + double durationDamageLevelGrowth = 0; + if (_args.Length > 0 && _args[0] is bool isPerc) + { + isPercentage = isPerc; + } + if (_args.Length > 1 && _args[1] is double durDamage) + { + durationDamage = durDamage; + } + if (_args.Length > 2 && _args[2] is double durDamagePercent) + { + durationDamagePercent = durDamagePercent; + } + if (_args.Length > 3 && _args[3] is double durDamageLevelGrowth) + { + durationDamageLevelGrowth = durDamageLevelGrowth; + } + if (isPercentage && durationDamagePercent > 0 || !isPercentage && durationDamage > 0) + { + if (Level > 0) durationDamage += durationDamageLevelGrowth * (Level - 1); + if (Level > 0) durationDamagePercent += durationDamageLevelGrowth * (Level - 1); + string damageString = isPercentage ? $"流失 {durationDamagePercent * 100:0.##}% 当前生命值" : $"流失 {durationDamage:0.##} 点生命值"; + _description = $"气绝:进入行动受限状态并每{GameplayEquilibriumConstant.InGameTime}{damageString},此效果不会导致角色死亡。"; + } + break; + case EffectType.Cripple: + _dispelledType = DispelledType.Strong; + _description = "战斗不能:无法普通攻击和使用技能(魔法、战技和爆发技)。"; + break; + default: + break; + } + } + private static string GetEffectTypeName(EffectType type) { return type switch diff --git a/OshimaModules/Skills/魔法/地狱之门.cs b/OshimaModules/Skills/魔法/地狱之门.cs index 885ba1a..08159fe 100644 --- a/OshimaModules/Skills/魔法/地狱之门.cs +++ b/OshimaModules/Skills/魔法/地狱之门.cs @@ -32,8 +32,8 @@ namespace Oshima.FunGame.OshimaModules.Skills public 地狱之门(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 纯数值伤害(this, 55, 25, DamageType.Magical)); - Effects.Add(new 施加概率负面(this, EffectType.Bleed, true, 3, 0, 0.5, 0.24, 0.08, false, 85.0)); + Effects.Add(new 纯数值伤害(this, 75, 15, DamageType.Magical)); + Effects.Add(new 施加概率负面(this, EffectType.Bleed, true, 3, 0, 0.5, 0.45, 0.05, false, 85.0)); } } } diff --git a/OshimaModules/Skills/魔法/导力停止.cs b/OshimaModules/Skills/魔法/导力停止.cs index 59ef943..ed24665 100644 --- a/OshimaModules/Skills/魔法/导力停止.cs +++ b/OshimaModules/Skills/魔法/导力停止.cs @@ -19,7 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public 导力停止(Character? character = null) : base(SkillType.Magic, character) { Effects.Add(new 纯数值伤害(this, 45, 20, DamageType.Magical)); - Effects.Add(new 施加概率负面(this, EffectType.Silence, true, 8, 0, 1.2, 0.24, 0.08)); + Effects.Add(new 施加概率负面(this, EffectType.Silence, true, 8, 0, 1.2, 0.45, 0.05)); } } } diff --git a/OshimaModules/Skills/魔法/根源屏障.cs b/OshimaModules/Skills/魔法/根源屏障.cs index 5c4bfa2..f4c1a7d 100644 --- a/OshimaModules/Skills/魔法/根源屏障.cs +++ b/OshimaModules/Skills/魔法/根源屏障.cs @@ -40,10 +40,12 @@ namespace Oshima.FunGame.OshimaModules.Skills { return Level switch { + 3 => 2, + 4 => 2, 5 => 2, - 6 => 2, - 7 => 2, - 8 => 2, + 6 => 3, + 7 => 3, + 8 => 3, _ => 1 }; } diff --git a/OshimaModules/Skills/魔法/死亡咆哮.cs b/OshimaModules/Skills/魔法/死亡咆哮.cs index c12852a..7917da5 100644 --- a/OshimaModules/Skills/魔法/死亡咆哮.cs +++ b/OshimaModules/Skills/魔法/死亡咆哮.cs @@ -22,9 +22,9 @@ namespace Oshima.FunGame.OshimaModules.Skills { 4 => 2, 5 => 2, - 6 => 3, + 6 => 2, 7 => 3, - 8 => 4, + 8 => 3, _ => 1 }; } @@ -32,8 +32,8 @@ namespace Oshima.FunGame.OshimaModules.Skills public 死亡咆哮(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 纯数值伤害(this, 55, 25, DamageType.Magical)); - Effects.Add(new 施加概率负面(this, EffectType.Cripple, true, 3, 0, 1, 0.24, 0.08)); + Effects.Add(new 纯数值伤害(this, 70, 30, DamageType.Magical)); + Effects.Add(new 施加概率负面(this, EffectType.Cripple, true, 3, 0, 1, 0.45, 0.05)); } } } diff --git a/OshimaModules/Skills/魔法/等离子之波.cs b/OshimaModules/Skills/魔法/等离子之波.cs index e742255..76c2216 100644 --- a/OshimaModules/Skills/魔法/等离子之波.cs +++ b/OshimaModules/Skills/魔法/等离子之波.cs @@ -33,7 +33,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public 等离子之波(Character? character = null) : base(SkillType.Magic, character) { Effects.Add(new 纯数值伤害(this, 60, 20, DamageType.Magical)); - Effects.Add(new 施加概率负面(this, EffectType.Silence, false, 0, 2, 0, 0.24, 0.08)); + Effects.Add(new 施加概率负面(this, EffectType.Silence, false, 0, 2, 0, 0.45, 0.05)); } } } diff --git a/OshimaModules/Skills/魔法/钻石星尘.cs b/OshimaModules/Skills/魔法/钻石星尘.cs index 1482397..f365bf4 100644 --- a/OshimaModules/Skills/魔法/钻石星尘.cs +++ b/OshimaModules/Skills/魔法/钻石星尘.cs @@ -22,9 +22,9 @@ namespace Oshima.FunGame.OshimaModules.Skills { 4 => 2, 5 => 2, - 6 => 3, + 6 => 2, 7 => 3, - 8 => 4, + 8 => 3, _ => 1 }; } @@ -32,9 +32,9 @@ namespace Oshima.FunGame.OshimaModules.Skills public 钻石星尘(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 纯数值伤害(this, 65, 25, DamageType.Magical)); - Effects.Add(new 施加概率负面(this, EffectType.Freeze, false, 0, 2, 0, 0.24, 0.08)); - Effects.Add(new 施加概率负面(this, EffectType.Vulnerable, false, 0, 3, 0, 0.24, 0.08, DamageType.Magical, 0.3)); + Effects.Add(new 纯数值伤害(this, 60, 30, DamageType.Magical)); + Effects.Add(new 施加概率负面(this, EffectType.Freeze, false, 0, 2, 0, 0.45, 0.05)); + Effects.Add(new 施加概率负面(this, EffectType.Vulnerable, false, 0, 3, 0, 0.45, 0.05, DamageType.Magical, 0.3)); } } } diff --git a/OshimaModules/Skills/魔法/银色荆棘.cs b/OshimaModules/Skills/魔法/银色荆棘.cs index 2b0e522..9ca7ad2 100644 --- a/OshimaModules/Skills/魔法/银色荆棘.cs +++ b/OshimaModules/Skills/魔法/银色荆棘.cs @@ -32,7 +32,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public 银色荆棘(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 银色荆棘特效(this, false, 0, 2, 0, 0.24, 0.08)); + Effects.Add(new 银色荆棘特效(this, false, 0, 2, 0, 0.45, 0.05)); } } diff --git a/OshimaModules/Skills/魔法/鬼魅之痛.cs b/OshimaModules/Skills/魔法/鬼魅之痛.cs index ad753f7..17752a0 100644 --- a/OshimaModules/Skills/魔法/鬼魅之痛.cs +++ b/OshimaModules/Skills/魔法/鬼魅之痛.cs @@ -22,9 +22,9 @@ namespace Oshima.FunGame.OshimaModules.Skills { 4 => 2, 5 => 2, - 6 => 3, + 6 => 2, 7 => 3, - 8 => 4, + 8 => 3, _ => 1 }; } @@ -32,8 +32,8 @@ namespace Oshima.FunGame.OshimaModules.Skills public 鬼魅之痛(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 纯数值伤害(this, 60, 40, DamageType.Magical)); - Effects.Add(new 施加概率负面(this, EffectType.Stun, true, 6, 0, 0.7, 0.24, 0.08)); + Effects.Add(new 纯数值伤害(this, 65, 35, DamageType.Magical)); + Effects.Add(new 施加概率负面(this, EffectType.Stun, true, 6, 0, 0.7, 0.45, 0.05)); } } }