diff --git a/OshimaCore/Utils/FunGameUtil.cs b/OshimaCore/Utils/FunGameUtil.cs index b0f8af6..d2a0abc 100644 --- a/OshimaCore/Utils/FunGameUtil.cs +++ b/OshimaCore/Utils/FunGameUtil.cs @@ -752,7 +752,7 @@ namespace Oshima.Core.Utils Skills.AddRange([new 疾风步()]); - Magics.AddRange([new 冰霜攻击(), new 火之矢(), new 水之矢(), new 风之轮(), new 石之锤(), new 心灵之霞(), new 次元上升(), new 暗物质()]); + Magics.AddRange([new 冰霜攻击(), new 火之矢(), new 水之矢(), new 风之轮(), new 石之锤(), new 心灵之霞(), new 次元上升(), new 暗物质(), new 回复术(), new 治愈术()]); } public static void UpdateStatistics(CharacterStatistics totalStats, CharacterStatistics stats) diff --git a/OshimaModules/Effects/SkillEffects/基于属性的伤害.cs b/OshimaModules/Effects/SkillEffects/基于属性的伤害.cs new file mode 100644 index 0000000..a6befdb --- /dev/null +++ b/OshimaModules/Effects/SkillEffects/基于属性的伤害.cs @@ -0,0 +1,61 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +{ + public class 基于属性的伤害 : Effect + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"对目标{(TargetCount > 1 ? $"至多 {TargetCount} 个" : "")}敌人造成 {BaseDamage:0.##} + {AttributeCoefficient * 100:0.##}% {CharacterSet.GetPrimaryAttributeName(基于属性)} [ {Damage:0.##} ] 点{(IsMagic ? CharacterSet.GetMagicDamageName(MagicType) : "物理伤害")}。"; + public override bool TargetSelf => false; + public override int TargetCount { get; set; } = 1; + private double BaseDamage => Skill.Level > 0 ? 基础数值伤害 + 基础伤害等级成长 * (Skill.Level - 1) : 基础数值伤害; + private double AttributeCoefficient => Skill.Level > 0 ? 基础属性系数 + 基础系数等级成长 * (Skill.Level - 1) : 基础属性系数; + private double Damage + { + get + { + if (Skill.Character != null) + { + double paValue = 基于属性 switch + { + PrimaryAttribute.STR => Skill.Character.STR, + PrimaryAttribute.AGI => Skill.Character.AGI, + _ => Skill.Character.INT, + }; + return BaseDamage + AttributeCoefficient * paValue; + } + return BaseDamage; + } + } + + private PrimaryAttribute 基于属性 { get; set; } = PrimaryAttribute.INT; + private double 基础数值伤害 { get; set; } = 100; + private double 基础伤害等级成长 { get; set; } = 50; + private double 基础属性系数 { get; set; } = 0.4; + private double 基础系数等级成长 { get; set; } = 0.4; + private bool IsMagic { get; set; } = true; + + public 基于属性的伤害(Skill skill, PrimaryAttribute 基于属性, double 基础数值伤害, double 基础伤害等级成长, double 基础属性系数, double 基础系数等级成长, bool isMagic = true, MagicType magicType = MagicType.None, int targetCount = 1) : base(skill) + { + GamingQueue = skill.GamingQueue; + this.基于属性 = 基于属性; + this.基础数值伤害 = 基础数值伤害; + this.基础伤害等级成长 = 基础伤害等级成长; + this.基础属性系数 = 基础属性系数; + this.基础系数等级成长 = 基础系数等级成长; + IsMagic = isMagic; + MagicType = magicType; + TargetCount = targetCount; + } + + public override void OnSkillCasted(Character caster, List targets, Dictionary others) + { + foreach (Character enemy in targets) + { + DamageToEnemy(caster, enemy, IsMagic, MagicType, Damage); + } + } + } +} diff --git a/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_带基础伤害.cs b/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_带基础伤害.cs new file mode 100644 index 0000000..f4abbfd --- /dev/null +++ b/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_带基础伤害.cs @@ -0,0 +1,43 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +{ + public class 基于攻击力的伤害_带基础伤害 : Effect + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"对目标{(TargetCount > 1 ? $"至多 {TargetCount} 个" : "")}敌人造成 {BaseDamage:0.##} + {ATKCoefficient * 100:0.##}% 攻击力 [ {Damage:0.##} ] 点{(IsMagic ? CharacterSet.GetMagicDamageName(MagicType) : "物理伤害")}。"; + public override bool TargetSelf => false; + public override int TargetCount { get; set; } = 1; + private double BaseDamage => Skill.Level > 0 ? 基础数值伤害 + 基础伤害等级成长 * (Skill.Level - 1) : 基础数值伤害; + private double ATKCoefficient => Skill.Level > 0 ? 基础攻击力系数 + 基础系数等级成长 * (Skill.Level - 1) : 基础攻击力系数; + private double Damage => BaseDamage + (ATKCoefficient * Skill.Character?.ATK ?? 0); + + private double 基础数值伤害 { get; set; } = 100; + private double 基础伤害等级成长 { get; set; } = 50; + private double 基础攻击力系数 { get; set; } = 0.2; + private double 基础系数等级成长 { get; set; } = 0.2; + private bool IsMagic { get; set; } = true; + + public 基于攻击力的伤害_带基础伤害(Skill skill, double 基础数值伤害, double 基础伤害等级成长, double 基础攻击力系数, double 基础系数等级成长, bool isMagic = true, MagicType magicType = MagicType.None, int targetCount = 1) : base(skill) + { + GamingQueue = skill.GamingQueue; + this.基础数值伤害 = 基础数值伤害; + this.基础伤害等级成长 = 基础伤害等级成长; + this.基础攻击力系数 = 基础攻击力系数; + this.基础系数等级成长 = 基础系数等级成长; + IsMagic = isMagic; + MagicType = magicType; + TargetCount = targetCount; + } + + public override void OnSkillCasted(Character caster, List targets, Dictionary others) + { + foreach (Character enemy in targets) + { + DamageToEnemy(caster, enemy, IsMagic, MagicType, Damage); + } + } + } +} diff --git a/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_无基础伤害.cs b/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_无基础伤害.cs new file mode 100644 index 0000000..f16d6d3 --- /dev/null +++ b/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_无基础伤害.cs @@ -0,0 +1,38 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +{ + public class 基于攻击力的伤害_无基础伤害 : Effect + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"对目标{(TargetCount > 1 ? $"至多 {TargetCount} 个" : "")}敌人造成 {ATKCoefficient * 100:0.##}% 攻击力 [ {Damage:0.##} ] 点{(IsMagic ? CharacterSet.GetMagicDamageName(MagicType) : "物理伤害")}。"; + public override bool TargetSelf => false; + public override int TargetCount { get; set; } = 1; + private double ATKCoefficient => Skill.Level > 0 ? 基础攻击力系数 + 基础系数等级成长 * (Skill.Level - 1) : 基础攻击力系数; + private double Damage => ATKCoefficient * Skill.Character?.ATK ?? 0; + + private double 基础攻击力系数 { get; set; } = 1.5; + private double 基础系数等级成长 { get; set; } = 0.25; + private bool IsMagic { get; set; } = true; + + public 基于攻击力的伤害_无基础伤害(Skill skill, double 基础攻击力系数, double 基础系数等级成长, bool isMagic = true, MagicType magicType = MagicType.None, int targetCount = 1) : base(skill) + { + GamingQueue = skill.GamingQueue; + this.基础攻击力系数 = 基础攻击力系数; + this.基础系数等级成长 = 基础系数等级成长; + IsMagic = isMagic; + MagicType = magicType; + TargetCount = targetCount; + } + + public override void OnSkillCasted(Character caster, List targets, Dictionary others) + { + foreach (Character enemy in targets) + { + DamageToEnemy(caster, enemy, IsMagic, MagicType, Damage); + } + } + } +} diff --git a/OshimaModules/Effects/SkillEffects/基于核心属性的伤害.cs b/OshimaModules/Effects/SkillEffects/基于核心属性的伤害.cs new file mode 100644 index 0000000..aeab2e2 --- /dev/null +++ b/OshimaModules/Effects/SkillEffects/基于核心属性的伤害.cs @@ -0,0 +1,43 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +{ + public class 基于核心属性的伤害 : Effect + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"对目标{(TargetCount > 1 ? $"至多 {TargetCount} 个" : "")}敌人造成 {BaseDamage:0.##} + {AttributeCoefficient * 100:0.##}% {CharacterSet.GetPrimaryAttributeName(Skill.Character?.PrimaryAttribute ?? PrimaryAttribute.INT)} [ {Damage:0.##} ] 点{(IsMagic ? CharacterSet.GetMagicDamageName(MagicType) : "物理伤害")}。"; + public override bool TargetSelf => false; + public override int TargetCount { get; set; } = 1; + private double BaseDamage => Skill.Level > 0 ? 基础数值伤害 + 基础伤害等级成长 * (Skill.Level - 1) : 基础数值伤害; + private double AttributeCoefficient => Skill.Level > 0 ? 基础属性系数 + 基础系数等级成长 * (Skill.Level - 1) : 基础属性系数; + private double Damage => BaseDamage + (AttributeCoefficient * Skill.Character?.PrimaryAttributeValue ?? 0); + + private double 基础数值伤害 { get; set; } = 100; + private double 基础伤害等级成长 { get; set; } = 50; + private double 基础属性系数 { get; set; } = 0.4; + private double 基础系数等级成长 { get; set; } = 0.4; + private bool IsMagic { get; set; } = true; + + public 基于核心属性的伤害(Skill skill, double 基础数值伤害, double 基础伤害等级成长, double 基础属性系数, double 基础系数等级成长, bool isMagic = true, MagicType magicType = MagicType.None, int targetCount = 1) : base(skill) + { + GamingQueue = skill.GamingQueue; + this.基础数值伤害 = 基础数值伤害; + this.基础伤害等级成长 = 基础伤害等级成长; + this.基础属性系数 = 基础属性系数; + this.基础系数等级成长 = 基础系数等级成长; + IsMagic = isMagic; + MagicType = magicType; + TargetCount = targetCount; + } + + public override void OnSkillCasted(Character caster, List targets, Dictionary others) + { + foreach (Character enemy in targets) + { + DamageToEnemy(caster, enemy, IsMagic, MagicType, Damage); + } + } + } +} diff --git a/OshimaModules/Effects/SkillEffects/百分比回复生命值.cs b/OshimaModules/Effects/SkillEffects/百分比回复生命值.cs new file mode 100644 index 0000000..7330866 --- /dev/null +++ b/OshimaModules/Effects/SkillEffects/百分比回复生命值.cs @@ -0,0 +1,36 @@ +using Milimoe.FunGame.Core.Entity; + +namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +{ + public class 百分比回复生命值 : Effect + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"为{(TargetCount > 1 ? $"至多 {TargetCount} 个" : "")}目标回复其最大生命值 {百分比 * 100:0.##}% [ {Heal:0.##} ] 点生命值。"; + public override bool TargetSelf => true; + public override int TargetCount { get; set; } = 1; + + private double Heal => Skill.Level > 0 ? 百分比 * (Skill.Character?.MaxHP ?? 0) : 0; + private double 基础回复 { get; set; } = 0.03; + private double 回复成长 { get; set; } = 0.03; + private double 百分比 => Skill.Level > 0 ? 基础回复 + 回复成长 * (Skill.Level - 1) : 基础回复; + private bool CanRespawn { get; set; } = false; + + public 百分比回复生命值(Skill skill, double 基础回复, double 回复成长, int targetCount = 1, bool canRespawn = false) : base(skill) + { + GamingQueue = skill.GamingQueue; + this.基础回复 = 基础回复; + this.回复成长 = 回复成长; + TargetCount = targetCount; + CanRespawn = canRespawn; + } + + public override void OnSkillCasted(Character caster, List targets, Dictionary others) + { + foreach (Character target in targets) + { + HealToTarget(caster, target, Heal, CanRespawn); + } + } + } +} diff --git a/OshimaModules/Effects/SkillEffects/纯数值伤害.cs b/OshimaModules/Effects/SkillEffects/纯数值伤害.cs new file mode 100644 index 0000000..34d3525 --- /dev/null +++ b/OshimaModules/Effects/SkillEffects/纯数值伤害.cs @@ -0,0 +1,37 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +{ + public class 纯数值伤害 : Effect + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"对目标{(TargetCount > 1 ? $"至多 {TargetCount} 个" : "")}敌人造成 {Damage:0.##} 点{(IsMagic ? CharacterSet.GetMagicDamageName(MagicType) : "物理伤害")}。"; + public override bool TargetSelf => false; + public override int TargetCount { get; set; } = 1; + private double Damage => Skill.Level > 0 ? 基础数值伤害 + 基础伤害等级成长 * (Skill.Level - 1) : 基础数值伤害; + + private double 基础数值伤害 { get; set; } = 200; + private double 基础伤害等级成长 { get; set; } = 100; + private bool IsMagic { get; set; } = true; + + public 纯数值伤害(Skill skill, double 基础数值伤害, double 基础伤害等级成长, bool isMagic = true, MagicType magicType = MagicType.None, int targetCount = 1) : base(skill) + { + GamingQueue = skill.GamingQueue; + this.基础数值伤害 = 基础数值伤害; + this.基础伤害等级成长 = 基础伤害等级成长; + IsMagic = isMagic; + MagicType = magicType; + TargetCount = targetCount; + } + + public override void OnSkillCasted(Character caster, List targets, Dictionary others) + { + foreach (Character enemy in targets) + { + DamageToEnemy(caster, enemy, IsMagic, MagicType, Damage); + } + } + } +} diff --git a/OshimaModules/Effects/SkillEffects/纯数值回复生命值.cs b/OshimaModules/Effects/SkillEffects/纯数值回复生命值.cs new file mode 100644 index 0000000..59841f6 --- /dev/null +++ b/OshimaModules/Effects/SkillEffects/纯数值回复生命值.cs @@ -0,0 +1,35 @@ +using Milimoe.FunGame.Core.Entity; + +namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +{ + public class 纯数值回复生命 : Effect + { + public override long Id => Skill.Id; + public override string Name => Skill.Name; + public override string Description => $"为{(TargetCount > 1 ? $"至多 {TargetCount} 个" : "")}目标回复 {Heal:0.##} 点生命值。"; + public override bool TargetSelf => true; + public override int TargetCount { get; set; } = 1; + + private double Heal => Skill.Level > 0 ? 基础回复 + 回复成长 * (Skill.Level - 1) : 基础回复; + private double 基础回复 { get; set; } = 100; + private double 回复成长 { get; set; } = 30; + private bool CanRespawn { get; set; } = false; + + public 纯数值回复生命(Skill skill, double 基础回复, double 回复成长, int targetCount = 1, bool canRespawn = false) : base(skill) + { + GamingQueue = skill.GamingQueue; + this.基础回复 = 基础回复; + this.回复成长 = 回复成长; + TargetCount = targetCount; + CanRespawn = canRespawn; + } + + public override void OnSkillCasted(Character caster, List targets, Dictionary others) + { + foreach (Character target in targets) + { + HealToTarget(caster, target, Heal, CanRespawn); + } + } + } +} diff --git a/OshimaModules/Modules/SkillModule.cs b/OshimaModules/Modules/SkillModule.cs index ed3bb49..a74815e 100644 --- a/OshimaModules/Modules/SkillModule.cs +++ b/OshimaModules/Modules/SkillModule.cs @@ -35,6 +35,8 @@ namespace Oshima.FunGame.OshimaModules (long)MagicID.心灵之霞 => new 心灵之霞(), (long)MagicID.次元上升 => new 次元上升(), (long)MagicID.暗物质 => new 暗物质(), + (long)MagicID.回复术 => new 回复术(), + (long)MagicID.治愈术 => new 治愈术(), (long)SkillID.疾风步 => new 疾风步(), (long)SuperSkillID.力量爆发 => new 力量爆发(), (long)SuperSkillID.天赐之力 => new 天赐之力(), diff --git a/OshimaModules/Skills/魔法/冰霜攻击.cs b/OshimaModules/Skills/魔法/冰霜攻击.cs index 8f9f262..0870b53 100644 --- a/OshimaModules/Skills/魔法/冰霜攻击.cs +++ b/OshimaModules/Skills/魔法/冰霜攻击.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; namespace Oshima.FunGame.OshimaModules.Skills { @@ -8,37 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => (long)MagicID.冰霜攻击; public override string Name => "冰霜攻击"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public override double MPCost => 30 + (50 * (Level - 1)); + public override double MPCost => Level > 0 ? 50 + (50 * (Level - 1)) : 50; public override double CD => 25; public override double CastTime => 8; public override double HardnessTime { get; set; } = 3; public 冰霜攻击(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 冰霜攻击特效(this)); - } - } - - public class 冰霜攻击特效(Skill skill) : Effect(skill) - { - public override long Id => Skill.Id; - public override string Name => Skill.Name; - public override string Description => $"对目标敌人造成 {基础伤害:0.##} + {系数 * 100:0.##}% 智力 {(Skill.Level == 0 ? $"(+{等级系数 * 100:0.##}%/Lv)" : "")} [ {Damage:0.##} ] 点{CharacterSet.GetMagicDamageName(MagicType)}。"; - public override bool TargetSelf => false; - public override int TargetCount => 1; - - private static double 等级系数 => 0.4; - private double 基础伤害 => Skill.Level != 0 ? 90 + 60 * (Skill.Level - 1) : 90; - private double 系数 => Skill.Level != 0 ? 0.35 + 等级系数 * (Skill.Level - 1) : 0.35; - private double Damage => 基础伤害 + 系数 * Skill.Character?.INT ?? 0; - - public override void OnSkillCasted(Character caster, List targets, Dictionary others) - { - if (targets.Count > 0) - { - Character enemy = targets[0]; - DamageToEnemy(caster, enemy, true, MagicType, Damage); - } + Effects.Add(new 基于属性的伤害(this, PrimaryAttribute.INT, 90, 60, 0.35, 0.4)); } } } diff --git a/OshimaModules/Skills/魔法/回复术.cs b/OshimaModules/Skills/魔法/回复术.cs new file mode 100644 index 0000000..5473ba0 --- /dev/null +++ b/OshimaModules/Skills/魔法/回复术.cs @@ -0,0 +1,27 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; + +namespace Oshima.FunGame.OshimaModules.Skills +{ + public class 回复术 : Skill + { + public override long Id => (long)MagicID.回复术; + public override string Name => "回复术"; + public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; + public override double MPCost => Level > 0 ? 40 + (60 * (Level - 1)) : 40; + public override double CD => 35; + public override double CastTime => 3; + public override double HardnessTime { get; set; } = 5; + public override bool CanSelectSelf => true; + public override bool CanSelectEnemy => false; + public override bool CanSelectTeammate => true; + public override int CanSelectTargetCount => 1; + + public 回复术(Character? character = null) : base(SkillType.Magic, character) + { + SelectTargetPredicates.Add(c => c.HP > 0 && c.HP < c.MaxHP); + Effects.Add(new 纯数值回复生命(this, 70, 120)); + } + } +} diff --git a/OshimaModules/Skills/魔法/心灵之霞.cs b/OshimaModules/Skills/魔法/心灵之霞.cs index c755d59..d95ddfc 100644 --- a/OshimaModules/Skills/魔法/心灵之霞.cs +++ b/OshimaModules/Skills/魔法/心灵之霞.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; namespace Oshima.FunGame.OshimaModules.Skills { @@ -8,37 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => (long)MagicID.心灵之霞; public override string Name => "心灵之霞"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public override double MPCost => 30 + (50 * (Level - 1)); - public override double CD => 25; + public override double MPCost => Level > 0 ? 35 + (50 * (Level - 1)) : 35; + public override double CD => 30; public override double CastTime => 6; public override double HardnessTime { get; set; } = 3; public 心灵之霞(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 心灵之霞特效(this)); - } - } - - public class 心灵之霞特效(Skill skill) : Effect(skill) - { - public override long Id => Skill.Id; - public override string Name => Skill.Name; - public override string Description => $"对目标敌人造成 {基础伤害:0.##} + {系数 * 100:0.##}% 智力 {(Skill.Level == 0 ? $"(+{等级系数 * 100:0.##}%/Lv)" : "")} [ {Damage:0.##} ] 点{CharacterSet.GetMagicDamageName(MagicType)}。"; - public override bool TargetSelf => false; - public override int TargetCount => 1; - - private static double 等级系数 => 0.6; - private double 基础伤害 => Skill.Level != 0 ? 90 + 60 * (Skill.Level - 1) : 90; - private double 系数 => Skill.Level != 0 ? 0.5 + 等级系数 * (Skill.Level - 1) : 0.5; - private double Damage => 基础伤害 + 系数 * Skill.Character?.INT ?? 0; - - public override void OnSkillCasted(Character caster, List targets, Dictionary others) - { - if (targets.Count > 0) - { - Character enemy = targets[0]; - DamageToEnemy(caster, enemy, true, MagicType, Damage); - } + Effects.Add(new 基于属性的伤害(this, PrimaryAttribute.INT, 80, 55, 0.5, 0.6)); } } } diff --git a/OshimaModules/Skills/魔法/暗物质.cs b/OshimaModules/Skills/魔法/暗物质.cs index 98ae78f..bdc0e40 100644 --- a/OshimaModules/Skills/魔法/暗物质.cs +++ b/OshimaModules/Skills/魔法/暗物质.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; namespace Oshima.FunGame.OshimaModules.Skills { @@ -8,37 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => (long)MagicID.暗物质; public override string Name => "暗物质"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public override double MPCost => 30 + (50 * (Level - 1)); - public override double CD => 25; - public override double CastTime => 6; - public override double HardnessTime { get; set; } = 3; + public override double MPCost => Level > 0 ? 65 + (80 * (Level - 1)) : 65; + public override double CD => 35; + public override double CastTime => 10; + public override double HardnessTime { get; set; } = 4; public 暗物质(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 暗物质特效(this)); - } - } - - public class 暗物质特效(Skill skill) : Effect(skill) - { - public override long Id => Skill.Id; - public override string Name => Skill.Name; - public override string Description => $"对目标敌人造成 {基础伤害:0.##} + {系数 * 100:0.##}% 智力 {(Skill.Level == 0 ? $"(+{等级系数 * 100:0.##}%/Lv)" : "")} [ {Damage:0.##} ] 点{CharacterSet.GetMagicDamageName(MagicType)}。"; - public override bool TargetSelf => false; - public override int TargetCount => 1; - - private static double 等级系数 => 0.6; - private double 基础伤害 => Skill.Level != 0 ? 90 + 60 * (Skill.Level - 1) : 90; - private double 系数 => Skill.Level != 0 ? 0.5 + 等级系数 * (Skill.Level - 1) : 0.5; - private double Damage => 基础伤害 + 系数 * Skill.Character?.INT ?? 0; - - public override void OnSkillCasted(Character caster, List targets, Dictionary others) - { - if (targets.Count > 0) - { - Character enemy = targets[0]; - DamageToEnemy(caster, enemy, true, MagicType, Damage); - } + Effects.Add(new 基于攻击力的伤害_无基础伤害(this, 1.5, 0.35, true)); } } } diff --git a/OshimaModules/Skills/魔法/次元上升.cs b/OshimaModules/Skills/魔法/次元上升.cs index 947f50d..2d4904c 100644 --- a/OshimaModules/Skills/魔法/次元上升.cs +++ b/OshimaModules/Skills/魔法/次元上升.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; namespace Oshima.FunGame.OshimaModules.Skills { @@ -8,37 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => (long)MagicID.次元上升; public override string Name => "次元上升"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public override double MPCost => 30 + (50 * (Level - 1)); - public override double CD => 25; - public override double CastTime => 6; - public override double HardnessTime { get; set; } = 3; + public override double MPCost => Level > 0 ? 60 + (45 * (Level - 1)) : 60; + public override double CD => 30; + public override double CastTime => 10; + public override double HardnessTime { get; set; } = 5; public 次元上升(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 次元上升特效(this)); - } - } - - public class 次元上升特效(Skill skill) : Effect(skill) - { - public override long Id => Skill.Id; - public override string Name => Skill.Name; - public override string Description => $"对目标敌人造成 {基础伤害:0.##} + {系数 * 100:0.##}% 智力 {(Skill.Level == 0 ? $"(+{等级系数 * 100:0.##}%/Lv)" : "")} [ {Damage:0.##} ] 点{CharacterSet.GetMagicDamageName(MagicType)}。"; - public override bool TargetSelf => false; - public override int TargetCount => 1; - - private static double 等级系数 => 0.6; - private double 基础伤害 => Skill.Level != 0 ? 90 + 60 * (Skill.Level - 1) : 90; - private double 系数 => Skill.Level != 0 ? 0.5 + 等级系数 * (Skill.Level - 1) : 0.5; - private double Damage => 基础伤害 + 系数 * Skill.Character?.INT ?? 0; - - public override void OnSkillCasted(Character caster, List targets, Dictionary others) - { - if (targets.Count > 0) - { - Character enemy = targets[0]; - DamageToEnemy(caster, enemy, true, MagicType, Damage); - } + Effects.Add(new 基于攻击力的伤害_带基础伤害(this, 90, 110, 0.5, 0.3)); } } } diff --git a/OshimaModules/Skills/魔法/水之矢.cs b/OshimaModules/Skills/魔法/水之矢.cs index bc88d76..1b4bb03 100644 --- a/OshimaModules/Skills/魔法/水之矢.cs +++ b/OshimaModules/Skills/魔法/水之矢.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; namespace Oshima.FunGame.OshimaModules.Skills { @@ -8,37 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => (long)MagicID.水之矢; public override string Name => "水之矢"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public override double MPCost => 30 + (40 * (Level - 1)); + public override double MPCost => Level > 0 ? 30 + (40 * (Level - 1)) : 30; public override double CD => 20; public override double CastTime => 6; public override double HardnessTime { get; set; } = 3; public 水之矢(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 水之矢特效(this)); - } - } - - public class 水之矢特效(Skill skill) : Effect(skill) - { - public override long Id => Skill.Id; - public override string Name => Skill.Name; - public override string Description => $"对目标敌人造成 {基础伤害:0.##} + {系数 * 100:0.##}% {CharacterSet.GetPrimaryAttributeName(Skill.Character?.PrimaryAttribute ?? PrimaryAttribute.INT)} {(Skill.Level == 0 ? $"(+{等级系数 * 100:0.##}%/Lv)" : "")} [ {Damage:0.##} ] 点{CharacterSet.GetMagicDamageName(MagicType)}。"; - public override bool TargetSelf => false; - public override int TargetCount => 1; - - private static double 等级系数 => 0.45; - private double 基础伤害 => Skill.Level != 0 ? 85 + 65 * (Skill.Level - 1) : 85; - private double 系数 => Skill.Level != 0 ? 0.35 + 等级系数 * (Skill.Level - 1) : 0.35; - private double Damage => 基础伤害 + 系数 * Skill.Character?.PrimaryAttributeValue ?? 0; - - public override void OnSkillCasted(Character caster, List targets, Dictionary others) - { - if (targets.Count > 0) - { - Character enemy = targets[0]; - DamageToEnemy(caster, enemy, true, MagicType, Damage); - } + Effects.Add(new 基于核心属性的伤害(this, 85, 65, 0.35, 0.45)); } } } diff --git a/OshimaModules/Skills/魔法/治愈术.cs b/OshimaModules/Skills/魔法/治愈术.cs new file mode 100644 index 0000000..dc4c89d --- /dev/null +++ b/OshimaModules/Skills/魔法/治愈术.cs @@ -0,0 +1,27 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; + +namespace Oshima.FunGame.OshimaModules.Skills +{ + public class 治愈术 : Skill + { + public override long Id => (long)MagicID.治愈术; + public override string Name => "治愈术"; + public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; + public override double MPCost => Level > 0 ? 60 + (65 * (Level - 1)) : 60; + public override double CD => 40; + public override double CastTime => 5; + public override double HardnessTime { get; set; } = 7; + public override bool CanSelectSelf => true; + public override bool CanSelectEnemy => false; + public override bool CanSelectTeammate => true; + public override int CanSelectTargetCount => 1; + + public 治愈术(Character? character = null) : base(SkillType.Magic, character) + { + SelectTargetPredicates.Add(c => c.HP > 0 && c.HP < c.MaxHP); + Effects.Add(new 百分比回复生命值(this, 0.3, 0.3)); + } + } +} diff --git a/OshimaModules/Skills/魔法/火之矢.cs b/OshimaModules/Skills/魔法/火之矢.cs index 66815c3..9ff0699 100644 --- a/OshimaModules/Skills/魔法/火之矢.cs +++ b/OshimaModules/Skills/魔法/火之矢.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; namespace Oshima.FunGame.OshimaModules.Skills { @@ -8,37 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => (long)MagicID.火之矢; public override string Name => "火之矢"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public override double MPCost => 30 + (40 * (Level - 1)); + public override double MPCost => Level > 0 ? 30 + (40 * (Level - 1)) : 30; public override double CD => 20; public override double CastTime => 6; public override double HardnessTime { get; set; } = 3; public 火之矢(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 火之矢特效(this)); - } - } - - public class 火之矢特效(Skill skill) : Effect(skill) - { - public override long Id => Skill.Id; - public override string Name => Skill.Name; - public override string Description => $"对目标敌人造成 {基础伤害:0.##} + {系数 * 100:0.##}% {CharacterSet.GetPrimaryAttributeName(Skill.Character?.PrimaryAttribute ?? PrimaryAttribute.INT)} {(Skill.Level == 0 ? $"(+{等级系数 * 100:0.##}%/Lv)" : "")} [ {Damage:0.##} ] 点{CharacterSet.GetMagicDamageName(MagicType)}。"; - public override bool TargetSelf => false; - public override int TargetCount => 1; - - private static double 等级系数 => 0.35; - private double 基础伤害 => Skill.Level != 0 ? 80 + 65 * (Skill.Level - 1) : 80; - private double 系数 => Skill.Level != 0 ? 0.45 + 等级系数 * (Skill.Level - 1) : 0.45; - private double Damage => 基础伤害 + 系数 * Skill.Character?.PrimaryAttributeValue ?? 0; - - public override void OnSkillCasted(Character caster, List targets, Dictionary others) - { - if (targets.Count > 0) - { - Character enemy = targets[0]; - DamageToEnemy(caster, enemy, true, MagicType, Damage); - } + Effects.Add(new 基于核心属性的伤害(this, 80, 65, 0.45, 0.35)); } } } diff --git a/OshimaModules/Skills/魔法/石之锤.cs b/OshimaModules/Skills/魔法/石之锤.cs index c34e78c..397f644 100644 --- a/OshimaModules/Skills/魔法/石之锤.cs +++ b/OshimaModules/Skills/魔法/石之锤.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; namespace Oshima.FunGame.OshimaModules.Skills { @@ -8,37 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => (long)MagicID.石之锤; public override string Name => "石之锤"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public override double MPCost => 30 + (30 * (Level - 1)); + public override double MPCost => Level > 0 ? 35 + (30 * (Level - 1)) : 35; public override double CD => 22; public override double CastTime => 6; public override double HardnessTime { get; set; } = 4; public 石之锤(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 石之锤特效(this)); - } - } - - public class 石之锤特效(Skill skill) : Effect(skill) - { - public override long Id => Skill.Id; - public override string Name => Skill.Name; - public override string Description => $"对目标敌人造成 {基础伤害:0.##} + {系数 * 100:0.##}% 力量 {(Skill.Level == 0 ? $"(+{等级系数 * 100:0.##}%/Lv)" : "")} [ {Damage:0.##} ] 点{CharacterSet.GetMagicDamageName(MagicType)}。"; - public override bool TargetSelf => false; - public override int TargetCount => 1; - - private static double 等级系数 => 0.4; - private double 基础伤害 => Skill.Level != 0 ? 100 + 50 * (Skill.Level - 1) : 100; - private double 系数 => Skill.Level != 0 ? 0.7 + 等级系数 * (Skill.Level - 1) : 0.7; - private double Damage => 基础伤害 + 系数 * Skill.Character?.STR ?? 0; - - public override void OnSkillCasted(Character caster, List targets, Dictionary others) - { - if (targets.Count > 0) - { - Character enemy = targets[0]; - DamageToEnemy(caster, enemy, true, MagicType, Damage); - } + Effects.Add(new 基于属性的伤害(this, PrimaryAttribute.STR, 100, 50, 0.55, 0.4)); } } } diff --git a/OshimaModules/Skills/魔法/风之轮.cs b/OshimaModules/Skills/魔法/风之轮.cs index 71c346a..7e878d6 100644 --- a/OshimaModules/Skills/魔法/风之轮.cs +++ b/OshimaModules/Skills/魔法/风之轮.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; +using Oshima.FunGame.OshimaModules.Effects.SkillEffects; namespace Oshima.FunGame.OshimaModules.Skills { @@ -8,37 +9,14 @@ namespace Oshima.FunGame.OshimaModules.Skills public override long Id => (long)MagicID.风之轮; public override string Name => "风之轮"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public override double MPCost => 50 + (60 * (Level - 1)); + public override double MPCost => Level > 0 ? 50 + (60 * (Level - 1)) : 50; public override double CD => 30; public override double CastTime => 10; public override double HardnessTime { get; set; } = 4; public 风之轮(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 风之轮特效(this)); - } - } - - public class 风之轮特效(Skill skill) : Effect(skill) - { - public override long Id => Skill.Id; - public override string Name => Skill.Name; - public override string Description => $"对目标敌人造成 {基础伤害:0.##} + {系数 * 100:0.##}% 敏捷 {(Skill.Level == 0 ? $"(+{等级系数 * 100:0.##}%/Lv)" : "")} [ {Damage:0.##} ] 点{CharacterSet.GetMagicDamageName(MagicType)}。"; - public override bool TargetSelf => false; - public override int TargetCount => 1; - - private static double 等级系数 => 0.4; - private double 基础伤害 => Skill.Level != 0 ? 120 + 80 * (Skill.Level - 1) : 120; - private double 系数 => Skill.Level != 0 ? 0.4 + 等级系数 * (Skill.Level - 1) : 0.4; - private double Damage => 基础伤害 + 系数 * Skill.Character?.AGI ?? 0; - - public override void OnSkillCasted(Character caster, List targets, Dictionary others) - { - if (targets.Count > 0) - { - Character enemy = targets[0]; - DamageToEnemy(caster, enemy, true, MagicType, Damage); - } + Effects.Add(new 基于属性的伤害(this, PrimaryAttribute.AGI, 120, 80, 0.4, 0.4)); } } }