diff --git a/Desktop/Solutions/EntityCreator/EntityEditor.cs b/Desktop/Solutions/EntityCreator/EntityEditor.cs index 5e3b10b..8713a28 100644 --- a/Desktop/Solutions/EntityCreator/EntityEditor.cs +++ b/Desktop/Solutions/EntityCreator/EntityEditor.cs @@ -363,27 +363,27 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions private void 删除角色物品方法() { - Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault(); - if (c != null) - { - if (c.Items.Count != 0 || c.EquipSlot.Any()) - { - ShowList l = new(); - l.AddListItem(c.Items.Select(s => s.GetIdName()).ToArray()); - l.ShowDialog(); - string selected = l.SelectItem; - Item? i = c.Items.Where(i => i.GetIdName() == selected).FirstOrDefault(); - if (i != null) - { - if (i.Equipable) c.UnEquip(c.EquipSlot.GetEquipItemToSlot(i)); - else c.Items.Remove(i); - } - } - else - { - MessageBox.Show("物品列表为空!"); - } - } + //Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault(); + //if (c != null) + //{ + // if (c.Items.Count != 0 || c.EquipSlot.Any()) + // { + // ShowList l = new(); + // l.AddListItem(c.Items.Select(s => s.GetIdName()).ToArray()); + // l.ShowDialog(); + // string selected = l.SelectItem; + // Item? i = c.Items.Where(i => i.GetIdName() == selected).FirstOrDefault(); + // if (i != null) + // { + // if (i.Equipable) c.UnEquip(c.EquipSlot.GetEquipItemToSlot(i)); + // else c.Items.Remove(i); + // } + // } + // else + // { + // MessageBox.Show("物品列表为空!"); + // } + //} } private void 为角色添加技能_Click(object sender, EventArgs e) diff --git a/Desktop/Solutions/EntityCreator/ShowDetail.cs b/Desktop/Solutions/EntityCreator/ShowDetail.cs index 7ecacce..42ad383 100644 --- a/Desktop/Solutions/EntityCreator/ShowDetail.cs +++ b/Desktop/Solutions/EntityCreator/ShowDetail.cs @@ -145,30 +145,30 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions private void 删物品_Click(object sender, EventArgs e) { - if (NowClick == 0 && BaseEntity is Character c) - { - if (c != null) - { - if (c.Items.Count != 0 || c.EquipSlot.Any()) - { - ShowList l = new(); - l.AddListItem(c.Items.OrderBy(i => i.Id).Select(i => i.GetIdName()).ToArray()); - l.ShowDialog(); - string selected = l.SelectItem; - Item? i = c.Items.Where(i => i.GetIdName() == selected).FirstOrDefault(); - if (i != null) - { - if (i.Equipable) c.UnEquip(c.EquipSlot.GetEquipItemToSlot(i)); - else c.Items.Remove(i); - 详细内容.Text = c.GetInfo(); - } - } - else - { - MessageBox.Show("物品列表为空!"); - } - } - } + //if (NowClick == 0 && BaseEntity is Character c) + //{ + // if (c != null) + // { + // if (c.Items.Count != 0 || c.EquipSlot.Any()) + // { + // ShowList l = new(); + // l.AddListItem(c.Items.OrderBy(i => i.Id).Select(i => i.GetIdName()).ToArray()); + // l.ShowDialog(); + // string selected = l.SelectItem; + // Item? i = c.Items.Where(i => i.GetIdName() == selected).FirstOrDefault(); + // if (i != null) + // { + // if (i.Equipable) c.UnEquip(c.EquipSlot.GetEquipItemToSlot(i)); + // else c.Items.Remove(i); + // 详细内容.Text = c.GetInfo(); + // } + // } + // else + // { + // MessageBox.Show("物品列表为空!"); + // } + // } + //} } private void 删技能_Click(object sender, EventArgs e) diff --git a/FunGame.Testing.sln b/FunGame.Testing.sln index 98180eb..db69ed8 100644 --- a/FunGame.Testing.sln +++ b/FunGame.Testing.sln @@ -15,6 +15,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunGame.Testing.Desktop", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunGame.Core", "..\FunGame.Core\FunGame.Core.csproj", "{94B564CD-7A1E-4B3C-AF78-23EBCD5D627E}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OshimaModules", "..\OshimaGameModule\OshimaModules\OshimaModules.csproj", "{35136317-2FBC-41C1-A3A0-C56B198FA440}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OshimaCore", "..\OshimaGameModule\OshimaCore\OshimaCore.csproj", "{A0EDE123-21D0-4886-8960-0802677FBC04}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -33,6 +37,14 @@ Global {94B564CD-7A1E-4B3C-AF78-23EBCD5D627E}.Debug|Any CPU.Build.0 = Debug|Any CPU {94B564CD-7A1E-4B3C-AF78-23EBCD5D627E}.Release|Any CPU.ActiveCfg = Release|Any CPU {94B564CD-7A1E-4B3C-AF78-23EBCD5D627E}.Release|Any CPU.Build.0 = Release|Any CPU + {35136317-2FBC-41C1-A3A0-C56B198FA440}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {35136317-2FBC-41C1-A3A0-C56B198FA440}.Debug|Any CPU.Build.0 = Debug|Any CPU + {35136317-2FBC-41C1-A3A0-C56B198FA440}.Release|Any CPU.ActiveCfg = Release|Any CPU + {35136317-2FBC-41C1-A3A0-C56B198FA440}.Release|Any CPU.Build.0 = Release|Any CPU + {A0EDE123-21D0-4886-8960-0802677FBC04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A0EDE123-21D0-4886-8960-0802677FBC04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A0EDE123-21D0-4886-8960-0802677FBC04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A0EDE123-21D0-4886-8960-0802677FBC04}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Library/Effects/EffectID.cs b/Library/Effects/EffectID.cs new file mode 100644 index 0000000..f589027 --- /dev/null +++ b/Library/Effects/EffectID.cs @@ -0,0 +1,163 @@ +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public enum EffectID : long + { + /// + /// 数值攻击力,参数:exatk + /// + ExATK = 8001, + + /// + /// 数值物理护甲,参数:exdef + /// + ExDEF = 8002, + + /// + /// 数值力量,参数:exstr + /// + ExSTR = 8003, + + /// + /// 数值敏捷,参数:exagi + /// + ExAGI = 8004, + + /// + /// 数值智力,参数:exint + /// + ExINT = 8005, + + /// + /// 数值技能硬直时间减少,参数:shtr + /// + SkillHardTimeReduce = 8006, + + /// + /// 数值普攻硬直时间减少,参数:nahtr + /// + NormalAttackHardTimeReduce = 8007, + + /// + /// 加速系数%,参数:exacc + /// + AccelerationCoefficient = 8008, + + /// + /// 数值行动速度,参数:exspd + /// + ExSPD = 8009, + + /// + /// 行动系数%,参考:exac + /// + ExActionCoefficient = 8010, + + /// + /// 冷却缩减%,参数:excdr + /// + ExCDR = 8011, + + /// + /// 数值生命值,参数:exhp + /// + ExMaxHP = 8012, + + /// + /// 数值魔法值,参数:exmp + /// + ExMaxMP = 8013, + + /// + /// 暴击率%,参数:excr + /// + ExCritRate = 8014, + + /// + /// 暴击伤害%,参数:excrd + /// + ExCritDMG = 8015, + + /// + /// 闪避率%,参数:exer + /// + ExEvadeRate = 8016, + + /// + /// 物理穿透%,参数:exppt + /// + PhysicalPenetration = 8017, + + /// + /// 魔法穿透%,参数:exmpt + /// + MagicalPenetration = 8018, + + /// + /// 物理伤害减免%,参数:expdr + /// + ExPDR = 8019, + + /// + /// 魔法抗性% + /// 参数: + /// 魔法类型(对应MagicType,0为所有):mdftype + /// 魔法抗性%:mdfvalue + /// + ExMDF = 8020, + + /// + /// 数值生命回复,参数:exhr + /// + ExHR = 8021, + + /// + /// 数值魔法回复,参数:exmr + /// + ExMR = 8022, + + /// + /// 攻击力%,参数:exatk + /// + ExATK2 = 8023, + + /// + /// 物理护甲%,参数:exdef + /// + ExDEF2 = 8024, + + /// + /// 力量%,参数:exstr + /// + ExSTR2 = 8025, + + /// + /// 敏捷%,参数:exagi + /// + ExAGI2 = 8026, + + /// + /// 智力%,参数:exint + /// + ExINT2 = 8027, + + /// + /// 技能硬直时间减少%,参数:shtr + /// + SkillHardTimeReduce2 = 8028, + + /// + /// 普攻硬直时间减少%,参数:nahtr + /// + NormalAttackHardTimeReduce2 = 8029, + + /// + /// 最大生命值%,参数:exhp + /// + ExMaxHP2 = 8030, + + /// + /// 最大魔法值%,参数:exmp + /// + ExMaxMP2 = 8031, + } +} diff --git a/Library/Effects/ItemEffects/冷却缩减加成.cs b/Library/Effects/ItemEffects/冷却缩减加成.cs index 18e822f..7521691 100644 --- a/Library/Effects/ItemEffects/冷却缩减加成.cs +++ b/Library/Effects/ItemEffects/冷却缩减加成.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.ItemEffects +namespace Milimoe.FunGame.Testing.Effects.ItemEffects { public class 冷却缩减加成 : Effect { diff --git a/Library/Effects/ItemEffects/技能硬直时间减少.cs b/Library/Effects/ItemEffects/技能硬直时间减少.cs index 4c81131..1aad4e7 100644 --- a/Library/Effects/ItemEffects/技能硬直时间减少.cs +++ b/Library/Effects/ItemEffects/技能硬直时间减少.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.ItemEffects +namespace Milimoe.FunGame.Testing.Effects.ItemEffects { public class 技能硬直时间减少 : Effect { diff --git a/Library/Effects/ItemEffects/攻击力加成.cs b/Library/Effects/ItemEffects/攻击力加成.cs index 8c72e55..bf7558a 100644 --- a/Library/Effects/ItemEffects/攻击力加成.cs +++ b/Library/Effects/ItemEffects/攻击力加成.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.ItemEffects +namespace Milimoe.FunGame.Testing.Effects.ItemEffects { public class 攻击力加成 : Effect { diff --git a/Library/Effects/ItemEffects/普攻硬直时间减少.cs b/Library/Effects/ItemEffects/普攻硬直时间减少.cs index 95bdf74..c7b6a0a 100644 --- a/Library/Effects/ItemEffects/普攻硬直时间减少.cs +++ b/Library/Effects/ItemEffects/普攻硬直时间减少.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.ItemEffects +namespace Milimoe.FunGame.Testing.Effects.ItemEffects { public class 普攻硬直时间减少 : Effect { diff --git a/Library/Effects/ItemEffects/物理护甲加成.cs b/Library/Effects/ItemEffects/物理护甲加成.cs index 6571c49..62d6f69 100644 --- a/Library/Effects/ItemEffects/物理护甲加成.cs +++ b/Library/Effects/ItemEffects/物理护甲加成.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.ItemEffects +namespace Milimoe.FunGame.Testing.Effects.ItemEffects { public class 物理护甲加成 : Effect { diff --git a/Library/Effects/OpenEffects/AccelerationCoefficient.cs b/Library/Effects/OpenEffects/AccelerationCoefficient.cs index 7e481e1..4d1ca5f 100644 --- a/Library/Effects/OpenEffects/AccelerationCoefficient.cs +++ b/Library/Effects/OpenEffects/AccelerationCoefficient.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class AccelerationCoefficient : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.AccelerationCoefficient -= 实际加成; } - public AccelerationCoefficient(Skill skill, Character? source = null, Item? item = null) : base(skill) + public AccelerationCoefficient(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exacc", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exACC)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exacc", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exACC)) { 实际加成 = exACC; } diff --git a/Library/Effects/OpenEffects/EffectID.cs b/Library/Effects/OpenEffects/EffectID.cs deleted file mode 100644 index 6c86f7b..0000000 --- a/Library/Effects/OpenEffects/EffectID.cs +++ /dev/null @@ -1,115 +0,0 @@ -namespace Milimoe.FunGame.Testing.OpenEffects -{ - public enum EffectID : long - { - /// - /// exatk - /// - ExATK = 8001, - - /// - /// exdef - /// - ExDEF = 8002, - - /// - /// exstr - /// - ExSTR = 8003, - - /// - /// exagi - /// - ExAGI = 8004, - - /// - /// exint - /// - ExINT = 8005, - - /// - /// shtr - /// - SkillHardTimeReduce = 8006, - - /// - /// nahtr - /// - NormalAttackHardTimeReduce = 8007, - - /// - /// exacc - /// - AccelerationCoefficient = 8008, - - /// - /// exspd - /// - ExSPD = 8009, - - /// - /// exac - /// - ExActionCoefficient = 8010, - - /// - /// excdr - /// - ExCDR = 8011, - - /// - /// exhp - /// - ExMaxHP = 8012, - - /// - /// exmp - /// - ExMaxMP = 8013, - - /// - /// excr - /// - ExCritRate = 8014, - - /// - /// excrd - /// - ExCritDMG = 8015, - - /// - /// exer - /// - ExEvadeRate = 8016, - - /// - /// expp - /// - PhysicalPenetration = 8017, - - /// - /// exmp - /// - MagicalPenetration = 8018, - - /// - /// expdr - /// - ExPDR = 8019, - - /// - /// mdftype, mdfvalue - /// - ExMDF = 8020, - - /// - /// exhr - /// - ExHR = 8021, - - /// - /// exmr - /// - ExMR = 8022 - } -} diff --git a/Library/Effects/OpenEffects/ExAGI.cs b/Library/Effects/OpenEffects/ExAGI.cs index f3ec161..09b4574 100644 --- a/Library/Effects/OpenEffects/ExAGI.cs +++ b/Library/Effects/OpenEffects/ExAGI.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExAGI : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExAGI -= 实际加成; } - public ExAGI(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExAGI(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exagi", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exAGI)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exagi", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exAGI)) { 实际加成 = exAGI; } diff --git a/Library/Effects/OpenEffects/ExAGI2.cs b/Library/Effects/OpenEffects/ExAGI2.cs new file mode 100644 index 0000000..3551893 --- /dev/null +++ b/Library/Effects/OpenEffects/ExAGI2.cs @@ -0,0 +1,45 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class ExAGI2 : Effect + { + public override long Id => (long)EffectID.ExAGI2; + public override string Name => "敏捷加成"; + public override string Description => $"增加角色 {加成比例 * 100:0.##}% [ {实际加成:0.##} ] 点敏捷。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 加成比例 = 0; + private double 实际加成 = 0; + + public override void OnEffectGained(Character character) + { + 实际加成 = character.BaseAGI * 加成比例; + character.ExAGI += 实际加成; + } + + public override void OnEffectLost(Character character) + { + character.ExAGI -= 实际加成; + 实际加成 = 0; + } + + public ExAGI2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("exagi", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exAGI)) + { + 加成比例 = exAGI; + } + } + } + } +} diff --git a/Library/Effects/OpenEffects/ExATK.cs b/Library/Effects/OpenEffects/ExATK.cs index 9ede1eb..3ca13f2 100644 --- a/Library/Effects/OpenEffects/ExATK.cs +++ b/Library/Effects/OpenEffects/ExATK.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExATK : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExATK2 -= 实际加成; } - public ExATK(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExATK(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exatk", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exATK)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exatk", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exATK)) { 实际加成 = exATK; } diff --git a/Library/Effects/OpenEffects/ExATK2.cs b/Library/Effects/OpenEffects/ExATK2.cs new file mode 100644 index 0000000..2b15805 --- /dev/null +++ b/Library/Effects/OpenEffects/ExATK2.cs @@ -0,0 +1,45 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class ExATK2 : Effect + { + public override long Id => (long)EffectID.ExATK2; + public override string Name => "攻击力加成"; + public override string Description => $"增加角色 {加成比例 * 100:0.##}% [ {实际加成:0.##} ] 点攻击力。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 加成比例 = 0; + private double 实际加成 = 0; + + public override void OnEffectGained(Character character) + { + 实际加成 = character.BaseATK * 加成比例; + character.ExATK2 += 实际加成; + } + + public override void OnEffectLost(Character character) + { + character.ExATK2 -= 实际加成; + 实际加成 = 0; + } + + public ExATK2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("exatk", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exATK)) + { + 加成比例 = exATK; + } + } + } + } +} diff --git a/Library/Effects/OpenEffects/ExActionCoefficient.cs b/Library/Effects/OpenEffects/ExActionCoefficient.cs index 36f6822..1f9a703 100644 --- a/Library/Effects/OpenEffects/ExActionCoefficient.cs +++ b/Library/Effects/OpenEffects/ExActionCoefficient.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExActionCoefficient : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExActionCoefficient -= 实际加成; } - public ExActionCoefficient(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExActionCoefficient(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exac", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exAC)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exac", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exAC)) { 实际加成 = exAC; } diff --git a/Library/Effects/OpenEffects/ExCDR.cs b/Library/Effects/OpenEffects/ExCDR.cs index f55208b..348dbbc 100644 --- a/Library/Effects/OpenEffects/ExCDR.cs +++ b/Library/Effects/OpenEffects/ExCDR.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExCDR : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExCDR -= 实际加成; } - public ExCDR(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExCDR(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("excdr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exCDR)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("excdr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exCDR)) { 实际加成 = exCDR; } diff --git a/Library/Effects/OpenEffects/ExCritDMG.cs b/Library/Effects/OpenEffects/ExCritDMG.cs index a337d20..123c123 100644 --- a/Library/Effects/OpenEffects/ExCritDMG.cs +++ b/Library/Effects/OpenEffects/ExCritDMG.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExCritDMG : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExCritDMG -= 实际加成; } - public ExCritDMG(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExCritDMG(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("excrd", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exCRD)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("excrd", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exCRD)) { 实际加成 = exCRD; } diff --git a/Library/Effects/OpenEffects/ExCritRate.cs b/Library/Effects/OpenEffects/ExCritRate.cs index 213036c..f51ceb9 100644 --- a/Library/Effects/OpenEffects/ExCritRate.cs +++ b/Library/Effects/OpenEffects/ExCritRate.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExCritRate : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExCritRate -= 实际加成; } - public ExCritRate(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExCritRate(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("excr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exCR)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("excr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exCR)) { 实际加成 = exCR; } diff --git a/Library/Effects/OpenEffects/ExDEF.cs b/Library/Effects/OpenEffects/ExDEF.cs index 424be1d..8cecf16 100644 --- a/Library/Effects/OpenEffects/ExDEF.cs +++ b/Library/Effects/OpenEffects/ExDEF.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExDEF : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExDEF2 -= 实际加成; } - public ExDEF(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExDEF(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exdef", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exDEF)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exdef", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exDEF)) { 实际加成 = exDEF; } diff --git a/Library/Effects/OpenEffects/ExDEF2.cs b/Library/Effects/OpenEffects/ExDEF2.cs new file mode 100644 index 0000000..ba434d9 --- /dev/null +++ b/Library/Effects/OpenEffects/ExDEF2.cs @@ -0,0 +1,45 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class ExDEF2 : Effect + { + public override long Id => (long)EffectID.ExDEF2; + public override string Name => "物理护甲加成"; + public override string Description => $"增加角色 {加成比例 * 100:0.##}% [ {实际加成:0.##} ] 点物理护甲。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 加成比例 = 0; + private double 实际加成 = 0; + + public override void OnEffectGained(Character character) + { + 实际加成 = character.BaseDEF * 加成比例; + character.ExDEF2 += 实际加成; + } + + public override void OnEffectLost(Character character) + { + character.ExDEF2 -= 实际加成; + 实际加成 = 0; + } + + public ExDEF2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("exdef", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exDEF)) + { + 加成比例 = exDEF; + } + } + } + } +} diff --git a/Library/Effects/OpenEffects/ExEvadeRate.cs b/Library/Effects/OpenEffects/ExEvadeRate.cs index 96ebcf6..6bcaabb 100644 --- a/Library/Effects/OpenEffects/ExEvadeRate.cs +++ b/Library/Effects/OpenEffects/ExEvadeRate.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExEvadeRate : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExEvadeRate -= 实际加成; } - public ExEvadeRate(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExEvadeRate(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exer", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exER)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exer", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exER)) { 实际加成 = exER; } diff --git a/Library/Effects/OpenEffects/ExHR.cs b/Library/Effects/OpenEffects/ExHR.cs index 82220f5..803e635 100644 --- a/Library/Effects/OpenEffects/ExHR.cs +++ b/Library/Effects/OpenEffects/ExHR.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExHR : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExHR -= 实际加成; } - public ExHR(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExHR(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exhr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exHR)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exhr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exHR)) { 实际加成 = exHR; } diff --git a/Library/Effects/OpenEffects/ExINT.cs b/Library/Effects/OpenEffects/ExINT.cs index 77effde..62b6d80 100644 --- a/Library/Effects/OpenEffects/ExINT.cs +++ b/Library/Effects/OpenEffects/ExINT.cs @@ -1,7 +1,7 @@ - using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExINT : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExINT -= 实际加成; } - public ExINT(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExINT(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exint", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exINT)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exint", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exINT)) { 实际加成 = exINT; } diff --git a/Library/Effects/OpenEffects/ExINT2.cs b/Library/Effects/OpenEffects/ExINT2.cs new file mode 100644 index 0000000..aa684d0 --- /dev/null +++ b/Library/Effects/OpenEffects/ExINT2.cs @@ -0,0 +1,45 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class ExINT2 : Effect + { + public override long Id => (long)EffectID.ExINT2; + public override string Name => "智力加成"; + public override string Description => $"增加角色 {加成比例 * 100:0.##}% [ {实际加成:0.##} ] 点智力。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 加成比例 = 0; + private double 实际加成 = 0; + + public override void OnEffectGained(Character character) + { + 实际加成 = character.BaseINT * 加成比例; + character.ExINT += 实际加成; + } + + public override void OnEffectLost(Character character) + { + character.ExINT -= 实际加成; + 实际加成 = 0; + } + + public ExINT2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("exint", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exINT)) + { + 加成比例 = exINT; + } + } + } + } +} diff --git a/Library/Effects/OpenEffects/ExMDF.cs b/Library/Effects/OpenEffects/ExMDF.cs index 78f3428..9877fcf 100644 --- a/Library/Effects/OpenEffects/ExMDF.cs +++ b/Library/Effects/OpenEffects/ExMDF.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExMDF : Effect { @@ -45,15 +45,7 @@ namespace Milimoe.FunGame.Testing.OpenEffects break; case MagicType.None: default: - character.MDF.None += 实际加成; - character.MDF.Starmark += 实际加成; - character.MDF.PurityNatural += 实际加成; - character.MDF.PurityContemporary += 实际加成; - character.MDF.Bright += 实际加成; - character.MDF.Shadow += 实际加成; - character.MDF.Element += 实际加成; - character.MDF.Fleabane += 实际加成; - character.MDF.Particle += 实际加成; + character.MDF.SetAllValue(实际加成, false); break; } } @@ -88,20 +80,20 @@ namespace Milimoe.FunGame.Testing.OpenEffects break; case MagicType.None: default: - character.MDF.None -= 实际加成; + character.MDF.SetAllValue(-实际加成, false); break; } } - public ExMDF(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExMDF(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("mdfType", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && int.TryParse(skill.OtherArgs[key].ToString(), out int mdfType)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("mdfType", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && int.TryParse(Values[key].ToString(), out int mdfType)) { if (Enum.IsDefined(typeof(MagicType), mdfType)) { @@ -112,8 +104,8 @@ namespace Milimoe.FunGame.Testing.OpenEffects 魔法类型 = MagicType.None; } } - key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("mdfvalue", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double mdfValue)) + key = Values.Keys.FirstOrDefault(s => s.Equals("mdfvalue", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double mdfValue)) { 实际加成 = mdfValue; } diff --git a/Library/Effects/OpenEffects/ExMR.cs b/Library/Effects/OpenEffects/ExMR.cs index 91da5ad..387f73d 100644 --- a/Library/Effects/OpenEffects/ExMR.cs +++ b/Library/Effects/OpenEffects/ExMR.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExMR : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExMR -= 实际加成; } - public ExMR(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExMR(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exmr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exMR)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exmr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exMR)) { 实际加成 = exMR; } diff --git a/Library/Effects/OpenEffects/ExMaxHP.cs b/Library/Effects/OpenEffects/ExMaxHP.cs index 1d3e388..5ef156e 100644 --- a/Library/Effects/OpenEffects/ExMaxHP.cs +++ b/Library/Effects/OpenEffects/ExMaxHP.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExMaxHP : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExHP2 -= 实际加成; } - public ExMaxHP(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExMaxHP(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exhp", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exHP)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exhp", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exHP)) { 实际加成 = exHP; } diff --git a/Library/Effects/OpenEffects/ExMaxHP2.cs b/Library/Effects/OpenEffects/ExMaxHP2.cs new file mode 100644 index 0000000..506904e --- /dev/null +++ b/Library/Effects/OpenEffects/ExMaxHP2.cs @@ -0,0 +1,45 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class ExMaxHP2 : Effect + { + public override long Id => (long)EffectID.ExMaxHP2; + public override string Name => "最大生命值加成"; + public override string Description => $"增加角色 {加成比例 * 100:0.##}% [ {实际加成:0.##} ] 点最大生命值。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 加成比例 = 0; + private double 实际加成 = 0; + + public override void OnEffectGained(Character character) + { + 实际加成 = character.BaseHP * 加成比例; + character.ExHP2 += 实际加成; + } + + public override void OnEffectLost(Character character) + { + character.ExHP2 -= 实际加成; + 实际加成 = 0; + } + + public ExMaxHP2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("exhp", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exHP)) + { + 加成比例 = exHP; + } + } + } + } +} diff --git a/Library/Effects/OpenEffects/ExMaxMP.cs b/Library/Effects/OpenEffects/ExMaxMP.cs index ea090f0..584dc7f 100644 --- a/Library/Effects/OpenEffects/ExMaxMP.cs +++ b/Library/Effects/OpenEffects/ExMaxMP.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExMaxMP : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExMP2 -= 实际加成; } - public ExMaxMP(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExMaxMP(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exmp", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exMP)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exmp", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exMP)) { 实际加成 = exMP; } diff --git a/Library/Effects/OpenEffects/ExMaxMP2.cs b/Library/Effects/OpenEffects/ExMaxMP2.cs new file mode 100644 index 0000000..6f4fd4a --- /dev/null +++ b/Library/Effects/OpenEffects/ExMaxMP2.cs @@ -0,0 +1,45 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class ExMaxMP2 : Effect + { + public override long Id => (long)EffectID.ExMaxMP2; + public override string Name => "最大魔法值加成"; + public override string Description => $"增加角色 {加成比例 * 100:0.##}% [ {实际加成:0.##} ] 点最大魔法值。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 加成比例 = 0; + private double 实际加成 = 0; + + public override void OnEffectGained(Character character) + { + 实际加成 = character.BaseMP * 加成比例; + character.ExMP2 += 实际加成; + } + + public override void OnEffectLost(Character character) + { + character.ExMP2 -= 实际加成; + 实际加成 = 0; + } + + public ExMaxMP2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("exmp", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exMP)) + { + 加成比例 = exMP; + } + } + } + } +} diff --git a/Library/Effects/OpenEffects/ExPDR.cs b/Library/Effects/OpenEffects/ExPDR.cs index b0a6027..b800367 100644 --- a/Library/Effects/OpenEffects/ExPDR.cs +++ b/Library/Effects/OpenEffects/ExPDR.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExPDR : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExPDR -= 实际加成; } - public ExPDR(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExPDR(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("expdr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exPDR)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("expdr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exPDR)) { 实际加成 = exPDR; } diff --git a/Library/Effects/OpenEffects/ExSPD.cs b/Library/Effects/OpenEffects/ExSPD.cs index 4d0f2df..6912561 100644 --- a/Library/Effects/OpenEffects/ExSPD.cs +++ b/Library/Effects/OpenEffects/ExSPD.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExSPD : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.ExSPD -= 实际加成; } - public ExSPD(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExSPD(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exspd", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exSPD)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exspd", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exSPD)) { 实际加成 = exSPD; } diff --git a/Library/Effects/OpenEffects/ExSTR.cs b/Library/Effects/OpenEffects/ExSTR.cs index 5c8b913..95445af 100644 --- a/Library/Effects/OpenEffects/ExSTR.cs +++ b/Library/Effects/OpenEffects/ExSTR.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class ExSTR : Effect { @@ -16,23 +16,23 @@ namespace Milimoe.FunGame.Testing.OpenEffects public override void OnEffectGained(Character character) { - character.ExDEF2 += 实际加成; + character.ExSTR += 实际加成; } public override void OnEffectLost(Character character) { - character.ExDEF2 -= 实际加成; + character.ExSTR -= 实际加成; } - public ExSTR(Skill skill, Character? source = null, Item? item = null) : base(skill) + public ExSTR(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exstr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exSTR)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exstr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exSTR)) { 实际加成 = exSTR; } diff --git a/Library/Effects/OpenEffects/ExSTR2.cs b/Library/Effects/OpenEffects/ExSTR2.cs new file mode 100644 index 0000000..cb49ad4 --- /dev/null +++ b/Library/Effects/OpenEffects/ExSTR2.cs @@ -0,0 +1,45 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class ExSTR2 : Effect + { + public override long Id => (long)EffectID.ExSTR2; + public override string Name => "力量加成"; + public override string Description => $"增加角色 {加成比例 * 100:0.##}% [ {实际加成:0.##} ] 点力量。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 加成比例 = 0; + private double 实际加成 = 0; + + public override void OnEffectGained(Character character) + { + 实际加成 = character.BaseSTR * 加成比例; + character.ExSTR += 实际加成; + } + + public override void OnEffectLost(Character character) + { + character.ExSTR -= 实际加成; + 实际加成 = 0; + } + + public ExSTR2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("exstr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exSTR)) + { + 加成比例 = exSTR; + } + } + } + } +} diff --git a/Library/Effects/OpenEffects/MagicalPenetration.cs b/Library/Effects/OpenEffects/MagicalPenetration.cs index 9d8d52a..fcfccb5 100644 --- a/Library/Effects/OpenEffects/MagicalPenetration.cs +++ b/Library/Effects/OpenEffects/MagicalPenetration.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class MagicalPenetration : Effect { @@ -24,17 +24,17 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.MagicalPenetration -= 实际加成; } - public MagicalPenetration(Skill skill, Character? source = null, Item? item = null) : base(skill) + public MagicalPenetration(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("exmp", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exMP)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exmpt", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exMPT)) { - 实际加成 = exMP; + 实际加成 = exMPT; } } } diff --git a/Library/Effects/OpenEffects/NormalAttackHardTimeReduce.cs b/Library/Effects/OpenEffects/NormalAttackHardTimeReduce.cs index 32a524f..5407aca 100644 --- a/Library/Effects/OpenEffects/NormalAttackHardTimeReduce.cs +++ b/Library/Effects/OpenEffects/NormalAttackHardTimeReduce.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class NormalAttackHardTimeReduce : Effect { @@ -24,15 +24,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.NormalAttack.HardnessTime += 实际硬直时间减少; } - public NormalAttackHardTimeReduce(Skill skill, Character? source = null, Item? item = null) : base(skill) + public NormalAttackHardTimeReduce(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("nahtr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double nahtr)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("nahtr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double nahtr)) { 实际硬直时间减少 = nahtr; } diff --git a/Library/Effects/OpenEffects/NormalAttackHardTimeReduce2.cs b/Library/Effects/OpenEffects/NormalAttackHardTimeReduce2.cs new file mode 100644 index 0000000..f25d298 --- /dev/null +++ b/Library/Effects/OpenEffects/NormalAttackHardTimeReduce2.cs @@ -0,0 +1,42 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class NormalAttackHardTimeReduce2 : Effect + { + public override long Id => (long)EffectID.NormalAttackHardTimeReduce2; + public override string Name => Skill.Name; + public override string Description => $"减少角色的普通攻击 {减少比例 * 100:0.##}% 硬直时间。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 减少比例 = 0; + + public override void OnEffectGained(Character character) + { + character.NormalAttack.HardnessTime -= character.NormalAttack.HardnessTime * 减少比例; + } + + public override void OnEffectLost(Character character) + { + character.NormalAttack.HardnessTime += character.NormalAttack.HardnessTime * 减少比例; + } + + public NormalAttackHardTimeReduce2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("nahtr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double nahtr)) + { + 减少比例 = nahtr; + } + } + } + } +} diff --git a/Library/Effects/OpenEffects/PhysicalPenetration.cs b/Library/Effects/OpenEffects/PhysicalPenetration.cs index 6197f0a..76a8c51 100644 --- a/Library/Effects/OpenEffects/PhysicalPenetration.cs +++ b/Library/Effects/OpenEffects/PhysicalPenetration.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class PhysicalPenetration : Effect { @@ -24,17 +24,17 @@ namespace Milimoe.FunGame.Testing.OpenEffects character.PhysicalPenetration -= 实际加成; } - public PhysicalPenetration(Skill skill, Character? source = null, Item? item = null) : base(skill) + public PhysicalPenetration(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("expp", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double exPP)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("exppt", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exPPT)) { - 实际加成 = exPP; + 实际加成 = exPPT; } } } diff --git a/Library/Effects/OpenEffects/SkillHardTimeReduce.cs b/Library/Effects/OpenEffects/SkillHardTimeReduce.cs index 2220923..4ed1b09 100644 --- a/Library/Effects/OpenEffects/SkillHardTimeReduce.cs +++ b/Library/Effects/OpenEffects/SkillHardTimeReduce.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.OpenEffects +namespace Milimoe.FunGame.Testing.Effects.OpenEffects { public class SkillHardTimeReduce : Effect { @@ -40,15 +40,15 @@ namespace Milimoe.FunGame.Testing.OpenEffects } } - public SkillHardTimeReduce(Skill skill, Character? source = null, Item? item = null) : base(skill) + public SkillHardTimeReduce(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) { GamingQueue = skill.GamingQueue; Source = source; Item = item; - if (skill.OtherArgs.Count > 0) + if (Values.Count > 0) { - string key = skill.OtherArgs.Keys.FirstOrDefault(s => s.Equals("shtr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; - if (key.Length > 0 && double.TryParse(skill.OtherArgs[key].ToString(), out double shtr)) + string key = Values.Keys.FirstOrDefault(s => s.Equals("shtr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double shtr)) { 实际硬直时间减少 = shtr; } diff --git a/Library/Effects/OpenEffects/SkillHardTimeReduce2.cs b/Library/Effects/OpenEffects/SkillHardTimeReduce2.cs new file mode 100644 index 0000000..d8745c4 --- /dev/null +++ b/Library/Effects/OpenEffects/SkillHardTimeReduce2.cs @@ -0,0 +1,58 @@ +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Testing.Effects.OpenEffects +{ + public class SkillHardTimeReduce2 : Effect + { + public override long Id => (long)EffectID.SkillHardTimeReduce2; + public override string Name => Skill.Name; + public override string Description => $"减少角色的所有主动技能 {减少比例 * 100:0.##}% 硬直时间。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : ""); + public override EffectType EffectType => EffectType.Item; + public override bool TargetSelf => true; + + public Item? Item { get; } + private readonly double 减少比例 = 0; + + public override void OnEffectGained(Character character) + { + foreach (Skill s in character.Skills) + { + s.HardnessTime -= s.HardnessTime * 减少比例; + } + foreach (Skill? s in character.Items.Select(i => i.Skills.Active)) + { + if (s != null) + s.HardnessTime -= s.HardnessTime * 减少比例; + } + } + + public override void OnEffectLost(Character character) + { + foreach (Skill s in character.Skills) + { + s.HardnessTime += s.HardnessTime * 减少比例; + } + foreach (Skill? s in character.Items.Select(i => i.Skills.Active)) + { + if (s != null) + s.HardnessTime += s.HardnessTime * 减少比例; + } + } + + public SkillHardTimeReduce2(Skill skill, Dictionary args, Character? source = null, Item? item = null) : base(skill, args) + { + GamingQueue = skill.GamingQueue; + Source = source; + Item = item; + if (Values.Count > 0) + { + string key = Values.Keys.FirstOrDefault(s => s.Equals("shtr", StringComparison.CurrentCultureIgnoreCase)) ?? ""; + if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double shtr)) + { + 减少比例 = shtr; + } + } + } + } +} diff --git a/Library/Effects/眩晕.cs b/Library/Effects/SkillEffects/眩晕.cs similarity index 97% rename from Library/Effects/眩晕.cs rename to Library/Effects/SkillEffects/眩晕.cs index 4219d2a..658a76c 100644 --- a/Library/Effects/眩晕.cs +++ b/Library/Effects/SkillEffects/眩晕.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.Effects +namespace Milimoe.FunGame.Testing.Effects.SkillEffects { public class 眩晕 : Effect { diff --git a/Library/Effects/累积之压标记.cs b/Library/Effects/SkillEffects/累积之压标记.cs similarity index 94% rename from Library/Effects/累积之压标记.cs rename to Library/Effects/SkillEffects/累积之压标记.cs index e02c728..1d9bbd0 100644 --- a/Library/Effects/累积之压标记.cs +++ b/Library/Effects/SkillEffects/累积之压标记.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Milimoe.FunGame.Testing.Effects +namespace Milimoe.FunGame.Testing.Effects.SkillEffects { public class 累积之压标记 : Effect { diff --git a/Library/FunGame.Testing.csproj b/Library/FunGame.Testing.csproj index 86c8c16..ae4b497 100644 --- a/Library/FunGame.Testing.csproj +++ b/Library/FunGame.Testing.csproj @@ -30,4 +30,9 @@ + + + + + diff --git a/Library/Items/Accessory/攻击之爪.cs b/Library/Items/Accessory/攻击之爪.cs index b83446f..1e1fe0f 100644 --- a/Library/Items/Accessory/攻击之爪.cs +++ b/Library/Items/Accessory/攻击之爪.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Testing.Skills; -using Milimoe.FunGame.Testing.ItemEffects; +using Milimoe.FunGame.Testing.Effects.ItemEffects; namespace Milimoe.FunGame.Testing.Items { @@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Items public override string Name => "攻击之爪 +10"; public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : ""; - public 攻击之爪10(Character? character = null) : base(ItemType.Accessory, slot: EquipSlotType.Accessory) + public 攻击之爪10(Character? character = null) : base(ItemType.Accessory) { Skills.Passives.Add(new 攻击之爪技能(character, this, 10)); } @@ -23,7 +23,7 @@ namespace Milimoe.FunGame.Testing.Items public override string Name => "攻击之爪 +30"; public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : ""; - public 攻击之爪30(Character? character = null) : base(ItemType.Accessory, slot: EquipSlotType.Accessory) + public 攻击之爪30(Character? character = null) : base(ItemType.Accessory) { Skills.Passives.Add(new 攻击之爪技能(character, this, 30)); } @@ -35,7 +35,7 @@ namespace Milimoe.FunGame.Testing.Items public override string Name => "攻击之爪 +50"; public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : ""; - public 攻击之爪50(Character? character = null) : base(ItemType.Accessory, slot: EquipSlotType.Accessory) + public 攻击之爪50(Character? character = null) : base(ItemType.Accessory) { Skills.Passives.Add(new 攻击之爪技能(character, this, 50)); } @@ -46,7 +46,6 @@ namespace Milimoe.FunGame.Testing.Items public override long Id => (long)ItemPassiveID.攻击之爪; public override string Name => "攻击之爪"; public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; - public Item? Item { get; } public 攻击之爪技能(Character? character = null, Item? item = null, double exATK = 0) : base(SkillType.Passive, character) { diff --git a/Library/Items/Weapon/独奏弓.cs b/Library/Items/Weapon/独奏弓.cs index 19258f9..a34cd17 100644 --- a/Library/Items/Weapon/独奏弓.cs +++ b/Library/Items/Weapon/独奏弓.cs @@ -1,6 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -using Milimoe.FunGame.Testing.ItemEffects; +using Milimoe.FunGame.Testing.Effects.ItemEffects; namespace FunGame.Testing.Items { @@ -10,7 +10,7 @@ namespace FunGame.Testing.Items public override string Name => "独奏弓"; public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : ""; - public 独奏弓(Character? character = null) : base(ItemType.Weapon, slot: EquipSlotType.Weapon) + public 独奏弓(Character? character = null) : base(ItemType.Weapon) { WeaponType = WeaponType.Bow; Skills.Passives.Add(new 独奏弓技能(character, this)); diff --git a/Library/Main.cs b/Library/Main.cs index 038a917..ec8cdf8 100644 --- a/Library/Main.cs +++ b/Library/Main.cs @@ -1,3 +1,12 @@ -using Milimoe.FunGame.Testing.Tests; +using Oshima.Core.Utils; +using Oshima.FunGame.OshimaModules; -_ = new SkillJSONTest(); +CharacterModule cm = new(); +cm.Load(); +SkillModule sm = new(); +sm.Load(); +ItemModule im = new(); +im.Load(); + +FunGameSimulation.InitCharacter(); +FunGameSimulation.StartGame(true, true); diff --git a/Library/Skills/ColdBlue/嗜血本能.cs b/Library/Skills/ColdBlue/嗜血本能.cs index e457a21..48e7ff0 100644 --- a/Library/Skills/ColdBlue/嗜血本能.cs +++ b/Library/Skills/ColdBlue/嗜血本能.cs @@ -1,6 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -using Milimoe.FunGame.Testing.Effects; +using Milimoe.FunGame.Testing.Effects.SkillEffects; namespace Milimoe.FunGame.Testing.Skills { diff --git a/Library/Skills/ColdBlue/累积之压.cs b/Library/Skills/ColdBlue/累积之压.cs index ae351ab..cc97175 100644 --- a/Library/Skills/ColdBlue/累积之压.cs +++ b/Library/Skills/ColdBlue/累积之压.cs @@ -1,6 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -using Milimoe.FunGame.Testing.Effects; +using Milimoe.FunGame.Testing.Effects.SkillEffects; namespace Milimoe.FunGame.Testing.Skills { diff --git a/Library/Skills/MagicalGirl/毁灭之势.cs b/Library/Skills/MagicalGirl/毁灭之势.cs index 01ad7f6..d142f8c 100644 --- a/Library/Skills/MagicalGirl/毁灭之势.cs +++ b/Library/Skills/MagicalGirl/毁灭之势.cs @@ -24,10 +24,10 @@ namespace Milimoe.FunGame.Testing.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"每时间提升 5.5% 所有伤害,无上限,但受到伤害时效果清零。" + (累计伤害 > 0 ? $"(当前总提升:{累计伤害 * 100:0.##}%)" : ""); + public override string Description => $"每时间提升 {伤害提升 * 100:0.##}% 所有伤害,无上限,但受到伤害时效果清零。" + (累计伤害 > 0 ? $"(当前总提升:{累计伤害 * 100:0.##}%)" : ""); public override bool TargetSelf => true; - private readonly double 伤害提升 = 0.055; + private readonly double 伤害提升 = 0.04; private double 累计伤害 = 0; public override bool AlterActualDamageAfterCalculation(Character character, Character enemy, ref double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult) diff --git a/Library/Skills/MagicalGirl/绝对领域.cs b/Library/Skills/MagicalGirl/绝对领域.cs index c7a0c4f..0713e42 100644 --- a/Library/Skills/MagicalGirl/绝对领域.cs +++ b/Library/Skills/MagicalGirl/绝对领域.cs @@ -27,7 +27,7 @@ namespace Milimoe.FunGame.Testing.Skills public override bool Durative => true; public override double Duration => 16 + 释放时的能量值 * 0.03; - private double 系数 => 0.3 + 0.03 * (Level - 1); + private double 系数 => 0.2 + 0.015 * (Level - 1); private double 敏捷提升 => 系数 * Skill.Character?.BaseAGI ?? 0; private double 实际敏捷提升 = 0; private double 释放时的能量值 = 0; diff --git a/Library/Skills/Mayor/精准打击.cs b/Library/Skills/Mayor/精准打击.cs index 0498a13..608e62f 100644 --- a/Library/Skills/Mayor/精准打击.cs +++ b/Library/Skills/Mayor/精准打击.cs @@ -22,30 +22,34 @@ namespace Milimoe.FunGame.Testing.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"30 时间内暴击率提升 {暴击率提升 * 100:0.##}%,暴击伤害再提升 {暴击伤害提升 * 100:0.##}%。"; + public override string Description => $"30 时间内暴击率提升 {暴击率提升 * 100:0.##}%,暴击伤害提升 {暴击伤害提升 * 100:0.##}%,物理穿透提升 {物理穿透提升 * 100:0.##}%。"; public override bool TargetSelf => true; public override bool Durative => true; public override double Duration => 30; private double 暴击率提升 => 0.2 + 0.03 * (Level - 1); private double 暴击伤害提升 => 0.8 + 0.04 * (Level - 1); + private double 物理穿透提升 => 0.3; private double 实际暴击率提升 = 0; private double 实际暴击伤害提升 = 0; + private double 实际物理穿透提升 = 0; public override void OnEffectGained(Character character) { 实际暴击率提升 = 暴击率提升; 实际暴击伤害提升 = 暴击伤害提升; + 实际物理穿透提升 = 物理穿透提升; character.ExCritRate += 实际暴击率提升; - WriteLine($"[ {character} ] 的暴击率提升了 [ {实际暴击率提升 * 100:0.##}% ] !"); character.ExCritDMG += 实际暴击伤害提升; - WriteLine($"[ {character} ] 的暴击伤害提升了 [ {实际暴击伤害提升 * 100:0.##}% ] !"); + character.PhysicalPenetration += 实际物理穿透提升; + WriteLine($"[ {character} ] 的暴击率提升了 [ {实际暴击率提升 * 100:0.##}% ],暴击伤害提升了 [ {实际暴击伤害提升 * 100:0.##}% ],物理穿透提升了 [ {实际物理穿透提升 * 100:0.##}% ] !!"); } public override void OnEffectLost(Character character) { character.ExCritRate -= 实际暴击率提升; character.ExCritDMG -= 实际暴击伤害提升; + character.PhysicalPenetration -= 实际物理穿透提升; } public override void OnSkillCasted(Character caster, List enemys, List teammates, Dictionary others) @@ -55,6 +59,7 @@ namespace Milimoe.FunGame.Testing.Skills { 实际暴击率提升 = 0; 实际暴击伤害提升 = 0; + 实际物理穿透提升 = 0; caster.Effects.Add(this); OnEffectGained(caster); } diff --git a/Library/Skills/NiuNan/智慧与力量.cs b/Library/Skills/NiuNan/智慧与力量.cs index 0d5925a..e4c3fdd 100644 --- a/Library/Skills/NiuNan/智慧与力量.cs +++ b/Library/Skills/NiuNan/智慧与力量.cs @@ -1,4 +1,5 @@ using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Interface.Entity; using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Testing.Skills @@ -24,12 +25,60 @@ namespace Milimoe.FunGame.Testing.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"当生命值低于 30% 时,智力转化为力量;当生命值高于或等于 30% 时,力量转化为智力。" + + public override string Description => $"当生命值低于 30% 时,智力转化为力量;当生命值高于或等于 30% 时,力量转化为智力。力量模式下,造成伤害必定暴击;智力模式下,获得 30% 闪避率和 25% 魔法抗性。" + (Skill.Character != null ? "(当前模式:" + CharacterSet.GetPrimaryAttributeName(Skill.Character.PrimaryAttribute) + ")" : ""); public override bool TargetSelf => true; private double 交换前的额外智力 = 0; private double 交换前的额外力量 = 0; + private double 实际增加闪避率 = 0.3; + private double 实际增加魔法抗性 = 0.25; + private bool 已经加过 = false; + + public override void OnEffectGained(Character character) + { + ResetEffect(character, true); + } + + public override void OnEffectLost(Character character) + { + if (character.PrimaryAttribute == PrimaryAttribute.INT) + { + ResetEffect(character, false); + } + } + + private void ResetEffect(Character character, bool isAdd) + { + if (isAdd) + { + 已经加过 = true; + character.ExEvadeRate += 实际增加闪避率; + character.MDF.None += 实际增加魔法抗性; + character.MDF.Particle += 实际增加魔法抗性; + character.MDF.Fleabane += 实际增加魔法抗性; + character.MDF.Element += 实际增加魔法抗性; + character.MDF.Shadow += 实际增加魔法抗性; + character.MDF.Bright += 实际增加魔法抗性; + character.MDF.PurityContemporary += 实际增加魔法抗性; + character.MDF.PurityNatural += 实际增加魔法抗性; + character.MDF.Starmark += 实际增加魔法抗性; + } + else + { + 已经加过 = false; + character.ExEvadeRate -= 实际增加闪避率; + character.MDF.None -= 实际增加魔法抗性; + character.MDF.Particle -= 实际增加魔法抗性; + character.MDF.Fleabane -= 实际增加魔法抗性; + character.MDF.Element -= 实际增加魔法抗性; + character.MDF.Shadow -= 实际增加魔法抗性; + character.MDF.Bright -= 实际增加魔法抗性; + character.MDF.PurityContemporary -= 实际增加魔法抗性; + character.MDF.PurityNatural -= 实际增加魔法抗性; + character.MDF.Starmark -= 实际增加魔法抗性; + } + } public override void OnAttributeChanged(Character character) { @@ -48,6 +97,12 @@ namespace Milimoe.FunGame.Testing.Skills } } + public override bool BeforeCriticalCheck(Character character, ref double throwingBonus) + { + throwingBonus += 100; + return false; + } + public override void OnTimeElapsed(Character character, double elapsed) { if (Skill.Character != null) @@ -67,6 +122,10 @@ namespace Milimoe.FunGame.Testing.Skills c.ExINT = -c.BaseINT; c.ExSTR = 交换前的额外智力 + c.BaseINT + 交换前的额外力量; c.Recovery(pastHP, pastMP, pastMaxHP, pastMaxMP); + if (已经加过) + { + ResetEffect(character, false); + } } } else @@ -83,6 +142,10 @@ namespace Milimoe.FunGame.Testing.Skills c.ExINT = 交换前的额外力量 + c.BaseSTR + 交换前的额外智力; c.ExSTR = -c.BaseSTR; c.Recovery(pastHP, pastMP, pastMaxHP, pastMaxMP); + if (!已经加过) + { + ResetEffect(character, true); + } } } } diff --git a/Library/Skills/Oshima/META马.cs b/Library/Skills/Oshima/META马.cs index b1aae68..f694466 100644 --- a/Library/Skills/Oshima/META马.cs +++ b/Library/Skills/Oshima/META马.cs @@ -26,7 +26,7 @@ namespace Milimoe.FunGame.Testing.Skills public override string Name => Skill.Name; public override string Description => $"META马专属被动:力量+5,力量成长+0.5;在受到伤害时,获得的能量提升50%,每回合开始还能获得额外的 [ {EP:0.##} ] 能量值。"; public override bool TargetSelf => true; - public static double EP => 10; + public static double EP => 7; public override void AlterEPAfterGetDamage(Character character, ref double baseEP) { diff --git a/Library/Skills/Oshima/力量爆发.cs b/Library/Skills/Oshima/力量爆发.cs index 3c4fc6f..554b723 100644 --- a/Library/Skills/Oshima/力量爆发.cs +++ b/Library/Skills/Oshima/力量爆发.cs @@ -22,12 +22,12 @@ namespace Milimoe.FunGame.Testing.Skills { public override long Id => Skill.Id; public override string Name => "力量爆发"; - public override string Description => $"获得 150% 力量 [ {攻击力加成:0.##} ] 的攻击力加成,但每次攻击都会损失 9% 当前生命值 [ {当前生命值:0.##} ],持续 {Duration:0.##} 时间。"; + public override string Description => $"获得 135% 力量 [ {攻击力加成:0.##} ] 的攻击力加成,但每次攻击都会损失 9% 当前生命值 [ {当前生命值:0.##} ],持续 {Duration:0.##} 时间。"; public override bool TargetSelf => true; public override bool Durative => true; public override double Duration => 10 + 1 * (Level - 1); - private double 攻击力加成 => Skill.Character?.STR * 1.5 ?? 0; + private double 攻击力加成 => Skill.Character?.STR * 1.35 ?? 0; private double 当前生命值 => Skill.Character?.HP * 0.09 ?? 0; private double 实际攻击力加成 = 0; diff --git a/Library/Skills/QWQAQW/迅捷之势.cs b/Library/Skills/QWQAQW/迅捷之势.cs index 8bef40f..db314ee 100644 --- a/Library/Skills/QWQAQW/迅捷之势.cs +++ b/Library/Skills/QWQAQW/迅捷之势.cs @@ -22,22 +22,35 @@ namespace Milimoe.FunGame.Testing.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"{Duration:0.##} 时间内,普通攻击转为魔法伤害,且硬直时间减少50%,并基于 {智力系数 * 100:0.##}% 智力 [ {智力加成:0.##} ] 强化普通攻击伤害。"; + public override string Description => $"{Duration:0.##} 时间内,提升自身 35% 物理伤害减免和魔法抗性,普通攻击转为魔法伤害,且硬直时间减少 30%,并基于 {智力系数 * 100:0.##}% 智力 [ {智力加成:0.##} ] 强化普通攻击伤害。"; public override bool TargetSelf => true; public override bool Durative => true; public override double Duration => 40; private double 智力系数 => 1.4 + 0.4 * (Level - 1); private double 智力加成 => 智力系数 * Skill.Character?.INT ?? 0; + private double 物理伤害减免 => 0.35; + private double 魔法抗性 => 0.35; + private double 实际物理伤害减免 = 0; + private double 实际魔法抗性 = 0; public override void OnEffectGained(Character character) { character.NormalAttack.SetMagicType(true, character.MagicType); + 实际物理伤害减免 = 物理伤害减免; + 实际魔法抗性 = 魔法抗性; + character.ExPDR += 实际物理伤害减免; + character.MDF.SetAllValue(实际魔法抗性, false); + WriteLine($"[ {character} ] 提升了 {实际物理伤害减免 * 100:0.##}% 物理伤害减免,{实际魔法抗性 * 100:0.##}% 魔法抗性!!"); } public override void OnEffectLost(Character character) { character.NormalAttack.SetMagicType(false, character.MagicType); + 实际物理伤害减免 = 0; + 实际魔法抗性 = 0; + character.ExPDR -= 实际物理伤害减免; + character.MDF.SetAllValue(-实际魔法抗性, false); } public override void AlterExpectedDamageBeforeCalculation(Character character, Character enemy, ref double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType) @@ -50,7 +63,7 @@ namespace Milimoe.FunGame.Testing.Skills public override void AlterHardnessTimeAfterNormalAttack(Character character, ref double baseHardnessTime, ref bool isCheckProtected) { - baseHardnessTime *= 0.5; + baseHardnessTime *= 0.3; } public override void OnSkillCasted(Character caster, List enemys, List teammates, Dictionary others) diff --git a/Library/Skills/QingXiang/能量毁灭.cs b/Library/Skills/QingXiang/能量毁灭.cs index f70d136..825af9e 100644 --- a/Library/Skills/QingXiang/能量毁灭.cs +++ b/Library/Skills/QingXiang/能量毁灭.cs @@ -11,6 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills public override double EPCost => 100; public override double CD => 55 - 3 * (Level - 1); public override double HardnessTime { get; set; } = 25; + public override string Slogan => "灭!!!!"; public 能量毁灭(Character? character = null) : base(SkillType.SuperSkill, character) { @@ -27,9 +28,9 @@ namespace Milimoe.FunGame.Testing.Skills public override bool TargetSelf => false; public override double TargetRange => 999; - private double 智力系数 => 0.55 * Level; + private double 智力系数 => 0.25 * Level; private double 智力伤害 => 智力系数 * Skill.Character?.INT ?? 0; - private double 能量系数 => 0.75 * Level; + private double 能量系数 => 1.05 * Level; public override void OnSkillCasted(Character caster, List enemys, List teammates, Dictionary others) { diff --git a/Library/Skills/SkillID.cs b/Library/Skills/SkillID.cs index a85d65a..aa85500 100644 --- a/Library/Skills/SkillID.cs +++ b/Library/Skills/SkillID.cs @@ -3,6 +3,32 @@ public enum MagicID : long { 冰霜攻击 = 1001, + 火之矢 = 1002, + 水之矢 = 1003, + 石之锤 = 1004, + 风之轮 = 1005, + 心灵之霞 = 1006, + 次元上升 = 1007, + 暗物质 = 1008, + + 回复术 = 1009, + 治愈术 = 1010, + 复苏术 = 1011, + 圣灵术 = 1012, + 时间加速 = 1013, + 时间减速 = 1014, + 反魔法领域 = 1015, + 沉默十字 = 1016, + 虚弱领域 = 1017, + 混沌烙印 = 1018, + 凝胶稠絮 = 1019, + + 大地之墙 = 1020, + 盖亚之盾 = 1021, + 风之守护 = 1022, + 结晶防护 = 1023, + 强音之力 = 1024, + 神圣祝福 = 1025 } public enum SkillID : long diff --git a/Library/Skills/Yang/魔法震荡.cs b/Library/Skills/Yang/魔法震荡.cs index 37ccfee..1ac713e 100644 --- a/Library/Skills/Yang/魔法震荡.cs +++ b/Library/Skills/Yang/魔法震荡.cs @@ -1,6 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -using Milimoe.FunGame.Testing.Effects; +using Milimoe.FunGame.Testing.Effects.SkillEffects; namespace Milimoe.FunGame.Testing.Skills { diff --git a/Library/Solutions/TestModule.cs b/Library/Solutions/TestModule.cs index efb6a0c..db91a51 100644 --- a/Library/Solutions/TestModule.cs +++ b/Library/Solutions/TestModule.cs @@ -1,9 +1,9 @@ using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Addon; -using Milimoe.FunGame.Testing.OpenEffects; using Milimoe.FunGame.Testing.Items; using Milimoe.FunGame.Testing.Skills; +using Milimoe.FunGame.Testing.Effects.OpenEffects; namespace Addons { @@ -87,14 +87,14 @@ namespace Addons (long)PassiveID.敏捷之刃 => new 敏捷之刃(), (long)PassiveID.弱者猎手 => new 弱者猎手(), (long)ItemPassiveID.攻击之爪 => new 攻击之爪技能(), - _ => new OpenSkill(id, name) + _ => new OpenSkill(id, name, args) }; - if (skill is OpenSkill && args.TryGetValue("others", out object? value) && value is Dictionary dict) + if (skill is OpenSkill && args.TryGetValue("values", out object? value) && value is Dictionary dict) { foreach (string key in dict.Keys) { - skill.OtherArgs[key] = dict[key]; + skill.Values[key] = dict[key]; } } @@ -106,32 +106,32 @@ namespace Addons { return (id, name, args) => { - if (args.TryGetValue("skill", out object? value) && value is Skill skill) + if (args.TryGetValue("skill", out object? value) && value is Skill skill && args.TryGetValue("values", out value) && value is Dictionary dict) { return (EffectID)id switch { - EffectID.ExATK => new ExATK(skill), - EffectID.ExDEF => new ExDEF(skill), - EffectID.ExSTR => new ExSTR(skill), - EffectID.ExAGI => new ExAGI(skill), - EffectID.ExINT => new ExINT(skill), - EffectID.SkillHardTimeReduce => new SkillHardTimeReduce(skill), - EffectID.NormalAttackHardTimeReduce => new NormalAttackHardTimeReduce(skill), - EffectID.AccelerationCoefficient => new AccelerationCoefficient(skill), - EffectID.ExSPD => new ExSPD(skill), - EffectID.ExActionCoefficient => new ExActionCoefficient(skill), - EffectID.ExCDR => new ExCDR(skill), - EffectID.ExMaxHP => new ExMaxHP(skill), - EffectID.ExMaxMP => new ExMaxMP(skill), - EffectID.ExCritRate => new ExCritRate(skill), - EffectID.ExCritDMG => new ExCritDMG(skill), - EffectID.ExEvadeRate => new ExEvadeRate(skill), - EffectID.PhysicalPenetration => new PhysicalPenetration(skill), - EffectID.MagicalPenetration => new MagicalPenetration(skill), - EffectID.ExPDR => new ExPDR(skill), - EffectID.ExMDF => new ExMDF(skill), - EffectID.ExHR => new ExHR(skill), - EffectID.ExMR => new ExMR(skill), + EffectID.ExATK => new ExATK(skill, dict), + EffectID.ExDEF => new ExDEF(skill, dict), + EffectID.ExSTR => new ExSTR(skill, dict), + EffectID.ExAGI => new ExAGI(skill, dict), + EffectID.ExINT => new ExINT(skill, dict), + EffectID.SkillHardTimeReduce => new SkillHardTimeReduce(skill, dict), + EffectID.NormalAttackHardTimeReduce => new NormalAttackHardTimeReduce(skill, dict), + EffectID.AccelerationCoefficient => new AccelerationCoefficient(skill, dict), + EffectID.ExSPD => new ExSPD(skill, dict), + EffectID.ExActionCoefficient => new ExActionCoefficient(skill, dict), + EffectID.ExCDR => new ExCDR(skill, dict), + EffectID.ExMaxHP => new ExMaxHP(skill, dict), + EffectID.ExMaxMP => new ExMaxMP(skill, dict), + EffectID.ExCritRate => new ExCritRate(skill, dict), + EffectID.ExCritDMG => new ExCritDMG(skill, dict), + EffectID.ExEvadeRate => new ExEvadeRate(skill, dict), + EffectID.PhysicalPenetration => new PhysicalPenetration(skill, dict), + EffectID.MagicalPenetration => new MagicalPenetration(skill, dict), + EffectID.ExPDR => new ExPDR(skill, dict), + EffectID.ExMDF => new ExMDF(skill, dict), + EffectID.ExHR => new ExHR(skill, dict), + EffectID.ExMR => new ExMR(skill, dict), _ => null }; } diff --git a/Library/Tests/FunGame.cs b/Library/Tests/FunGame.cs index 7d74547..39b3fb3 100644 --- a/Library/Tests/FunGame.cs +++ b/Library/Tests/FunGame.cs @@ -295,7 +295,7 @@ namespace Milimoe.FunGame.Testing.Tests if (PrintOut) characters.ForEach(c => Console.WriteLine(c.GetInfo())); // 创建顺序表并排序 - ActionQueue actionQueue = new(characters, WriteLine); + ActionQueue actionQueue = new(characters, false, WriteLine); if (PrintOut) Console.WriteLine(); // 显示初始顺序表