添加团队死斗模式

This commit is contained in:
milimoe 2024-11-03 23:16:09 +08:00
parent 896aadf3f2
commit cb09bca88d
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
5 changed files with 58 additions and 19 deletions

View File

@ -60,12 +60,12 @@ namespace Oshima.Core.Controllers
builder.AppendLine($"总计前三数:{stats.Top3s}"); builder.AppendLine($"总计前三数:{stats.Top3s}");
builder.AppendLine($"总计败场数:{stats.Loses}"); builder.AppendLine($"总计败场数:{stats.Loses}");
List<string> names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())]; List<string> names = [.. FunGameSimulation.CharacterStatistics.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}");
builder.AppendLine($"前三率:{stats.Top3rates * 100:0.##}%"); builder.AppendLine($"前三率:{stats.Top3rates * 100:0.##}%");
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())]; names = [.. FunGameSimulation.CharacterStatistics.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}");
builder.AppendLine($"上次排名:{stats.LastRank} / 场均名次:{stats.AvgRank}"); builder.AppendLine($"上次排名:{stats.LastRank} / 场均名次:{stats.AvgRank}");
@ -112,9 +112,9 @@ namespace Oshima.Core.Controllers
builder.AppendLine($"总计败场数:{stats.Loses}"); builder.AppendLine($"总计败场数:{stats.Loses}");
List<string> names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())]; List<string> 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())]; 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()); return NetworkUtility.JsonSerialize(builder.ToString());
} }

View File

@ -33,7 +33,6 @@ namespace Oshima.Core.Utils
if (IsRuning) return ["游戏正在模拟中,请勿重复请求!"]; if (IsRuning) return ["游戏正在模拟中,请勿重复请求!"];
List<string> result = []; List<string> result = [];
int deaths = 0;
Msg = ""; Msg = "";
IsRuning = true; IsRuning = true;
@ -283,6 +282,11 @@ namespace Oshima.Core.Utils
// 创建顺序表并排序 // 创建顺序表并排序
ActionQueue actionQueue = new(characters, isTeam, WriteLine); ActionQueue actionQueue = new(characters, isTeam, WriteLine);
if (isTeam)
{
actionQueue.MaxRespawnTimes = -1;
actionQueue.MaxScoreToWin = 30;
}
if (PrintOut) Console.WriteLine(); if (PrintOut) Console.WriteLine();
// 总游戏时长 // 总游戏时长
@ -296,7 +300,7 @@ namespace Oshima.Core.Utils
int = 0; int = 0;
(actionQueue, , , , ); (actionQueue, , , , );
if (isWeb) result.Add("=== 空投 ===\r\n" + Msg); if (isWeb) result.Add("=== 空投 ===\r\n" + Msg);
double = 40; double = isTeam ? 80 : 40;
if ( < 4) if ( < 4)
{ {
++; ++;
@ -362,11 +366,12 @@ namespace Oshima.Core.Utils
if (PrintOut) Console.WriteLine(); if (PrintOut) Console.WriteLine();
// 总回合数 // 总回合数
int maxRound = isTeam ? 9999 : 999;
int i = 1; int i = 1;
while (i < 999) while (i < maxRound)
{ {
Msg = ""; Msg = "";
if (i == 998) if (i == maxRound - 1)
{ {
if (isTeam) if (isTeam)
{ {
@ -426,7 +431,7 @@ namespace Oshima.Core.Utils
Msg = ""; Msg = "";
(actionQueue, , , , ); (actionQueue, , , , );
if (isWeb) result.Add("=== 空投 ===\r\n" + Msg); if (isWeb) result.Add("=== 空投 ===\r\n" + Msg);
= 40; = isTeam ? 100 : 40;
if ( < 4) 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) if (!isWeb)
{ {
string roundMsg = Msg; string roundMsg = Msg;
@ -489,7 +493,7 @@ namespace Oshima.Core.Utils
CharacterStatistics stats = actionQueue.CharacterStatistics[character]; CharacterStatistics stats = actionQueue.CharacterStatistics[character];
StringBuilder builder = new(); StringBuilder builder = new();
builder.AppendLine($"{(isWeb ? count + "." : (isTeam ? "[ " + actionQueue.GetTeamFromEliminated(character)?.Name + " ]" ?? "" : ""))} [ {character.ToStringWithLevel()} ]"); 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.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}");
builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}"); builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}");
builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}");
@ -511,7 +515,7 @@ namespace Oshima.Core.Utils
StringBuilder builder = new(); StringBuilder builder = new();
CharacterStatistics stats = actionQueue.CharacterStatistics[character]; CharacterStatistics stats = actionQueue.CharacterStatistics[character];
builder.AppendLine($"{(isWeb ? count + "." : ("[ " + actionQueue.GetTeamFromEliminated(character)?.Name + " ]" ?? ""))} [ {character.ToStringWithLevel()} ]"); 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.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}");
builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}"); builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}");
builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}");
@ -539,7 +543,7 @@ namespace Oshima.Core.Utils
StringBuilder builder = new(); StringBuilder builder = new();
CharacterStatistics stats = actionQueue.CharacterStatistics[character]; CharacterStatistics stats = actionQueue.CharacterStatistics[character];
builder.AppendLine($"{(isWeb ? count + ". " : "")}[ {character.ToStringWithLevel()} ]"); 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.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}");
builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}"); builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}");
builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}");
@ -681,8 +685,9 @@ namespace Oshima.Core.Utils
if (d != null) .Add(d); if (d != null) .Add(d);
foreach (Item item in ) foreach (Item item in )
{ {
Item realItem = item.Copy(1); Item realItem = item.Copy();
realItem.SetGamingQueue(queue); realItem.SetGamingQueue(queue);
realItem.SetLevel(1);
queue.Equip(character, realItem); queue.Equip(character, realItem);
} }
} }

View File

@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{ {
public override long Id => Skill.Id; public override long Id => Skill.Id;
public override string Name => Skill.Name; 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; public override bool TargetSelf => true;
private bool = false; private bool = false;
@ -34,7 +34,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
if (character == Skill.Character && damageResult != DamageResult.Evaded && !) if (character == Skill.Character && damageResult != DamageResult.Evaded && !)
{ {
// 减少能量 // 减少能量
double EP = Random.Shared.Next(10, 25); double EP = Random.Shared.Next(7, 15);
enemy.EP -= EP; enemy.EP -= EP;
WriteLine($"[ {character} ] 发动了枯竭打击![ {enemy} ] 的能量值被减少了 {EP:0.##} 点!现有能量:{enemy.EP:0.##}。"); WriteLine($"[ {character} ] 发动了枯竭打击![ {enemy} ] 的能量值被减少了 {EP:0.##} 点!现有能量:{enemy.EP:0.##}。");
// 额外伤害 // 额外伤害

View File

@ -17,6 +17,11 @@ namespace Oshima.FunGame.OshimaModules.Skills
{ {
Effects.Add(new (this)); Effects.Add(new (this));
} }
public override List<Character> SelectTargets(Character caster, List<Character> enemys, List<Character> teammates)
{
return [.. enemys];
}
} }
public class (Skill skill) : Effect(skill) public class (Skill skill) : Effect(skill)

View File

@ -1,5 +1,34 @@
namespace Oshima.FunGame.OshimaModules.Skills namespace Oshima.FunGame.OshimaModules.Skills
{ {
/**
* =
* =
* =
* =
* =
* =
* =
* =
*
* = ·,
* = ·,
* = ·+,
* = ·+,
* = ·,
* = ,
* = +,
* = +,
* = ,
* = ,
* = ,
*
* = ·,
* = ·,
* = ·/,
* = ·/,
* = ·,
* = ·//
*/
public enum MagicID : long public enum MagicID : long
{ {
= 1001, = 1001,