using System.Text; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; using Oshima.Core.Configs; using Oshima.Core.Models; using Oshima.Core.Utils; using Oshima.FunGame.OshimaModules.Skills; namespace Oshima.Core.Controllers { [ApiController] [Route("[controller]")] public class FunGameController(ILogger logger) : ControllerBase { private readonly ILogger _logger = logger; [HttpGet("test")] public List GetTest([FromQuery] bool? isweb = null, [FromQuery] bool? isteam = null, [FromQuery] bool? showall = null) { bool web = isweb ?? true; bool team = isteam ?? false; bool all = showall ?? false; return FunGameSimulation.StartGame(false, web, team, all); } [HttpGet("stats")] public string GetStats([FromQuery] int? id = null) { if (id != null && id > 0 && id <= FunGameSimulation.Characters.Count) { Character character = FunGameSimulation.Characters[Convert.ToInt32(id) - 1]; if (FunGameSimulation.CharacterStatistics.TryGetValue(character, out CharacterStatistics? stats) && stats != null) { StringBuilder builder = new(); builder.AppendLine(character.ToString()); builder.AppendLine($"总计造成伤害:{stats.TotalDamage:0.##} / 场均:{stats.AvgDamage:0.##}"); builder.AppendLine($"总计造成物理伤害:{stats.TotalPhysicalDamage:0.##} / 场均:{stats.AvgPhysicalDamage:0.##}"); builder.AppendLine($"总计造成魔法伤害:{stats.TotalMagicDamage:0.##} / 场均:{stats.AvgMagicDamage:0.##}"); builder.AppendLine($"总计造成真实伤害:{stats.TotalRealDamage:0.##} / 场均:{stats.AvgRealDamage:0.##}"); builder.AppendLine($"总计承受伤害:{stats.TotalTakenDamage:0.##} / 场均:{stats.AvgTakenDamage:0.##}"); builder.AppendLine($"总计承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 场均:{stats.AvgTakenPhysicalDamage:0.##}"); builder.AppendLine($"总计承受魔法伤害:{stats.TotalTakenMagicDamage:0.##} / 场均:{stats.AvgTakenMagicDamage:0.##}"); builder.AppendLine($"总计承受真实伤害:{stats.TotalTakenRealDamage:0.##} / 场均:{stats.AvgTakenRealDamage:0.##}"); builder.AppendLine($"总计存活回合数:{stats.LiveRound} / 场均:{stats.AvgLiveRound}"); builder.AppendLine($"总计行动回合数:{stats.ActionTurn} / 场均:{stats.AvgActionTurn}"); builder.AppendLine($"总计存活时长:{stats.LiveTime:0.##} / 场均:{stats.AvgLiveTime:0.##}"); builder.AppendLine($"总计赚取金钱:{stats.TotalEarnedMoney} / 场均:{stats.AvgEarnedMoney}"); builder.AppendLine($"每回合伤害:{stats.DamagePerRound:0.##}"); builder.AppendLine($"每行动回合伤害:{stats.DamagePerTurn:0.##}"); builder.AppendLine($"每秒伤害:{stats.DamagePerSecond:0.##}"); builder.AppendLine($"总计击杀数:{stats.Kills}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Kills / stats.Plays:0.##}" : "")); builder.AppendLine($"总计死亡数:{stats.Deaths}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Deaths / stats.Plays:0.##}" : "")); builder.AppendLine($"总计助攻数:{stats.Assists}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Assists / stats.Plays:0.##}" : "")); builder.AppendLine($"总计首杀数:{stats.FirstKills}" + (stats.Plays != 0 ? $" / 首杀率:{(double)stats.FirstKills / stats.Plays * 100:0.##}%" : "")); builder.AppendLine($"总计首死数:{stats.FirstDeaths}" + (stats.Plays != 0 ? $" / 首死率:{(double)stats.FirstDeaths / stats.Plays * 100:0.##}%" : "")); builder.AppendLine($"总计参赛数:{stats.Plays}"); 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})"); builder.AppendLine($"前三率:{stats.Top3rates * 100:0.##}%"); names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())]; builder.AppendLine($"技术得分:{stats.Rating:0.0#}(#{names.IndexOf(character.GetName()) + 1})"); builder.AppendLine($"上次排名:{stats.LastRank} / 场均名次:{stats.AvgRank:0.##}"); return NetworkUtility.JsonSerialize(builder.ToString()); } } return NetworkUtility.JsonSerialize(""); } [HttpGet("teamstats")] public string GetTeamStats([FromQuery] int? id = null) { if (id != null && id > 0 && id <= FunGameSimulation.Characters.Count) { Character character = FunGameSimulation.Characters[Convert.ToInt32(id) - 1]; if (FunGameSimulation.TeamCharacterStatistics.TryGetValue(character, out CharacterStatistics? stats) && stats != null) { StringBuilder builder = new(); builder.AppendLine(character.ToString()); builder.AppendLine($"总计造成伤害:{stats.TotalDamage:0.##} / 场均:{stats.AvgDamage:0.##}"); builder.AppendLine($"总计造成物理伤害:{stats.TotalPhysicalDamage:0.##} / 场均:{stats.AvgPhysicalDamage:0.##}"); builder.AppendLine($"总计造成魔法伤害:{stats.TotalMagicDamage:0.##} / 场均:{stats.AvgMagicDamage:0.##}"); builder.AppendLine($"总计造成真实伤害:{stats.TotalRealDamage:0.##} / 场均:{stats.AvgRealDamage:0.##}"); builder.AppendLine($"总计承受伤害:{stats.TotalTakenDamage:0.##} / 场均:{stats.AvgTakenDamage:0.##}"); builder.AppendLine($"总计承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 场均:{stats.AvgTakenPhysicalDamage:0.##}"); builder.AppendLine($"总计承受魔法伤害:{stats.TotalTakenMagicDamage:0.##} / 场均:{stats.AvgTakenMagicDamage:0.##}"); builder.AppendLine($"总计承受真实伤害:{stats.TotalTakenRealDamage:0.##} / 场均:{stats.AvgTakenRealDamage:0.##}"); builder.AppendLine($"总计存活回合数:{stats.LiveRound} / 场均:{stats.AvgLiveRound}"); builder.AppendLine($"总计行动回合数:{stats.ActionTurn} / 场均:{stats.AvgActionTurn}"); builder.AppendLine($"总计存活时长:{stats.LiveTime:0.##} / 场均:{stats.AvgLiveTime:0.##}"); builder.AppendLine($"总计赚取金钱:{stats.TotalEarnedMoney} / 场均:{stats.AvgEarnedMoney}"); builder.AppendLine($"每回合伤害:{stats.DamagePerRound:0.##}"); builder.AppendLine($"每行动回合伤害:{stats.DamagePerTurn:0.##}"); builder.AppendLine($"每秒伤害:{stats.DamagePerSecond:0.##}"); builder.AppendLine($"总计击杀数:{stats.Kills}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Kills / stats.Plays:0.##}" : "")); builder.AppendLine($"总计死亡数:{stats.Deaths}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Deaths / stats.Plays:0.##}" : "")); builder.AppendLine($"击杀死亡比:{(stats.Deaths == 0 ? stats.Kills : ((double)stats.Kills / stats.Deaths)):0.##}"); builder.AppendLine($"总计助攻数:{stats.Assists}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Assists / stats.Plays:0.##}" : "")); builder.AppendLine($"总计首杀数:{stats.FirstKills}" + (stats.Plays != 0 ? $" / 首杀率:{(double)stats.FirstKills / stats.Plays * 100:0.##}%" : "")); builder.AppendLine($"总计首死数:{stats.FirstDeaths}" + (stats.Plays != 0 ? $" / 首死率:{(double)stats.FirstDeaths / stats.Plays * 100:0.##}%" : "")); 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})"); names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())]; builder.AppendLine($"技术得分:{stats.Rating:0.0#}(#{names.IndexOf(character.GetName()) + 1})"); return NetworkUtility.JsonSerialize(builder.ToString()); } } return NetworkUtility.JsonSerialize(""); } [HttpGet("winraterank")] public string GetWinrateRank([FromQuery] bool? isteam = null) { bool team = isteam ?? false; if (team) { List strings = []; IEnumerable ratings = FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key); foreach (Character character in ratings) { StringBuilder builder = new(); CharacterStatistics stats = FunGameSimulation.TeamCharacterStatistics[character]; builder.AppendLine(character.ToString()); builder.AppendLine($"总计参赛数:{stats.Plays}"); 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); } else { List strings = []; IEnumerable ratings = FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key); foreach (Character character in ratings) { StringBuilder builder = new(); CharacterStatistics stats = FunGameSimulation.CharacterStatistics[character]; builder.AppendLine(character.ToString()); builder.AppendLine($"总计参赛数:{stats.Plays}"); builder.AppendLine($"总计冠军数:{stats.Wins}"); builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%"); 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); } } [HttpGet("ratingrank")] public string GetRatingRank([FromQuery] bool? isteam = null) { bool team = isteam ?? false; if (team) { List strings = []; IEnumerable ratings = FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key); foreach (Character character in ratings) { StringBuilder builder = new(); CharacterStatistics stats = FunGameSimulation.TeamCharacterStatistics[character]; builder.AppendLine(character.ToString()); builder.AppendLine($"总计参赛数:{stats.Plays}"); 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); } else { List strings = []; IEnumerable ratings = FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key); foreach (Character character in ratings) { StringBuilder builder = new(); CharacterStatistics stats = FunGameSimulation.CharacterStatistics[character]; builder.AppendLine(character.ToString()); builder.AppendLine($"总计参赛数:{stats.Plays}"); builder.AppendLine($"总计冠军数:{stats.Wins}"); builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%"); 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); } } [HttpGet("cjs")] public string GetCharacterIntroduce([FromQuery] int? id = null) { if (id != null && id > 0 && id <= FunGameSimulation.Characters.Count) { Character c = FunGameSimulation.Characters[Convert.ToInt32(id) - 1].Copy(); c.Level = General.GameplayEquilibriumConstant.MaxLevel; c.NormalAttack.Level = General.GameplayEquilibriumConstant.MaxNormalAttackLevel; if (id == 1) { Skill META马 = new META马(c) { Level = 1 }; c.Skills.Add(META马); Skill 力量爆发 = new 力量爆发(c) { Level = General.GameplayEquilibriumConstant.MaxMagicLevel }; c.Skills.Add(力量爆发); } if (id == 2) { Skill 心灵之火 = new 心灵之火(c) { Level = 1 }; c.Skills.Add(心灵之火); Skill 天赐之力 = new 天赐之力(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(天赐之力); } if (id == 3) { Skill 魔法震荡 = new 魔法震荡(c) { Level = 1 }; c.Skills.Add(魔法震荡); Skill 魔法涌流 = new 魔法涌流(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(魔法涌流); } if (id == 4) { Skill 灵能反射 = new 灵能反射(c) { Level = 1 }; c.Skills.Add(灵能反射); Skill 三重叠加 = new 三重叠加(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(三重叠加); } if (id == 5) { Skill 智慧与力量 = new 智慧与力量(c) { Level = 1 }; c.Skills.Add(智慧与力量); Skill 变幻之心 = new 变幻之心(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(变幻之心); } if (id == 6) { Skill 致命打击 = new 致命打击(c) { Level = 1 }; c.Skills.Add(致命打击); Skill 精准打击 = new 精准打击(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(精准打击); } if (id == 7) { Skill 毁灭之势 = new 毁灭之势(c) { Level = 1 }; c.Skills.Add(毁灭之势); Skill 绝对领域 = new 绝对领域(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(绝对领域); } if (id == 8) { Skill 枯竭打击 = new 枯竭打击(c) { Level = 1 }; c.Skills.Add(枯竭打击); Skill 能量毁灭 = new 能量毁灭(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(能量毁灭); } if (id == 9) { Skill 玻璃大炮 = new 玻璃大炮(c) { Level = 1 }; c.Skills.Add(玻璃大炮); Skill 迅捷之势 = new 迅捷之势(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(迅捷之势); } if (id == 10) { Skill 累积之压 = new 累积之压(c) { Level = 1 }; c.Skills.Add(累积之压); Skill 嗜血本能 = new 嗜血本能(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(嗜血本能); } if (id == 11) { Skill 敏捷之刃 = new 敏捷之刃(c) { Level = 1 }; c.Skills.Add(敏捷之刃); Skill 平衡强化 = new 平衡强化(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(平衡强化); } if (id == 12) { Skill 弱者猎手 = new 弱者猎手(c) { Level = 1 }; c.Skills.Add(弱者猎手); Skill 血之狂欢 = new 血之狂欢(c) { Level = General.GameplayEquilibriumConstant.MaxSkillLevel }; c.Skills.Add(血之狂欢); } return NetworkUtility.JsonSerialize(c.GetInfo().Trim()); } 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(c.ToStringWithLevel() + "\r\n" + s.ToString()); s.Level++; ; msg.Add(c.ToStringWithLevel() + "\r\n" + s.ToString()); c.Level = General.GameplayEquilibriumConstant.MaxLevel; s.Level = s.IsMagic ? General.GameplayEquilibriumConstant.MaxMagicLevel : General.GameplayEquilibriumConstant.MaxSkillLevel; msg.Add(c.ToStringWithLevel() + "\r\n" + s.ToString()); } 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.Equipment; if (id != null) { List msg = []; Item? i = items.Where(i => i.Id == id).FirstOrDefault()?.Copy(); if (i != null) { i.SetLevel(1); msg.Add(i.ToString(false, true)); } return NetworkUtility.JsonSerialize(string.Join("\r\n\r\n", msg)); } return NetworkUtility.JsonSerialize(""); } [HttpGet("reload")] public string Relaod([FromQuery] long? master = null) { if (master != null && master == GeneralSettings.Master) { FunGameSimulation.Reload(); return NetworkUtility.JsonSerialize("FunGame已重新加载。"); } return NetworkUtility.JsonSerialize("提供的参数不正确。"); } [HttpPost("post")] public string PostName([FromBody] string name) { return NetworkUtility.JsonSerialize($"Your Name received successfully: {name}."); } [HttpPost("bind")] public string Post([FromBody] BindQQ b) { return NetworkUtility.JsonSerialize("绑定失败,请稍后再试。"); } } }