From cb09bca88dfc964e9cbdd99886677cb82b84e149 Mon Sep 17 00:00:00 2001 From: milimoe Date: Sun, 3 Nov 2024 23:16:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9B=A2=E9=98=9F=E6=AD=BB?= =?UTF-8?q?=E6=96=97=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OshimaCore/Controllers/FunGameController.cs | 12 ++++----- OshimaCore/Utils/FunGameUtil.cs | 27 +++++++++++-------- OshimaModules/Skills/QingXiang/枯竭打击.cs | 4 +-- OshimaModules/Skills/QingXiang/能量毁灭.cs | 5 ++++ OshimaModules/Skills/SkillID.cs | 29 +++++++++++++++++++++ 5 files changed, 58 insertions(+), 19 deletions(-) diff --git a/OshimaCore/Controllers/FunGameController.cs b/OshimaCore/Controllers/FunGameController.cs index 5f48ce2..6b9c67d 100644 --- a/OshimaCore/Controllers/FunGameController.cs +++ b/OshimaCore/Controllers/FunGameController.cs @@ -60,12 +60,12 @@ namespace Oshima.Core.Controllers builder.AppendLine($"ܼǰ{stats.Top3s}"); builder.AppendLine($"ܼưܳ{stats.Loses}"); - List names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())]; - builder.AppendLine($"ʤʣ{stats.Winrates * 100:0.##}%#{names.IndexOf(character.GetName())}"); + 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}"); builder.AppendLine($"ǰʣ{stats.Top3rates * 100:0.##}%"); - names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())]; - builder.AppendLine($"÷֣{stats.Rating:0.##}#{names.IndexOf(character.GetName())}"); + names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())]; + builder.AppendLine($"÷֣{stats.Rating:0.##}#{names.IndexOf(character.GetName()) + 1}"); builder.AppendLine($"ϴ{stats.LastRank} / Σ{stats.AvgRank}"); @@ -112,9 +112,9 @@ namespace Oshima.Core.Controllers builder.AppendLine($"ܼưܳ{stats.Loses}"); List names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())]; - builder.AppendLine($"ʤʣ{stats.Winrates * 100:0.##}%#{names.IndexOf(character.GetName())}"); + builder.AppendLine($"ʤʣ{stats.Winrates * 100:0.##}%#{names.IndexOf(character.GetName()) + 1}"); names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())]; - builder.AppendLine($"÷֣{stats.Rating:0.##}#{names.IndexOf(character.GetName())}"); + builder.AppendLine($"÷֣{stats.Rating:0.##}#{names.IndexOf(character.GetName()) + 1}"); return NetworkUtility.JsonSerialize(builder.ToString()); } diff --git a/OshimaCore/Utils/FunGameUtil.cs b/OshimaCore/Utils/FunGameUtil.cs index be872c5..f84b764 100644 --- a/OshimaCore/Utils/FunGameUtil.cs +++ b/OshimaCore/Utils/FunGameUtil.cs @@ -33,7 +33,6 @@ namespace Oshima.Core.Utils if (IsRuning) return ["游戏正在模拟中,请勿重复请求!"]; List result = []; - int deaths = 0; Msg = ""; IsRuning = true; @@ -283,6 +282,11 @@ namespace Oshima.Core.Utils // 创建顺序表并排序 ActionQueue actionQueue = new(characters, isTeam, WriteLine); + if (isTeam) + { + actionQueue.MaxRespawnTimes = -1; + actionQueue.MaxScoreToWin = 30; + } if (PrintOut) Console.WriteLine(); // 总游戏时长 @@ -296,7 +300,7 @@ namespace Oshima.Core.Utils int 发放的饰品品质 = 0; 空投(actionQueue, 发放的武器品质, 发放的防具品质, 发放的鞋子品质, 发放的饰品品质); if (isWeb) result.Add("=== 空投 ===\r\n" + Msg); - double 下一次空投 = 40; + double 下一次空投 = isTeam ? 80 : 40; if (发放的武器品质 < 4) { 发放的武器品质++; @@ -362,11 +366,12 @@ namespace Oshima.Core.Utils if (PrintOut) Console.WriteLine(); // 总回合数 + int maxRound = isTeam ? 9999 : 999; int i = 1; - while (i < 999) + while (i < maxRound) { Msg = ""; - if (i == 998) + if (i == maxRound - 1) { if (isTeam) { @@ -426,7 +431,7 @@ namespace Oshima.Core.Utils Msg = ""; 空投(actionQueue, 发放的武器品质, 发放的防具品质, 发放的鞋子品质, 发放的饰品品质); if (isWeb) result.Add("=== 空投 ===\r\n" + Msg); - 下一次空投 = 40; + 下一次空投 = isTeam ? 100 : 40; if (发放的武器品质 < 4) { 发放的武器品质++; @@ -445,9 +450,8 @@ namespace Oshima.Core.Utils } } - if (actionQueue.Eliminated.Count > deaths) + if (actionQueue.LastRound.Targets.Any(c => c.HP <= 0)) { - deaths = actionQueue.Eliminated.Count; if (!isWeb) { string roundMsg = Msg; @@ -489,7 +493,7 @@ namespace Oshima.Core.Utils CharacterStatistics stats = actionQueue.CharacterStatistics[character]; StringBuilder builder = new(); builder.AppendLine($"{(isWeb ? count + "." : (isTeam ? "[ " + actionQueue.GetTeamFromEliminated(character)?.Name + " ]" ?? "" : ""))} [ {character.ToStringWithLevel()} ]"); - builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}"); + builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(actionQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}"); builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}"); builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}"); @@ -511,7 +515,7 @@ namespace Oshima.Core.Utils StringBuilder builder = new(); CharacterStatistics stats = actionQueue.CharacterStatistics[character]; builder.AppendLine($"{(isWeb ? count + "." : ("[ " + actionQueue.GetTeamFromEliminated(character)?.Name + " ]" ?? ""))} [ {character.ToStringWithLevel()} ]"); - builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}"); + builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(actionQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}"); builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}"); builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}"); @@ -539,7 +543,7 @@ namespace Oshima.Core.Utils StringBuilder builder = new(); CharacterStatistics stats = actionQueue.CharacterStatistics[character]; builder.AppendLine($"{(isWeb ? count + ". " : "")}[ {character.ToStringWithLevel()} ]"); - builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}"); + builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(actionQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}"); builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}"); builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}"); @@ -681,8 +685,9 @@ namespace Oshima.Core.Utils if (d != null) 这次发放的空投.Add(d); foreach (Item item in 这次发放的空投) { - Item realItem = item.Copy(1); + Item realItem = item.Copy(); realItem.SetGamingQueue(queue); + realItem.SetLevel(1); queue.Equip(character, realItem); } } diff --git a/OshimaModules/Skills/QingXiang/枯竭打击.cs b/OshimaModules/Skills/QingXiang/枯竭打击.cs index 00c316b..3884354 100644 --- a/OshimaModules/Skills/QingXiang/枯竭打击.cs +++ b/OshimaModules/Skills/QingXiang/枯竭打击.cs @@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"每次造成伤害都会随机减少对方 [ 10~25 ] 点能量值,对能量值低于一半的角色额外造成 30% 伤害。对于枯竭打击而言,能量值大于100且小于150时,视为低于一半。"; + public override string Description => $"每次造成伤害都会随机减少对方 [ 7~15 ] 点能量值,对能量值低于一半的角色额外造成 30% 伤害。对于枯竭打击而言,能量值大于100且小于150时,视为低于一半。"; public override bool TargetSelf => true; private bool 是否是嵌套伤害 = false; @@ -34,7 +34,7 @@ namespace Oshima.FunGame.OshimaModules.Skills if (character == Skill.Character && damageResult != DamageResult.Evaded && !是否是嵌套伤害) { // 减少能量 - double EP = Random.Shared.Next(10, 25); + double EP = Random.Shared.Next(7, 15); enemy.EP -= EP; WriteLine($"[ {character} ] 发动了枯竭打击![ {enemy} ] 的能量值被减少了 {EP:0.##} 点!现有能量:{enemy.EP:0.##}。"); // 额外伤害 diff --git a/OshimaModules/Skills/QingXiang/能量毁灭.cs b/OshimaModules/Skills/QingXiang/能量毁灭.cs index 5dfd8d6..dfb471e 100644 --- a/OshimaModules/Skills/QingXiang/能量毁灭.cs +++ b/OshimaModules/Skills/QingXiang/能量毁灭.cs @@ -17,6 +17,11 @@ namespace Oshima.FunGame.OshimaModules.Skills { Effects.Add(new 能量毁灭特效(this)); } + + public override List SelectTargets(Character caster, List enemys, List teammates) + { + return [.. enemys]; + } } public class 能量毁灭特效(Skill skill) : Effect(skill) diff --git a/OshimaModules/Skills/SkillID.cs b/OshimaModules/Skills/SkillID.cs index 85be3ef..5c2b22d 100644 --- a/OshimaModules/Skills/SkillID.cs +++ b/OshimaModules/Skills/SkillID.cs @@ -1,5 +1,34 @@ namespace Oshima.FunGame.OshimaModules.Skills { + /** + * 冰霜攻击 = 单体伤害 + * 火之矢 = 单体伤害 + * 水之矢 =单体伤害 + * 石之锤 =单体伤害 + * 风之轮 =单体伤害 + * 心灵之霞 =单体伤害 + * 次元上升 = 单体伤害 + * 暗物质 = 单体伤害 + * + * 回复术 = 我方·单体回复, + * 治愈术 = 我方·单体回复, + * 复苏术 = 我方·单体负面解除+回复, + * 圣灵术 = 我方·全体负面解除+回复, + * 时间加速 = 我方·单体速度提升, + * 时间减速 = 单体速度减少, + * 反魔法领域 = 全体封技+施法解除, + * 沉默十字 = 单体封技+施法解除, + * 虚弱领域 = 全体虚弱, + * 混沌烙印 = 单体混乱, + * 凝胶稠絮 = 单体虚弱, + * + * 大地之墙 = 我方·多目标护盾, + * 盖亚之盾 = 我方·全体护盾, + * 风之守护 = 我方·敏捷/闪避提升, + * 结晶防护 = 我方·护甲/魔抗提升, + * 强音之力 = 我方·攻击提升, + * 神圣祝福 = 我方·攻击/护甲/魔抗提升 + */ public enum MagicID : long { 冰霜攻击 = 1001,