From 37b43d31c79b1c1e76f3fea112f607064788b2fe Mon Sep 17 00:00:00 2001 From: milimoe Date: Fri, 8 Nov 2024 01:45:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=80=E8=83=BD=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OshimaCore/Controllers/FunGameController.cs | 49 ++++++++ OshimaCore/Utils/FunGameUtil.cs | 108 ++++++++++++++++++ .../{SkillEffects => PassiveEffects}/眩晕.cs | 2 +- .../累积之压标记.cs | 2 +- .../Effects/SkillEffects/基于属性的伤害.cs | 4 +- .../基于攻击力的伤害_带基础伤害.cs | 4 +- .../基于攻击力的伤害_无基础伤害.cs | 4 +- .../SkillEffects/基于核心属性的伤害.cs | 4 +- .../Effects/SkillEffects/百分比回复生命值.cs | 10 +- .../Effects/SkillEffects/纯数值伤害.cs | 4 +- .../Effects/SkillEffects/纯数值回复生命值.cs | 4 +- .../Effects/SkillEffects/造成眩晕.cs | 38 ++++++ OshimaModules/Skills/ColdBlue/嗜血本能.cs | 2 +- OshimaModules/Skills/ColdBlue/累积之压.cs | 2 +- OshimaModules/Skills/QWQAQW/迅捷之势.cs | 6 +- OshimaModules/Skills/QingXiang/能量毁灭.cs | 2 +- OshimaModules/Skills/Yang/魔法震荡.cs | 2 +- OshimaModules/Skills/魔法/回复术.cs | 4 +- OshimaModules/Skills/魔法/暗物质.cs | 6 +- OshimaModules/Skills/魔法/次元上升.cs | 9 +- OshimaModules/Skills/魔法/治愈术.cs | 4 +- 21 files changed, 226 insertions(+), 44 deletions(-) rename OshimaModules/Effects/{SkillEffects => PassiveEffects}/眩晕.cs (96%) rename OshimaModules/Effects/{SkillEffects => PassiveEffects}/累积之压标记.cs (93%) create mode 100644 OshimaModules/Effects/SkillEffects/造成眩晕.cs diff --git a/OshimaCore/Controllers/FunGameController.cs b/OshimaCore/Controllers/FunGameController.cs index 200fe04..114a15d 100644 --- a/OshimaCore/Controllers/FunGameController.cs +++ b/OshimaCore/Controllers/FunGameController.cs @@ -60,6 +60,7 @@ namespace Oshima.Core.Controllers builder.AppendLine($"ܼƹھ{stats.Wins}"); builder.AppendLine($"ܼǰ{stats.Top3s}"); builder.AppendLine($"ܼưܳ{stats.Loses}"); + builder.AppendLine($"MVP{stats.MVPs}"); List names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())]; builder.AppendLine($"ʤʣ{stats.Winrates * 100:0.##}%#{names.IndexOf(character.GetName()) + 1}"); @@ -111,6 +112,7 @@ namespace Oshima.Core.Controllers builder.AppendLine($"ܼƲ{stats.Plays}"); builder.AppendLine($"ܼƹھ{stats.Wins}"); builder.AppendLine($"ܼưܳ{stats.Loses}"); + builder.AppendLine($"MVP{stats.MVPs}"); List names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())]; builder.AppendLine($"ʤʣ{stats.Winrates * 100:0.##}%#{names.IndexOf(character.GetName()) + 1}"); @@ -140,6 +142,7 @@ namespace Oshima.Core.Controllers builder.AppendLine($"ܼƹھ{stats.Wins}"); builder.AppendLine($"ʤʣ{stats.Winrates * 100:0.##}%"); builder.AppendLine($"÷֣{stats.Rating:0.0#}"); + builder.AppendLine($"MVP{stats.MVPs}"); strings.Add(builder.ToString()); } return NetworkUtility.JsonSerialize(strings); @@ -159,6 +162,7 @@ namespace Oshima.Core.Controllers builder.AppendLine($"ǰʣ{stats.Top3rates * 100:0.##}%"); builder.AppendLine($"÷֣{stats.Rating:0.0#}"); builder.AppendLine($"ϴ{stats.LastRank} / Σ{stats.AvgRank:0.##}"); + builder.AppendLine($"MVP{stats.MVPs}"); strings.Add(builder.ToString()); } return NetworkUtility.JsonSerialize(strings); @@ -182,6 +186,7 @@ namespace Oshima.Core.Controllers builder.AppendLine($"ܼƹھ{stats.Wins}"); builder.AppendLine($"ʤʣ{stats.Winrates * 100:0.##}%"); builder.AppendLine($"÷֣{stats.Rating:0.0#}"); + builder.AppendLine($"MVP{stats.MVPs}"); strings.Add(builder.ToString()); } return NetworkUtility.JsonSerialize(strings); @@ -201,6 +206,7 @@ namespace Oshima.Core.Controllers builder.AppendLine($"ǰʣ{stats.Top3rates * 100:0.##}%"); builder.AppendLine($"÷֣{stats.Rating:0.0#}"); builder.AppendLine($"ϴ{stats.LastRank} / Σ{stats.AvgRank:0.##}"); + builder.AppendLine($"MVP{stats.MVPs}"); strings.Add(builder.ToString()); } return NetworkUtility.JsonSerialize(strings); @@ -401,6 +407,49 @@ namespace Oshima.Core.Controllers return NetworkUtility.JsonSerialize(""); } + [HttpGet("cjn")] + public string GetSkillInfo([FromQuery] long? id = null) + { + IEnumerable skills = FunGameSimulation.Skills.Union(FunGameSimulation.Magics); + if (id != null && FunGameSimulation.Characters.Count > 1) + { + List msg = []; + Character c = FunGameSimulation.Characters[1].Copy(); + Skill? s = skills.Where(s => s.Id == id).FirstOrDefault()?.Copy(); + if (s != null) + { + s.Character = c; + msg.Add($"չʾԻʾɫ[ {c} ]"); + msg.Add(s.Description); + s.Level++; ; + msg.Add(s.Description); + s.Level = s.IsMagic ? General.GameplayEquilibriumConstant.MaxMagicLevel : General.GameplayEquilibriumConstant.MaxSkillLevel; + msg.Add(s.Description); + } + + return NetworkUtility.JsonSerialize(string.Join("\r\n\r\n", msg)); + } + return NetworkUtility.JsonSerialize(""); + } + + [HttpGet("cwp")] + public string GetItemInfo([FromQuery] long? id = null) + { + IEnumerable items = FunGameSimulation.Items; + if (id != null) + { + List msg = []; + Item? i = items.Where(i => i.Id == id).FirstOrDefault()?.Copy(); + if (i != null) + { + msg.Add(i.Description); + } + + return NetworkUtility.JsonSerialize(string.Join("\r\n\r\n", msg)); + } + return NetworkUtility.JsonSerialize(""); + } + [HttpPost("post")] public string PostName([FromBody] string name) { diff --git a/OshimaCore/Utils/FunGameUtil.cs b/OshimaCore/Utils/FunGameUtil.cs index d2a0abc..7d5467b 100644 --- a/OshimaCore/Utils/FunGameUtil.cs +++ b/OshimaCore/Utils/FunGameUtil.cs @@ -4,6 +4,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Model; using Oshima.FunGame.OshimaModules; using Oshima.FunGame.OshimaModules.Characters; +using Oshima.FunGame.OshimaModules.Effects.OpenEffects; using Oshima.FunGame.OshimaModules.Items; using Oshima.FunGame.OshimaModules.Skills; @@ -369,6 +370,10 @@ namespace Oshima.Core.Utils // 总回合数 int maxRound = isTeam ? 9999 : 999; + + // 随机回合奖励 + Dictionary> roundRewards = GenerateRoundRewards(maxRound); + int i = 1; while (i < maxRound) { @@ -408,10 +413,54 @@ namespace Oshima.Core.Utils // 处理回合 if (characterToAct != null) { + // 获取回合奖励 + List skillRewards = []; + if (roundRewards.TryGetValue(i, out List? effectList) && effectList != null) + { + skillRewards = new(effectList); + } + WriteLine($"=== Round {i++} ==="); WriteLine("现在是 [ " + characterToAct + (isTeam ? "(" + (actionQueue.GetTeam(characterToAct)?.Name ?? "") + ")" : "") + " ] 的回合!"); + // 实际的回合奖励 + List realSkillRewards = []; + if (skillRewards.Count > 0) + { + foreach (Skill skill in skillRewards) + { + Dictionary args = new() + { + { "skill", skill }, + { "values", skill.Values } + }; + skill.GamingQueue = actionQueue; + skill.Effects.Add(Factory.OpenFactory.GetInstance(skill.Id, "回合奖励", args)); + skill.Character = characterToAct; + skill.Level = 1; + characterToAct.Skills.Add(skill); + realSkillRewards.Add(skill); + } + string msg = $"[ {characterToAct} ] 获得了回合奖励!{string.Join(" / ", realSkillRewards.Select(s => s.Description))}"; + WriteLine(msg.Trim()); + } + bool isGameEnd = actionQueue.ProcessTurn(characterToAct); + + if (realSkillRewards.Count > 0) + { + foreach (Skill skill in realSkillRewards) + { + foreach (Effect e in skill.Effects) + { + e.OnEffectLost(characterToAct); + characterToAct.Effects.Remove(e); + } + characterToAct.Skills.Remove(skill); + skill.Character = null; + } + } + if (isGameEnd) { result.Add(Msg); @@ -500,6 +549,7 @@ namespace Oshima.Core.Utils if (character != null) { CharacterStatistics stats = actionQueue.CharacterStatistics[character]; + stats.MVPs++; StringBuilder builder = new(); builder.AppendLine($"{(isWeb ? count + "." : (isTeam ? "[ " + actionQueue.GetTeamFromEliminated(character)?.Name + " ]" ?? "" : ""))} [ {character.ToStringWithLevel()} ]"); builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(actionQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}"); @@ -755,6 +805,63 @@ namespace Oshima.Core.Utils Magics.AddRange([new 冰霜攻击(), new 火之矢(), new 水之矢(), new 风之轮(), new 石之锤(), new 心灵之霞(), new 次元上升(), new 暗物质(), new 回复术(), new 治愈术()]); } + public static Dictionary> GenerateRoundRewards(int maxRound) + { + Dictionary> roundRewards = []; + + // 设定产生的回合奖励 + Dictionary> rewards = new() + { + { + EffectID.ExATK, + new() + { + { "exatk", "60" } + } + }, + { + EffectID.ExCritRate, + new() + { + { "excr", "0.5" } + } + }, + { + EffectID.ExCritDMG, + new() + { + { "excrd", "1" } + } + }, + { + EffectID.ExATK2, + new() + { + { "exatk", "0.3" } + } + } + }; + + int currentRound = 1; + while (currentRound <= maxRound) + { + currentRound += Random.Shared.Next(1, 9); + + if (currentRound <= maxRound) + { + List skills = []; + + // 添加回合奖励特效 + EffectID effectID = rewards.Keys.ToArray()[Random.Shared.Next(rewards.Count)]; + skills.Add(Factory.OpenFactory.GetInstance((long)effectID, "", rewards[effectID])); + + roundRewards[currentRound] = skills; + } + } + + return roundRewards; + } + public static void UpdateStatistics(CharacterStatistics totalStats, CharacterStatistics stats) { // 统计此角色的所有数据 @@ -786,6 +893,7 @@ namespace Oshima.Core.Utils totalStats.Wins += stats.Wins; totalStats.Top3s += stats.Top3s; totalStats.Loses += stats.Loses; + totalStats.MVPs += stats.MVPs; if (totalStats.Plays != 0) { totalStats.AvgDamage = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.Plays); diff --git a/OshimaModules/Effects/SkillEffects/眩晕.cs b/OshimaModules/Effects/PassiveEffects/眩晕.cs similarity index 96% rename from OshimaModules/Effects/SkillEffects/眩晕.cs rename to OshimaModules/Effects/PassiveEffects/眩晕.cs index 093dce5..f7c82af 100644 --- a/OshimaModules/Effects/SkillEffects/眩晕.cs +++ b/OshimaModules/Effects/PassiveEffects/眩晕.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects { public class 眩晕 : Effect { diff --git a/OshimaModules/Effects/SkillEffects/累积之压标记.cs b/OshimaModules/Effects/PassiveEffects/累积之压标记.cs similarity index 93% rename from OshimaModules/Effects/SkillEffects/累积之压标记.cs rename to OshimaModules/Effects/PassiveEffects/累积之压标记.cs index 93e9f69..2cd1005 100644 --- a/OshimaModules/Effects/SkillEffects/累积之压标记.cs +++ b/OshimaModules/Effects/PassiveEffects/累积之压标记.cs @@ -1,7 +1,7 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects +namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects { public class 累积之压标记 : Effect { diff --git a/OshimaModules/Effects/SkillEffects/基于属性的伤害.cs b/OshimaModules/Effects/SkillEffects/基于属性的伤害.cs index a6befdb..4d82239 100644 --- a/OshimaModules/Effects/SkillEffects/基于属性的伤害.cs +++ b/OshimaModules/Effects/SkillEffects/基于属性的伤害.cs @@ -9,7 +9,6 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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 @@ -37,7 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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) + public 基于属性的伤害(Skill skill, PrimaryAttribute 基于属性, double 基础数值伤害, double 基础伤害等级成长, double 基础属性系数, double 基础系数等级成长, bool isMagic = true, MagicType magicType = MagicType.None) : base(skill) { GamingQueue = skill.GamingQueue; this.基于属性 = 基于属性; @@ -47,7 +46,6 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects this.基础系数等级成长 = 基础系数等级成长; IsMagic = isMagic; MagicType = magicType; - TargetCount = targetCount; } public override void OnSkillCasted(Character caster, List targets, Dictionary others) diff --git a/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_带基础伤害.cs b/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_带基础伤害.cs index f4abbfd..d71a216 100644 --- a/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_带基础伤害.cs +++ b/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_带基础伤害.cs @@ -9,7 +9,6 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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); @@ -20,7 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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) + public 基于攻击力的伤害_带基础伤害(Skill skill, double 基础数值伤害, double 基础伤害等级成长, double 基础攻击力系数, double 基础系数等级成长, bool isMagic = true, MagicType magicType = MagicType.None) : base(skill) { GamingQueue = skill.GamingQueue; this.基础数值伤害 = 基础数值伤害; @@ -29,7 +28,6 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects this.基础系数等级成长 = 基础系数等级成长; IsMagic = isMagic; MagicType = magicType; - TargetCount = targetCount; } public override void OnSkillCasted(Character caster, List targets, Dictionary others) diff --git a/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_无基础伤害.cs b/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_无基础伤害.cs index f16d6d3..780ca1e 100644 --- a/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_无基础伤害.cs +++ b/OshimaModules/Effects/SkillEffects/基于攻击力的伤害_无基础伤害.cs @@ -9,7 +9,6 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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; @@ -17,14 +16,13 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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) + public 基于攻击力的伤害_无基础伤害(Skill skill, double 基础攻击力系数, double 基础系数等级成长, bool isMagic = true, MagicType magicType = MagicType.None) : base(skill) { GamingQueue = skill.GamingQueue; this.基础攻击力系数 = 基础攻击力系数; this.基础系数等级成长 = 基础系数等级成长; IsMagic = isMagic; MagicType = magicType; - TargetCount = targetCount; } public override void OnSkillCasted(Character caster, List targets, Dictionary others) diff --git a/OshimaModules/Effects/SkillEffects/基于核心属性的伤害.cs b/OshimaModules/Effects/SkillEffects/基于核心属性的伤害.cs index aeab2e2..fa52e38 100644 --- a/OshimaModules/Effects/SkillEffects/基于核心属性的伤害.cs +++ b/OshimaModules/Effects/SkillEffects/基于核心属性的伤害.cs @@ -9,7 +9,6 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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); @@ -20,7 +19,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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) + public 基于核心属性的伤害(Skill skill, double 基础数值伤害, double 基础伤害等级成长, double 基础属性系数, double 基础系数等级成长, bool isMagic = true, MagicType magicType = MagicType.None) : base(skill) { GamingQueue = skill.GamingQueue; this.基础数值伤害 = 基础数值伤害; @@ -29,7 +28,6 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects this.基础系数等级成长 = 基础系数等级成长; IsMagic = isMagic; MagicType = magicType; - TargetCount = targetCount; } public override void OnSkillCasted(Character caster, List targets, Dictionary others) diff --git a/OshimaModules/Effects/SkillEffects/百分比回复生命值.cs b/OshimaModules/Effects/SkillEffects/百分比回复生命值.cs index 7330866..8bb6c39 100644 --- a/OshimaModules/Effects/SkillEffects/百分比回复生命值.cs +++ b/OshimaModules/Effects/SkillEffects/百分比回复生命值.cs @@ -6,22 +6,19 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects { 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 string Description => $"为{(TargetCount > 1 ? $"至多 {TargetCount} 个" : "")}目标回复其最大生命值 {百分比 * 100: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) + public 百分比回复生命值(Skill skill, double 基础回复, double 回复成长, bool canRespawn = false) : base(skill) { GamingQueue = skill.GamingQueue; this.基础回复 = 基础回复; this.回复成长 = 回复成长; - TargetCount = targetCount; CanRespawn = canRespawn; } @@ -29,7 +26,8 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects { foreach (Character target in targets) { - HealToTarget(caster, target, Heal, CanRespawn); + double heal = 百分比 * target.MaxHP; + HealToTarget(caster, target, heal, CanRespawn); } } } diff --git a/OshimaModules/Effects/SkillEffects/纯数值伤害.cs b/OshimaModules/Effects/SkillEffects/纯数值伤害.cs index 34d3525..246c336 100644 --- a/OshimaModules/Effects/SkillEffects/纯数值伤害.cs +++ b/OshimaModules/Effects/SkillEffects/纯数值伤害.cs @@ -9,21 +9,19 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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) + public 纯数值伤害(Skill skill, double 基础数值伤害, double 基础伤害等级成长, bool isMagic = true, MagicType magicType = MagicType.None) : base(skill) { GamingQueue = skill.GamingQueue; this.基础数值伤害 = 基础数值伤害; this.基础伤害等级成长 = 基础伤害等级成长; IsMagic = isMagic; MagicType = magicType; - TargetCount = targetCount; } public override void OnSkillCasted(Character caster, List targets, Dictionary others) diff --git a/OshimaModules/Effects/SkillEffects/纯数值回复生命值.cs b/OshimaModules/Effects/SkillEffects/纯数值回复生命值.cs index 59841f6..731a720 100644 --- a/OshimaModules/Effects/SkillEffects/纯数值回复生命值.cs +++ b/OshimaModules/Effects/SkillEffects/纯数值回复生命值.cs @@ -8,19 +8,17 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects 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) + public 纯数值回复生命(Skill skill, double 基础回复, double 回复成长, bool canRespawn = false) : base(skill) { GamingQueue = skill.GamingQueue; this.基础回复 = 基础回复; this.回复成长 = 回复成长; - TargetCount = targetCount; CanRespawn = canRespawn; } diff --git a/OshimaModules/Effects/SkillEffects/造成眩晕.cs b/OshimaModules/Effects/SkillEffects/造成眩晕.cs new file mode 100644 index 0000000..24194e0 --- /dev/null +++ b/OshimaModules/Effects/SkillEffects/造成眩晕.cs @@ -0,0 +1,38 @@ +using Milimoe.FunGame.Core.Entity; +using Oshima.FunGame.OshimaModules.Effects.PassiveEffects; + +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} 个" : "")}敌人造成眩晕 {眩晕时间}。"; + public override bool TargetSelf => false; + + private string 眩晕时间 => _durative && _duration > 0 ? _duration + " 时间" : (!_durative && _durationTurn > 0 ? _durationTurn + " 回合" : "0 时间"); + private readonly bool _durative; + private readonly double _duration; + private readonly int _durationTurn; + + public 造成眩晕(Skill skill, bool durative = false, double duration = 0, int durationTurn = 1) : base(skill) + { + GamingQueue = skill.GamingQueue; + _durative = durative; + _duration = duration; + _durationTurn = durationTurn; + } + + public override void OnSkillCasted(Character caster, List targets, Dictionary others) + { + foreach (Character enemy in targets) + { + WriteLine($"[ {caster} ] 眩晕了 [ {enemy} ] !持续时间:{眩晕时间}!"); + 眩晕 e = new(Skill, caster, false, 0, 1); + enemy.Effects.Add(e); + e.OnEffectGained(enemy); + GamingQueue?.LastRound.Effects.TryAdd(enemy, e.EffectType); + } + } + } +} diff --git a/OshimaModules/Skills/ColdBlue/嗜血本能.cs b/OshimaModules/Skills/ColdBlue/嗜血本能.cs index 54d9213..809fe62 100644 --- a/OshimaModules/Skills/ColdBlue/嗜血本能.cs +++ b/OshimaModules/Skills/ColdBlue/嗜血本能.cs @@ -1,6 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -using Oshima.FunGame.OshimaModules.Effects.SkillEffects; +using Oshima.FunGame.OshimaModules.Effects.PassiveEffects; namespace Oshima.FunGame.OshimaModules.Skills { diff --git a/OshimaModules/Skills/ColdBlue/累积之压.cs b/OshimaModules/Skills/ColdBlue/累积之压.cs index 923ced8..77ae4a5 100644 --- a/OshimaModules/Skills/ColdBlue/累积之压.cs +++ b/OshimaModules/Skills/ColdBlue/累积之压.cs @@ -1,6 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -using Oshima.FunGame.OshimaModules.Effects.SkillEffects; +using Oshima.FunGame.OshimaModules.Effects.PassiveEffects; namespace Oshima.FunGame.OshimaModules.Skills { diff --git a/OshimaModules/Skills/QWQAQW/迅捷之势.cs b/OshimaModules/Skills/QWQAQW/迅捷之势.cs index 9d5f045..efbafa7 100644 --- a/OshimaModules/Skills/QWQAQW/迅捷之势.cs +++ b/OshimaModules/Skills/QWQAQW/迅捷之势.cs @@ -22,15 +22,15 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"{Duration:0.##} 时间内,提升自身 35% 物理伤害减免和魔法抗性,普通攻击转为魔法伤害,且硬直时间减少 30%,并基于 {智力系数 * 100:0.##}% 智力 [ {智力加成:0.##} ] 强化普通攻击伤害。"; + public override string Description => $"{Duration:0.##} 时间内,提升自身 25% 物理伤害减免和魔法抗性,普通攻击转为魔法伤害,且硬直时间减少 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.25; + private double 魔法抗性 => 0.25; private double 实际物理伤害减免 = 0; private double 实际魔法抗性 = 0; diff --git a/OshimaModules/Skills/QingXiang/能量毁灭.cs b/OshimaModules/Skills/QingXiang/能量毁灭.cs index dfb471e..aaa750c 100644 --- a/OshimaModules/Skills/QingXiang/能量毁灭.cs +++ b/OshimaModules/Skills/QingXiang/能量毁灭.cs @@ -11,7 +11,7 @@ namespace Oshima.FunGame.OshimaModules.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 override string Slogan => "从深渊引爆力量,世界将为之颤抖!!!!"; public 能量毁灭(Character? character = null) : base(SkillType.SuperSkill, character) { diff --git a/OshimaModules/Skills/Yang/魔法震荡.cs b/OshimaModules/Skills/Yang/魔法震荡.cs index d80a765..403990e 100644 --- a/OshimaModules/Skills/Yang/魔法震荡.cs +++ b/OshimaModules/Skills/Yang/魔法震荡.cs @@ -1,6 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; -using Oshima.FunGame.OshimaModules.Effects.SkillEffects; +using Oshima.FunGame.OshimaModules.Effects.PassiveEffects; namespace Oshima.FunGame.OshimaModules.Skills { diff --git a/OshimaModules/Skills/魔法/回复术.cs b/OshimaModules/Skills/魔法/回复术.cs index 5473ba0..b7894bc 100644 --- a/OshimaModules/Skills/魔法/回复术.cs +++ b/OshimaModules/Skills/魔法/回复术.cs @@ -9,8 +9,8 @@ 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 => Level > 0 ? 40 + (60 * (Level - 1)) : 40; - public override double CD => 35; + public override double MPCost => Level > 0 ? 80 + (90 * (Level - 1)) : 80; + public override double CD => 65; public override double CastTime => 3; public override double HardnessTime { get; set; } = 5; public override bool CanSelectSelf => true; diff --git a/OshimaModules/Skills/魔法/暗物质.cs b/OshimaModules/Skills/魔法/暗物质.cs index bdc0e40..b71e37e 100644 --- a/OshimaModules/Skills/魔法/暗物质.cs +++ b/OshimaModules/Skills/魔法/暗物质.cs @@ -9,14 +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 => Level > 0 ? 65 + (80 * (Level - 1)) : 65; - public override double CD => 35; + public override double MPCost => Level > 0 ? 70 + (80 * (Level - 1)) : 70; + public override double CD => 55; public override double CastTime => 10; public override double HardnessTime { get; set; } = 4; public 暗物质(Character? character = null) : base(SkillType.Magic, character) { - Effects.Add(new 基于攻击力的伤害_无基础伤害(this, 1.5, 0.35, true)); + Effects.Add(new 基于攻击力的伤害_无基础伤害(this, 1.4, 0.28, true)); } } } diff --git a/OshimaModules/Skills/魔法/次元上升.cs b/OshimaModules/Skills/魔法/次元上升.cs index 2d4904c..7e4323c 100644 --- a/OshimaModules/Skills/魔法/次元上升.cs +++ b/OshimaModules/Skills/魔法/次元上升.cs @@ -8,14 +8,15 @@ 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 => Level > 0 ? 60 + (45 * (Level - 1)) : 60; - public override double CD => 30; - public override double CastTime => 10; + public override string Description => Effects.Count > 0 ? string.Join("\r\n", Effects.Select(e => e.Description)) : ""; + public override double MPCost => Level > 0 ? 70 + (75 * (Level - 1)) : 70; + public override double CD => 100; + public override double CastTime => 12; public override double HardnessTime { get; set; } = 5; public 次元上升(Character? character = null) : base(SkillType.Magic, character) { + Effects.Add(new 造成眩晕(this, true, 15, 0)); Effects.Add(new 基于攻击力的伤害_带基础伤害(this, 90, 110, 0.5, 0.3)); } } diff --git a/OshimaModules/Skills/魔法/治愈术.cs b/OshimaModules/Skills/魔法/治愈术.cs index 2eed978..4b6e253 100644 --- a/OshimaModules/Skills/魔法/治愈术.cs +++ b/OshimaModules/Skills/魔法/治愈术.cs @@ -9,8 +9,8 @@ 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 => Level > 0 ? 60 + (65 * (Level - 1)) : 60; - public override double CD => 40; + public override double MPCost => Level > 0 ? 90 + (95 * (Level - 1)) : 90; + public override double CD => 80; public override double CastTime => 5; public override double HardnessTime { get; set; } = 7; public override bool CanSelectSelf => true;