From 48be31d985150461d2d781eff54db6f873fd03bb Mon Sep 17 00:00:00 2001 From: milimoe Date: Wed, 15 Apr 2026 00:09:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E6=8A=80=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Effects/PassiveEffects/宫监手标记.cs | 2 +- .../Effects/SkillEffects/施加概率负面.cs | 2 +- .../Effects/SkillEffects/造成虚弱.cs | 2 +- OshimaModules/Items/Consumable/复苏药.cs | 12 -- OshimaModules/Models/FunGameConstant.cs | 2 +- OshimaModules/Modules/SkillModule.cs | 4 + OshimaModules/Skills/QuDuoduo/弱者猎手.cs | 2 +- OshimaModules/Skills/ShiYu/开宫.cs | 2 +- OshimaModules/Skills/Yang/咒怨洪流.cs | 2 +- OshimaModules/Skills/爆发技/光明之环.cs | 80 ++++++++++ OshimaModules/Skills/爆发技/圣星光旋.cs | 60 ++++++++ OshimaModules/Skills/爆发技/女王之怒.cs | 143 ++++++++++++++++++ OshimaModules/Skills/爆发技/裁决塔罗.cs | 92 +++++++++++ OshimaModules/Skills/魔法/圣灵术.cs | 12 -- OshimaModules/Skills/魔法/复苏术.cs | 12 -- OshimaModules/Skills/魔法/银色荆棘.cs | 2 +- 16 files changed, 387 insertions(+), 44 deletions(-) create mode 100644 OshimaModules/Skills/爆发技/光明之环.cs create mode 100644 OshimaModules/Skills/爆发技/圣星光旋.cs create mode 100644 OshimaModules/Skills/爆发技/女王之怒.cs create mode 100644 OshimaModules/Skills/爆发技/裁决塔罗.cs diff --git a/OshimaModules/Effects/PassiveEffects/宫监手标记.cs b/OshimaModules/Effects/PassiveEffects/宫监手标记.cs index 5ba9844..0d7ff36 100644 --- a/OshimaModules/Effects/PassiveEffects/宫监手标记.cs +++ b/OshimaModules/Effects/PassiveEffects/宫监手标记.cs @@ -53,7 +53,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects } } - public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List enemys, List teammates) + public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List allEnemys, List allTeammates, List enemys, List teammates) { if (skill is NormalAttack) { diff --git a/OshimaModules/Effects/SkillEffects/施加概率负面.cs b/OshimaModules/Effects/SkillEffects/施加概率负面.cs index 92e2ec7..62a01d7 100644 --- a/OshimaModules/Effects/SkillEffects/施加概率负面.cs +++ b/OshimaModules/Effects/SkillEffects/施加概率负面.cs @@ -230,7 +230,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects break; case EffectType.Confusion: _dispelledType = DispelledType.Strong; - _description = "混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。"; + _description = "混乱:进入行动受限状态,失控并随机行动,且所有指令均会在所有角色中随机选取目标。"; break; case EffectType.Taunt: _dispelledType = DispelledType.Strong; diff --git a/OshimaModules/Effects/SkillEffects/造成虚弱.cs b/OshimaModules/Effects/SkillEffects/造成虚弱.cs index f64f0ac..39008ba 100644 --- a/OshimaModules/Effects/SkillEffects/造成虚弱.cs +++ b/OshimaModules/Effects/SkillEffects/造成虚弱.cs @@ -16,7 +16,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects public override EffectType EffectType => EffectType.Weaken; public override bool ExemptDuration => true; - private string 虚弱时间 => _durative && _duration > 0 ? 实际虚弱时间 + $" {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? 实际虚弱时间 + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}"); + 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 bool _durative; private readonly double _duration; diff --git a/OshimaModules/Items/Consumable/复苏药.cs b/OshimaModules/Items/Consumable/复苏药.cs index 8c26216..0b6c246 100644 --- a/OshimaModules/Items/Consumable/复苏药.cs +++ b/OshimaModules/Items/Consumable/复苏药.cs @@ -186,17 +186,5 @@ namespace Oshima.FunGame.OshimaModules.Items })); } } - - public override List GetSelectableTargets(Character caster, List enemys, List teammates) - { - List targets = base.GetSelectableTargets(caster, enemys, teammates); - if (GamingQueue != null) - { - // 从死亡队列中获取队友,加入目标列表。 - Dictionary deaths = GamingQueue.GetIsTeammateDictionary(caster, GamingQueue.Eliminated); - targets = [.. targets.Union(deaths.Where(kv => kv.Value).Select(kv => kv.Key)).Distinct()]; - } - return targets; - } } } diff --git a/OshimaModules/Models/FunGameConstant.cs b/OshimaModules/Models/FunGameConstant.cs index b3d24a3..9f7716d 100644 --- a/OshimaModules/Models/FunGameConstant.cs +++ b/OshimaModules/Models/FunGameConstant.cs @@ -91,7 +91,7 @@ namespace Oshima.FunGame.OshimaModules.Models CommonPassiveSkills.AddRange([new 征服者(), new 致命节奏(), new 强攻(), new 电刑(), new 黑暗收割(), new 迅捷步法(), new 贪欲猎手()]); - CommonSuperSkills.AddRange([new 樱花无双击(), new 漆黑之牙()]); + CommonSuperSkills.AddRange([new 樱花无双击(), new 漆黑之牙(), new 女王之怒(), new 裁决塔罗(), new 光明之环(), new 圣星光旋()]); Magics.AddRange([new 冰霜攻击(), new 火之矢(), new 水之矢(), new 风之轮(), new 石之锤(), new 心灵之霞(), new 次元上升(), new 暗物质(), new 回复术(), new 治愈术(), new 复苏术(), new 圣灵术(), new 时间加速(), new 时间减速(), new 反魔法领域(), new 沉默十字(), new 虚弱领域(), new 混沌烙印(), new 凝胶稠絮(), diff --git a/OshimaModules/Modules/SkillModule.cs b/OshimaModules/Modules/SkillModule.cs index 2b84d87..d14b39d 100644 --- a/OshimaModules/Modules/SkillModule.cs +++ b/OshimaModules/Modules/SkillModule.cs @@ -143,6 +143,10 @@ namespace Oshima.FunGame.OshimaModules (long)SuperSkillID.神之因果 => new 神之因果(), (long)SuperSkillID.樱花无双击 => new 樱花无双击(), (long)SuperSkillID.漆黑之牙 => new 漆黑之牙(), + (long)SuperSkillID.女王之怒 => new 女王之怒(), + (long)SuperSkillID.裁决塔罗 => new 裁决塔罗(), + (long)SuperSkillID.光明之环 => new 光明之环(), + (long)SuperSkillID.圣星光旋 => new 圣星光旋(), (long)PassiveID.META马 => new META马(), (long)PassiveID.心灵之弦 => new 心灵之弦(), (long)PassiveID.蚀魂震击 => new 蚀魂震击(), diff --git a/OshimaModules/Skills/QuDuoduo/弱者猎手.cs b/OshimaModules/Skills/QuDuoduo/弱者猎手.cs index 59a44f7..8c2eff5 100644 --- a/OshimaModules/Skills/QuDuoduo/弱者猎手.cs +++ b/OshimaModules/Skills/QuDuoduo/弱者猎手.cs @@ -39,7 +39,7 @@ namespace Oshima.FunGame.OshimaModules.Skills return 0; } - public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List enemys, List teammates) + public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List allEnemys, List allTeammates, List enemys, List teammates) { 猎手标记.Clear(); AddHalfOfMe([.. enemys.Where(e => e.HP > 0).OrderBy(e => e.HP / e.MaxHP)]); diff --git a/OshimaModules/Skills/ShiYu/开宫.cs b/OshimaModules/Skills/ShiYu/开宫.cs index 26dbd15..775736f 100644 --- a/OshimaModules/Skills/ShiYu/开宫.cs +++ b/OshimaModules/Skills/ShiYu/开宫.cs @@ -28,7 +28,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override string Name => Skill.Name; public override string Description => $"{Skill.SkillOwner()}在游戏开始时进入 [ {nameof(长期监视)} ] 状态,时刻监视着场上的一举一动。当场上有角色死亡时,如果该角色死于技能,则{Skill.SkillOwner()}复制该技能获得使用权,持续 3 回合;如果该角色死于普通攻击,则{Skill.SkillOwner()}的普通攻击将转为魔法伤害并且无视闪避,持续 3 回合。" + $"接着,{Skill.SkillOwner()}给予击杀者 [ {nameof(时雨标记)} ]。{Skill.SkillOwner()}在造成魔法伤害时,会基于伤害值的 15% 治疗持有标记的友方角色;{Skill.SkillOwner()}与所有持有标记的友方角色对持有标记的敌方角色的伤害加成提升 25%,并且使持有标记的敌方角色在持续时间内的回合开始阶段,有 65% 概率陷入混乱。" + - $"混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。时雨标记持续 3 回合。"; + $"混乱:进入行动受限状态,失控并随机行动,且所有指令均会在所有角色中随机选取目标。时雨标记持续 3 回合。"; private bool 激活 = false; diff --git a/OshimaModules/Skills/Yang/咒怨洪流.cs b/OshimaModules/Skills/Yang/咒怨洪流.cs index ae62f1e..4e1a93c 100644 --- a/OshimaModules/Skills/Yang/咒怨洪流.cs +++ b/OshimaModules/Skills/Yang/咒怨洪流.cs @@ -78,7 +78,7 @@ namespace Oshima.FunGame.OshimaModules.Skills } } - public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List enemys, List teammates) + public override void AlterSelectListBeforeSelection(Character character, ISkill skill, List allEnemys, List allTeammates, List enemys, List teammates) { if (skill is NormalAttack && !本回合可附赠动作) { diff --git a/OshimaModules/Skills/爆发技/光明之环.cs b/OshimaModules/Skills/爆发技/光明之环.cs new file mode 100644 index 0000000..fbec3c9 --- /dev/null +++ b/OshimaModules/Skills/爆发技/光明之环.cs @@ -0,0 +1,80 @@ +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Common.Addon; +using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Model.PrefabricatedEntity; +using Oshima.FunGame.OshimaModules.Effects.OpenEffects; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; + +namespace Oshima.FunGame.OshimaModules.Skills +{ + public class 光明之环 : SoulboundSkill + { + public override long Id => (long)SuperSkillID.光明之环; + public override string Name => "光明之环"; + public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; + public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : ""; + public override double CD => 100; + public override double HardnessTime { get; set; } = 0; + public override bool CanSelectEnemy => false; + public override bool CanSelectTeammate => true; + public override bool CanSelectSelf => true; + public override bool SelectAllTeammates => true; + public override bool AllowSelectDead => true; + + public 光明之环(Character? character = null) : base(character) + { + Effects.Add(new 光明之环特效(this)); + } + } + + public class 光明之环特效(SoulboundSkill skill) : SoulboundEffect(skill) + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"对{Skill.TargetDescription()}施加强驱散,并基于{(Skill.Character != null ? CharacterSet.GetPrimaryAttributeName(Skill.Character.PrimaryAttribute) : "核心属性")}的 {PACoefficient * 100:0.##}% 治疗或复苏{Skill.TargetDescription()},回复 {Heal:0.##} 点生命值。" + + (Improvement > 0 ? $"灵魂绑定额外效果:增加目标 {Improvement / 2 * 100:0.##}% 物理伤害减免和魔法抗性,持续 2 回合。" : "") + $"复苏:如果目标已死亡,则复活目标。复苏只能至多回复至其最大生命值的 20%。"; + + public double PACoefficient => 1.35 + 0.35 * (Skill.Level - 1); + public double Heal => (Skill.Character?.PrimaryAttributeValue ?? 0) * PACoefficient; + + public override void OnSkillCasted(Character caster, List targets, List grids, Dictionary others) + { + List deads = [.. targets.Where(c => c.HP == 0)]; + List alives = [.. targets.Where(c => c.HP > 0)]; + Effect e = new 强驱散特效(Skill); + e.OnSkillCasted(caster, alives, grids, others); + foreach (Character target in alives) + { + HealToTarget(caster, target, Heal); + } + foreach (Character target in deads) + { + HealToTarget(caster, target, Math.Min(Heal, target.MaxHP * 0.2), true, false); + } + if (Improvement > 0) + { + double dr = Improvement / 2; + foreach (Character target in targets) + { + e = new DynamicsEffect(Skill, new() + { + ["expdr"] = dr, + ["mdftype"] = 0, + ["mdfvalue"] = dr + }, caster) + { + Durative = false, + Duration = 0, + DurationTurn = 2, + RemainDurationTurn = 2, + IsDebuff = false + }; + e.OnEffectGained(target); + RecordCharacterApplyEffects(target, EffectType.DefenseBoost); + WriteLine($"[ {target} ] 提升了 {dr * 100:0.##}% 物理伤害减免和魔法抗性!"); + } + } + } + } +} diff --git a/OshimaModules/Skills/爆发技/圣星光旋.cs b/OshimaModules/Skills/爆发技/圣星光旋.cs new file mode 100644 index 0000000..1547507 --- /dev/null +++ b/OshimaModules/Skills/爆发技/圣星光旋.cs @@ -0,0 +1,60 @@ +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Common.Addon; +using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Model; +using Milimoe.FunGame.Core.Model.PrefabricatedEntity; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; + +namespace Oshima.FunGame.OshimaModules.Skills +{ + public class 圣星光旋 : SoulboundSkill + { + public override long Id => (long)SuperSkillID.圣星光旋; + public override string Name => "圣星光旋"; + public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; + public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : ""; + public override double CD => 100; + public override double HardnessTime { get; set; } = 16; + public override bool SelectAllEnemies => true; + + public 圣星光旋(Character? character = null) : base(character) + { + Effects.Add(new 圣星光旋特效(this)); + } + } + + public class 圣星光旋特效(SoulboundSkill skill) : SoulboundEffect(skill) + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"对{Skill.TargetDescription()}造成 {PACoefficient * 100:0.##}% " + + $"{(Skill.Character != null ? CharacterSet.GetPrimaryAttributeName(Skill.Character.PrimaryAttribute) : "核心属性")} [ {PADamage:0.##} ] + {GeneralDamage:0.##} 点{CharacterSet.GetDamageTypeName(DamageType.True)}。" + + (Improvement > 0 ? $"灵魂绑定伤害加成: {Improvement * 100:0.##}% [ {ImprovementDamage:0.##} ] 点," : "") + $"总伤害 {Damage + ImprovementDamage:0.##} 点。" + + $"随后,有 25% 概率对受到伤害的目标造成眩晕 1 回合。眩晕:进入完全行动不能状态。"; + + public double PACoefficient => 0.35 + 0.05 * (Skill.Level - 1); + public double PADamage => (Skill.Character?.PrimaryAttributeValue ?? 0) * PACoefficient; + public double GeneralDamage => 70 * Skill.Level; + public double Damage => GeneralDamage + PADamage; + public double ImprovementDamage => Improvement > 0 ? Damage * Improvement : 0; + + public override void OnSkillCasted(Character caster, List targets, List grids, Dictionary others) + { + List valid = []; + foreach (Character target in targets) + { + DamageCalculationOptions options = new(caster); + if (DamageToEnemy(caster, target, DamageType.True, MagicType.None, Damage + ImprovementDamage, options).ActualDamage > 0) + { + if (Random.Shared.NextDouble() < 0.25) + { + valid.Add(target); + } + } + } + Effect e = new 造成眩晕(Skill); + e.OnSkillCasted(caster, valid, grids, others); + } + } +} diff --git a/OshimaModules/Skills/爆发技/女王之怒.cs b/OshimaModules/Skills/爆发技/女王之怒.cs new file mode 100644 index 0000000..f0975ce --- /dev/null +++ b/OshimaModules/Skills/爆发技/女王之怒.cs @@ -0,0 +1,143 @@ +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Common.Addon; +using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Model; +using Milimoe.FunGame.Core.Model.PrefabricatedEntity; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; + +namespace Oshima.FunGame.OshimaModules.Skills +{ + public class 女王之怒 : SoulboundSkill + { + public override long Id => (long)SuperSkillID.女王之怒; + public override string Name => "女王之怒"; + public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; + public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : ""; + public override double CD => 70; + public override double HardnessTime { get; set; } = 11; + + public 女王之怒(Character? character = null) : base(character) + { + Effects.Add(new 女王之怒特效(this)); + } + } + + public class 女王之怒特效(SoulboundSkill skill) : SoulboundEffect(skill) + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"基于{Skill.SkillOwner()}的 {ATKCoefficient * 100:0.##}% 攻击力 [ {Damage:0.##} ] 对{Skill.TargetDescription()}造成{CharacterSet.GetDamageTypeName(DamageType.Physical)}" + + (Improvement > 0 ? $",灵魂绑定伤害加成: {Improvement * 100:0.##}% [ {ImprovementDamage:0.##} ] 点,总伤害 {Damage + ImprovementDamage:0.##} 点;" : ";") + + $"造成伤害后,对目标施加 {虚弱时间}虚弱。虚弱:伤害降低 {DamageReductionPercent * 100:0.##}%,物理护甲降低 {DEFReductionPercent * 100:0.##}%," + + $"魔法抗性降低 {MDFReductionPercent * 100:0.##}%,治疗效果降低 {HealingReductionPercent * 100:0.##}%"; + + public double ATKCoefficient => 0.4 + 0.22 * (Skill.Level - 1); + public double Damage => (Skill.Character?.ATK ?? 0) * ATKCoefficient; + public double ImprovementDamage => Improvement > 0 ? Damage * Improvement : 0; + public override bool Durative => false; + public override int DurationTurn + { + get + { + return Skill.Level switch + { + 4 or 5 or 6 => 3, + _ => 2 + }; + } + } + public double DurationLevelGrowth + { + get + { + return Skill.Level switch + { + _ => 0 + }; + } + } + public double DamageReductionPercent + { + get + { + return Skill.Level switch + { + 1 => 0.10, + 2 => 0.14, + 3 => 0.18, + 4 => 0.22, + 5 => 0.26, + 6 => 0.3, + _ => 0 + }; + } + } + public double DEFReductionPercent + { + get + { + return Skill.Level switch + { + 1 => 0.3, + 2 => 0.35, + 3 => 0.4, + 4 => 0.45, + 5 => 0.50, + 6 => 0.55, + _ => 0 + }; + } + } + public double MDFReductionPercent + { + get + { + return Skill.Level switch + { + 1 => 0.08, + 2 => 0.11, + 3 => 0.14, + 4 => 0.17, + 5 => 0.20, + 6 => 0.23, + _ => 0 + }; + } + } + public double HealingReductionPercent + { + get + { + return Skill.Level switch + { + 1 => 0.12, + 2 => 0.16, + 3 => 0.20, + 4 => 0.24, + 5 => 0.28, + 6 => 0.32, + _ => 0 + }; + } + } + + private string 虚弱时间 => Durative && Duration > 0 ? $"{实际虚弱时间:0.##} {GameplayEquilibriumConstant.InGameTime}" : (!Durative && DurationTurn > 0 ? 实际虚弱时间 + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}"); + private double 实际虚弱时间 => Durative && Duration > 0 ? Duration + DurationLevelGrowth * (Level - 1) : (!Durative && DurationTurn > 0 ? DurationTurn + DurationLevelGrowth * (Level - 1) : 0); + + public override void OnSkillCasted(Character caster, List targets, List grids, Dictionary others) + { + List valid = []; + foreach (Character target in targets) + { + DamageCalculationOptions options = new(caster); + if (DamageToEnemy(caster, target, DamageType.Physical, MagicType.None, Damage + ImprovementDamage, options).ActualDamage > 0) + { + valid.Add(target); + } + } + 造成虚弱 e = new(Skill, Durative, Duration, DurationTurn, DurationLevelGrowth, DamageReductionPercent, DEFReductionPercent, MDFReductionPercent, HealingReductionPercent); + e.OnSkillCasted(caster, valid, grids, others); + } + } +} diff --git a/OshimaModules/Skills/爆发技/裁决塔罗.cs b/OshimaModules/Skills/爆发技/裁决塔罗.cs new file mode 100644 index 0000000..f5a73c9 --- /dev/null +++ b/OshimaModules/Skills/爆发技/裁决塔罗.cs @@ -0,0 +1,92 @@ +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Common.Addon; +using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Model; +using Milimoe.FunGame.Core.Model.PrefabricatedEntity; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; + +namespace Oshima.FunGame.OshimaModules.Skills +{ + public class 裁决塔罗 : SoulboundSkill + { + public override long Id => (long)SuperSkillID.裁决塔罗; + public override string Name => "裁决塔罗"; + public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; + public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : ""; + public override double CD => 75; + public override double HardnessTime { get; set; } = 9; + public override int CanSelectTargetCount + { + get + { + return Level switch + { + 1 or 2 => 1, + 3 or 4 => 2, + _ => 3 + }; + } + } + + public 裁决塔罗(Character? character = null) : base(character) + { + Effects.Add(new 裁决塔罗特效(this)); + } + } + + public class 裁决塔罗特效(SoulboundSkill skill) : SoulboundEffect(skill) + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"基于{Skill.SkillOwner()}的 {ATKCoefficient * 100:0.##}% 攻击力 [ {Damage:0.##} ] 对{Skill.TargetDescription()}造成{CharacterSet.GetDamageTypeName(DamageType.Magical)}" + + (Improvement > 0 ? $",灵魂绑定伤害加成: {Improvement * 100:0.##}% [ {ImprovementDamage:0.##} ] 点,总伤害 {Damage + ImprovementDamage:0.##} 点;" : ";") + + $"造成伤害后,对目标随机施加以下几种状态:\r\n1、冻结:造成 {DurationTurn} 回合完全行动不能和 30% 魔法伤害易伤;\r\n" + + $"2、混乱:进入行动受限状态,失控并随机行动,且所有指令均会在所有角色中随机选取目标,持续 {DurationTurn} 回合;\r\n" + + $"3、战斗不能:在 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内无法普通攻击和使用技能(魔法、战技和爆发技)。"; + + public double ATKCoefficient => 0.38 + 0.12 * (Skill.Level - 1); + public double Damage => (Skill.Character?.ATK ?? 0) * ATKCoefficient; + public double ImprovementDamage => Improvement > 0 ? Damage * Improvement : 0; + public override double Duration + { + get + { + return Skill.Level switch + { + 4 or 5 or 6 => 14, + _ => 7 + }; + } + } + public override int DurationTurn + { + get + { + return Skill.Level switch + { + 4 or 5 or 6 => 3, + _ => 2 + }; + } + } + + public override void OnSkillCasted(Character caster, List targets, List grids, Dictionary others) + { + foreach (Character target in targets) + { + DamageCalculationOptions options = new(caster); + if (DamageToEnemy(caster, target, DamageType.Magical, MagicType.None, Damage + ImprovementDamage, options).ActualDamage > 0) + { + Effect e = Random.Shared.Next(3) switch + { + 0 => new 施加概率负面(Skill, EffectType.Freeze, false, 0, DurationTurn, 0, 1, 0), + 1 => new 施加概率负面(Skill, EffectType.Confusion, false, 0, DurationTurn, 0, 1, 0), + _ => new 施加概率负面(Skill, EffectType.Cripple, true, Duration, 0, 0, 1, 0), + }; + e.OnSkillCasted(caster, [target], grids, others); + } + } + } + } +} diff --git a/OshimaModules/Skills/魔法/圣灵术.cs b/OshimaModules/Skills/魔法/圣灵术.cs index c79c909..1b56dc4 100644 --- a/OshimaModules/Skills/魔法/圣灵术.cs +++ b/OshimaModules/Skills/魔法/圣灵术.cs @@ -27,17 +27,5 @@ namespace Oshima.FunGame.OshimaModules.Skills Effects.Add(new 强驱散特效(this)); Effects.Add(new 纯数值回复生命(this, 380, 270, true)); } - - public override List GetSelectableTargets(Character caster, List enemys, List teammates) - { - List targets = base.GetSelectableTargets(caster, enemys, teammates); - if (GamingQueue != null) - { - // 从死亡队列中获取队友,加入目标列表。 - Dictionary deaths = GamingQueue.GetIsTeammateDictionary(caster, GamingQueue.Eliminated); - targets = [.. targets.Union(deaths.Where(kv => kv.Value).Select(kv => kv.Key)).Distinct()]; - } - return targets; - } } } diff --git a/OshimaModules/Skills/魔法/复苏术.cs b/OshimaModules/Skills/魔法/复苏术.cs index 6427bf9..504d663 100644 --- a/OshimaModules/Skills/魔法/复苏术.cs +++ b/OshimaModules/Skills/魔法/复苏术.cs @@ -27,17 +27,5 @@ namespace Oshima.FunGame.OshimaModules.Skills Effects.Add(new 强驱散特效(this)); Effects.Add(new 百分比回复生命值(this, 0.21, 0.02, true)); } - - public override List GetSelectableTargets(Character caster, List enemys, List teammates) - { - List targets = base.GetSelectableTargets(caster, enemys, teammates); - if (GamingQueue != null) - { - // 从死亡队列中获取队友,加入目标列表。 - Dictionary deaths = GamingQueue.GetIsTeammateDictionary(caster, GamingQueue.Eliminated); - targets = [.. targets.Union(deaths.Where(kv => kv.Value).Select(kv => kv.Key)).Distinct()]; - } - return targets; - } } } diff --git a/OshimaModules/Skills/魔法/银色荆棘.cs b/OshimaModules/Skills/魔法/银色荆棘.cs index f70ed7d..d37aab1 100644 --- a/OshimaModules/Skills/魔法/银色荆棘.cs +++ b/OshimaModules/Skills/魔法/银色荆棘.cs @@ -45,7 +45,7 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => Skill.Id; public override string Name => Skill.Name; public override string Description => $"对{Skill.TargetDescription()}造成 {Damage:0.##} 点{CharacterSet.GetDamageTypeName(DamageType.Magical, MagicType)}。" + - $"随后 {ActualConfusionProbability * 100:0.##}% 概率对目标施加混乱状态,持续 {持续时间}。混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。"; + $"随后 {ActualConfusionProbability * 100:0.##}% 概率对目标施加混乱状态,持续 {持续时间}。混乱:进入行动受限状态,失控并随机行动,且所有指令均会在所有角色中随机选取目标。"; public override DispelledType DispelledType => DispelledType.Strong; public override EffectType EffectType => EffectType.Confusion; public override bool ExemptDuration => true;