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.Characters; namespace Oshima.Core.Controllers { [ApiController] [Route("[controller]")] public class FunGameController(ILogger logger) : ControllerBase { private readonly ILogger _logger = logger; private const int drawCardReduce = 2000; private const int drawCardReduce_Material = 10; private const string noSaved = "你还没有创建存档!请发送【创建存档】创建。"; private readonly ItemType[] itemCanUsed = [ItemType.Consumable, ItemType.MagicCard, ItemType.SpecialItem, ItemType.GiftBox, ItemType.Others]; [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 FunGameActionQueue.StartSimulationGame(false, web, team, all); } [HttpGet("stats")] public string GetStats([FromQuery] int? id = null) { if (id != null && id > 0 && id <= FunGameService.Characters.Count) { Character character = FunGameService.Characters[Convert.ToInt32(id) - 1]; if (FunGameActionQueue.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}"); List names = [.. FunGameActionQueue.CharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())]; builder.AppendLine($"MVP次数:{stats.MVPs}(#{names.IndexOf(character.GetName()) + 1})"); names = [.. FunGameActionQueue.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 = [.. FunGameActionQueue.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 <= FunGameService.Characters.Count) { Character character = FunGameService.Characters[Convert.ToInt32(id) - 1]; if (FunGameActionQueue.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}"); List names = [.. FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())]; builder.AppendLine($"MVP次数:{stats.MVPs}(#{names.IndexOf(character.GetName()) + 1})"); names = [.. FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())]; builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%(#{names.IndexOf(character.GetName()) + 1})"); names = [.. FunGameActionQueue.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 = FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key); foreach (Character character in ratings) { StringBuilder builder = new(); CharacterStatistics stats = FunGameActionQueue.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 = FunGameActionQueue.CharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key); foreach (Character character in ratings) { StringBuilder builder = new(); CharacterStatistics stats = FunGameActionQueue.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 = FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key); foreach (Character character in ratings) { StringBuilder builder = new(); CharacterStatistics stats = FunGameActionQueue.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 = FunGameActionQueue.CharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key); foreach (Character character in ratings) { StringBuilder builder = new(); CharacterStatistics stats = FunGameActionQueue.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("characterinfo")] public string GetCharacterInfo([FromQuery] int? id = null) { if (id != null && id > 0 && id <= FunGameService.Characters.Count) { Character c = FunGameService.Characters[Convert.ToInt32(id) - 1].Copy(); c.Level = General.GameplayEquilibriumConstant.MaxLevel; c.NormalAttack.Level = General.GameplayEquilibriumConstant.MaxNormalAttackLevel; FunGameService.AddCharacterSkills(c, 1, General.GameplayEquilibriumConstant.MaxSkillLevel, General.GameplayEquilibriumConstant.MaxSuperSkillLevel); return NetworkUtility.JsonSerialize(c.GetInfo().Trim()); } return NetworkUtility.JsonSerialize(""); } [HttpGet("skillinfo")] public string GetSkillInfo([FromQuery] long? id = null) { IEnumerable skills = FunGameService.Skills.Union(FunGameService.Magics); if (id != null && FunGameService.Characters.Count > 1) { List msg = []; Character c = FunGameService.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("iteminfo")] public string GetItemInfo([FromQuery] long? id = null) { IEnumerable items = FunGameService.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("newmagiccard")] public string GenerateMagicCard() { Item i = FunGameService.GenerateMagicCard(); return NetworkUtility.JsonSerialize(i.ToString(false, true)); } [HttpGet("newmagiccardpack")] public string GenerateMagicCardPack() { Item? i = FunGameService.GenerateMagicCardPack(3); if (i != null) { return NetworkUtility.JsonSerialize(i.ToString(false, true)); } return NetworkUtility.JsonSerialize(""); } [HttpPost("createsaved")] public string CreateSaved([FromQuery] long? qq = null, [FromQuery] string? name = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); string username = name ?? FunGameService.GenerateRandomChineseUserName(); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count == 0) { User user = Factory.GetUser(userid, username, DateTime.Now, DateTime.Now, userid + "@qq.com", username); user.Inventory.Credits = 5000000; user.Inventory.Characters.Add(new CustomCharacter(userid, username)); pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize($"创建存档成功!你的用户名是【{username}】。"); } else { return NetworkUtility.JsonSerialize("你已经创建过存档!"); } } [HttpPost("restoresaved")] public string RestoreSaved([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); user.Inventory.Credits = 5000000; user.Inventory.Materials = 0; user.Inventory.Characters.Clear(); user.Inventory.Items.Clear(); user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize($"你的存档已还原成功。"); } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("rename")] public string ReName([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); int reduce = 1500; if (user.Inventory.Credits >= reduce) { user.Inventory.Credits -= reduce; } else { return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {reduce} 呢,无法改名!"); } user.Username = FunGameService.GenerateRandomChineseUserName(); if (user.Inventory.Characters.FirstOrDefault(c => c.Id == user.Id) is Character character) { character.Name = user.Username; } if (user.Inventory.Name.EndsWith("的库存")) { user.Inventory.Name = user.Username + "的库存"; } user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize($"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameCurrency},你的新名字是【{user.Username}】"); } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("randomcustom")] public string RandomCustomCharacter([FromQuery] long? qq = null, [FromQuery] bool? confirm = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); bool isConfirm = confirm ?? false; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); EntityModuleConfig emc = new("randomcustom", userid.ToString()); emc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); if (user.Inventory.Characters.FirstOrDefault(c => c.Id == user.Id) is Character character) { PrimaryAttribute oldPA = character.PrimaryAttribute; double oldSTR = character.InitialSTR; double oldAGI = character.InitialAGI; double oldINT = character.InitialINT; double oldSTRG = character.STRGrowth; double oldAGIG = character.AGIGrowth; double oldINTG = character.INTGrowth; Character? newCustom = emc.Count > 0 ? emc.Get("newCustom") : null; if (isConfirm) { if (newCustom != null) { character.PrimaryAttribute = newCustom.PrimaryAttribute; character.InitialSTR = newCustom.InitialSTR; character.InitialAGI = newCustom.InitialAGI; character.InitialINT = newCustom.InitialINT; character.STRGrowth = newCustom.STRGrowth; character.AGIGrowth = newCustom.AGIGrowth; character.INTGrowth = newCustom.INTGrowth; user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); emc.Clear(); emc.SaveConfig(); return NetworkUtility.JsonSerialize($"你已完成重随属性确认,新的自建角色属性如下:\r\n" + $"核心属性:{CharacterSet.GetPrimaryAttributeName(oldPA)} => {CharacterSet.GetPrimaryAttributeName(character.PrimaryAttribute)}\r\n" + $"初始力量:{oldSTR}(+{oldSTRG}/Lv)=> {character.InitialSTR}(+{character.STRGrowth}/Lv)\r\n" + $"初始敏捷:{oldAGI}(+{oldAGIG}/Lv)=> {character.InitialAGI}(+{character.AGIGrowth}/Lv)\r\n" + $"初始智力:{oldINT}(+{oldINTG}/Lv)=> {character.InitialINT}(+{character.INTGrowth}/Lv)"); } else { return NetworkUtility.JsonSerialize($"你还没有获取过重随属性预览!"); } } else { if (newCustom is null) { int reduce = 20; if (user.Inventory.Materials >= reduce) { user.Inventory.Materials -= reduce; } else { return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {reduce} 呢,无法重随自建角色属性!"); } newCustom = new CustomCharacter(user.Id, ""); user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); emc.Add("newCustom", newCustom); emc.SaveConfig(); return NetworkUtility.JsonSerialize($"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},获取到重随属性预览如下:\r\n" + $"核心属性:{CharacterSet.GetPrimaryAttributeName(oldPA)} => {CharacterSet.GetPrimaryAttributeName(newCustom.PrimaryAttribute)}\r\n" + $"初始力量:{oldSTR}(+{oldSTRG}/Lv)=> {newCustom.InitialSTR}(+{newCustom.STRGrowth}/Lv)\r\n" + $"初始敏捷:{oldAGI}(+{oldAGIG}/Lv)=> {newCustom.InitialAGI}(+{newCustom.AGIGrowth}/Lv)\r\n" + $"初始智力:{oldINT}(+{oldINTG}/Lv)=> {newCustom.InitialINT}(+{newCustom.INTGrowth}/Lv)\r\n" + $"请发送【确认角色重随】来确认更新,或者发送【取消角色重随】来取消操作。"); } else if (newCustom.Id == user.Id) { return NetworkUtility.JsonSerialize($"你已经有一个待确认的重随属性如下:\r\n" + $"核心属性:{CharacterSet.GetPrimaryAttributeName(oldPA)} => {CharacterSet.GetPrimaryAttributeName(newCustom.PrimaryAttribute)}\r\n" + $"初始力量:{oldSTR}(+{oldSTRG}/Lv)=> {newCustom.InitialSTR}(+{newCustom.STRGrowth}/Lv)\r\n" + $"初始敏捷:{oldAGI}(+{oldAGIG}/Lv)=> {newCustom.InitialAGI}(+{newCustom.AGIGrowth}/Lv)\r\n" + $"初始智力:{oldINT}(+{oldINTG}/Lv)=> {newCustom.InitialINT}(+{newCustom.INTGrowth}/Lv)\r\n"+ $"请发送【确认角色重随】来确认更新,或者发送【取消角色重随】来取消操作。"); } else { return NetworkUtility.JsonSerialize($"重随自建角色属性失败!"); } } } else { return NetworkUtility.JsonSerialize($"你似乎没有自建角色,请发送【生成自建角色】创建!"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("cancelrandomcustom")] public string CancelRandomCustomCharacter([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { EntityModuleConfig emc = new("randomcustom", userid.ToString()); emc.LoadConfig(); if (emc.Count > 0) { emc.Clear(); emc.SaveConfig(); return NetworkUtility.JsonSerialize($"已取消角色重随。"); } else { return NetworkUtility.JsonSerialize($"你目前没有待确认的角色重随。"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("inventoryinfo")] public string GetInventoryInfo([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); return NetworkUtility.JsonSerialize(user.Inventory.ToString(false)); } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("inventoryinfo2")] public List GetInventoryInfo2([FromQuery] long? qq = null, [FromQuery] int? page = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int showPage = page ?? 1; if (showPage <= 0) showPage = 1; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); List list = []; if (pc.Count > 0) { User user = FunGameService.GetUser(pc); list.Add($"☆★☆ {user.Inventory.Name} ☆★☆"); list.Add($"{General.GameplayEquilibriumConstant.InGameCurrency}:{user.Inventory.Credits:0.00}"); list.Add($"{General.GameplayEquilibriumConstant.InGameMaterial}:{user.Inventory.Materials:0.00}"); List characters = [.. user.Inventory.Characters]; List items = [.. user.Inventory.Items]; int total = characters.Count + items.Count; int maxPage = (int)Math.Ceiling((double)total / 10); if (maxPage < 1) maxPage = 1; if (showPage <= maxPage) { List inventory = [.. characters, .. items]; Dictionary dict = inventory.Select((obj, index) => new { Index = index + 1, Value = obj }).ToDictionary(k => k.Index, v => v.Value); List seq = [.. FunGameService.GetPage(dict.Keys, showPage, 10)]; bool showCharacter = true; bool showItem = true; int characterCount = 0; int itemCount = 0; int prevSequence = dict.Take((showPage - 1) * 10).Count(); foreach (int index in seq) { object obj = dict[index]; string str = ""; if (obj is Character character) { characterCount++; if (showCharacter) { showCharacter = false; list.Add("======= 角色 ======="); } str = $"{prevSequence + characterCount}. {character.ToStringWithLevelWithOutUser()}"; } if (obj is Item item) { itemCount++; if (showItem) { showItem = false; list.Add("======= 物品 ======="); } str = $"{index - (characterCount > 0 ? prevSequence + characterCount : characters.Count)}. [{ItemSet.GetQualityTypeName(item.QualityType)}|{ItemSet.GetItemTypeName(item.ItemType)}] {item.Name}\r\n"; str += $"{item.ToStringInventory(false).Trim()}"; } list.Add(str); } list.Add($"页数:{showPage} / {maxPage}"); } else { list.Add($"没有这么多页!当前总页数为 {maxPage},但你请求的是第 {showPage} 页。"); } } else { list.Add(noSaved); } return list; } [HttpPost("inventoryinfo3")] public List GetInventoryInfo3([FromQuery] long? qq = null, [FromQuery] int? page = null, [FromQuery] int? order = null, [FromQuery] int? orderqty = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int showPage = page ?? 1; if (showPage <= 0) showPage = 1; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); List list = []; if (pc.Count > 0) { User user = FunGameService.GetUser(pc); list.Add($"☆★☆ {user.Inventory.Name} ☆★☆"); list.Add($"{General.GameplayEquilibriumConstant.InGameCurrency}:{user.Inventory.Credits:0.00}"); list.Add($"{General.GameplayEquilibriumConstant.InGameMaterial}:{user.Inventory.Materials:0.00}"); List items = [.. user.Inventory.Items]; Dictionary> itemCategory = []; foreach (Item item in items) { if (!itemCategory.TryAdd(item.GetIdName(), [item])) { itemCategory[item.GetIdName()].Add(item); } } if (orderqty != 0) { IOrderedEnumerable>>? orderEnum = null; if (order != 0) { orderEnum = order switch { 1 => itemCategory.OrderBy(kv => kv.Value.FirstOrDefault()?.QualityType ?? 0), 2 => itemCategory.OrderByDescending(kv => kv.Value.FirstOrDefault()?.QualityType ?? 0), 3 => itemCategory.OrderBy(kv => kv.Value.FirstOrDefault()?.ItemType ?? 0), 4 => itemCategory.OrderByDescending(kv => kv.Value.FirstOrDefault()?.ItemType ?? 0), _ => itemCategory.OrderBy(kv => 0) }; } if (orderEnum != null) { if (orderqty == 1) { orderEnum = orderEnum.ThenBy(kv => kv.Value.Count); } else { orderEnum = orderEnum.ThenByDescending(kv => kv.Value.Count); } itemCategory = orderEnum.ToDictionary(); } } int maxPage = (int)Math.Ceiling((double)itemCategory.Count / 10); if (maxPage < 1) maxPage = 1; if (showPage <= maxPage) { List keys = [.. FunGameService.GetPage(itemCategory.Keys, showPage, 10)]; int itemCount = 0; list.Add("======= 物品 ======="); foreach (string key in keys) { itemCount++; List objs = itemCategory[key]; Item first = objs[0]; string str = $"{itemCount}. [{ItemSet.GetQualityTypeName(first.QualityType)}|{ItemSet.GetItemTypeName(first.ItemType)}] {first.Name}\r\n"; str += $"物品描述:{first.Description}\r\n"; str += $"物品序号:{string.Join(",", objs.Select(i => items.IndexOf(i) + 1))}\r\n"; str += $"拥有数量:{objs.Count}(" + (first.IsEquipment ? $"可装备数量:{objs.Count(i => i.Character is null)}," : "") + (itemCanUsed.Contains(first.ItemType) ? $"可使用数量:{objs.Count(i => i.RemainUseTimes > 0)}," : "") + $"可出售数量:{objs.Count(i => i.IsSellable)},可交易数量:{objs.Count(i => i.IsTradable)})"; list.Add(str); } list.Add($"页数:{showPage} / {maxPage}"); } else { list.Add($"没有这么多页!当前总页数为 {maxPage},但你请求的是第 {showPage} 页。"); } } else { list.Add(noSaved); } return list; } [HttpPost("inventoryinfo4")] public List GetInventoryInfo4([FromQuery] long? qq = null, [FromQuery] int? page = null, [FromQuery] int? type = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int showPage = page ?? 1; int itemtype = type ?? -1; if (showPage <= 0) showPage = 1; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); List list = []; if (pc.Count > 0) { if (type == -1) { return ["没有指定物品的类型,请使用通用查询方法!"]; } User user = FunGameService.GetUser(pc); list.Add($"☆★☆ {user.Inventory.Name} ☆★☆"); list.Add($"{General.GameplayEquilibriumConstant.InGameCurrency}:{user.Inventory.Credits:0.00}"); list.Add($"{General.GameplayEquilibriumConstant.InGameMaterial}:{user.Inventory.Materials:0.00}"); List items = [.. user.Inventory.Items]; Dictionary> itemCategory = []; foreach (Item item in items) { if (!itemCategory.TryAdd(item.GetIdName(), [item])) { itemCategory[item.GetIdName()].Add(item); } } // 按品质倒序、数量倒序排序 itemCategory = itemCategory.OrderByDescending(kv => kv.Value.FirstOrDefault()?.QualityType ?? 0).ThenByDescending(kv => kv.Value.Count).ToDictionary(); // 移除所有非指定类型的物品 foreach (List listTemp in itemCategory.Values) { if (listTemp.First() is Item item && (int)item.ItemType != itemtype) { itemCategory.Remove(item.GetIdName()); } } int maxPage = (int)Math.Ceiling((double)itemCategory.Count / 10); if (maxPage < 1) maxPage = 1; if (showPage <= maxPage) { List keys = [.. FunGameService.GetPage(itemCategory.Keys, showPage, 10)]; int itemCount = 0; list.Add($"======= {ItemSet.GetItemTypeName((ItemType)itemtype).Replace("物品", "")}物品 ======="); foreach (string key in keys) { itemCount++; List objs = itemCategory[key]; Item first = objs[0]; string str = $"{itemCount}. [{ItemSet.GetQualityTypeName(first.QualityType)}|{ItemSet.GetItemTypeName(first.ItemType)}] {first.Name}\r\n"; str += $"物品描述:{first.Description}\r\n"; str += $"物品序号:{string.Join(",", objs.Select(i => items.IndexOf(i) + 1))}\r\n"; str += $"拥有数量:{objs.Count}(" + (first.IsEquipment ? $"可装备数量:{objs.Count(i => i.Character is null)}," : "") + (itemCanUsed.Contains(first.ItemType) ? $"可使用数量:{objs.Count(i => i.RemainUseTimes > 0)}," : "") + $"可出售数量:{objs.Count(i => i.IsSellable)},可交易数量:{objs.Count(i => i.IsTradable)})"; list.Add(str); } list.Add($"页数:{showPage} / {maxPage}"); } else { list.Add($"没有这么多页!当前总页数为 {maxPage},但你请求的是第 {showPage} 页。"); } } else { list.Add(noSaved); } return list; } [HttpPost("inventoryinfo5")] public List GetInventoryInfo5([FromQuery] long? qq = null, [FromQuery] int? page = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int showPage = page ?? 1; if (showPage <= 0) showPage = 1; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); List list = []; if (pc.Count > 0) { User user = FunGameService.GetUser(pc); list.Add($"☆★☆ {user.Inventory.Name} ☆★☆"); list.Add($"{General.GameplayEquilibriumConstant.InGameCurrency}:{user.Inventory.Credits:0.00}"); list.Add($"{General.GameplayEquilibriumConstant.InGameMaterial}:{user.Inventory.Materials:0.00}"); List characters = [.. user.Inventory.Characters]; int total = characters.Count; int maxPage = (int)Math.Ceiling((double)total / 6); if (maxPage < 1) maxPage = 1; if (showPage <= maxPage) { List inventory = [.. characters]; Dictionary dict = inventory.Select((obj, index) => new { Index = index + 1, Value = obj }).ToDictionary(k => k.Index, v => v.Value); List seq = [.. FunGameService.GetPage(dict.Keys, showPage, 6)]; bool showCharacter = true; int characterCount = 0; int prevSequence = dict.Take((showPage - 1) * 6).Count(); foreach (int index in seq) { object obj = dict[index]; string str = ""; if (obj is Character character) { characterCount++; if (showCharacter) { showCharacter = false; list.Add("======= 角色 ======="); } str = $"{prevSequence + characterCount}. {character.ToStringWithLevelWithOutUser()}"; } list.Add(str); } list.Add($"页数:{showPage} / {maxPage}"); } else { list.Add($"没有这么多页!当前总页数为 {maxPage},但你请求的是第 {showPage} 页。"); } } else { list.Add(noSaved); } return list; } [HttpPost("newcustomcharacter")] public string NewCustomCharacter([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); if (user.Inventory.Characters.Any(c => c.Id == user.Id)) { return NetworkUtility.JsonSerialize($"你已经拥有一个自建角色【{user.Username}】,无法再创建!"); } else { user.Inventory.Characters.Add(new CustomCharacter(userid, user.Username)); user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize($"恭喜你成功创建了一个自建角色【{user.Username}】,请查看你的角色库存!"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("drawcard")] public string DrawCard([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); int reduce = drawCardReduce; if (user.Inventory.Credits >= reduce) { user.Inventory.Credits -= reduce; } else { return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {reduce} 呢,无法抽卡!"); } double dice = Random.Shared.NextDouble(); if (dice > 0.8) { string msg = FunGameService.GetDrawCardResult(reduce, user); user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize(msg); } else { pc.SaveConfig(); return NetworkUtility.JsonSerialize($"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameCurrency},你什么也没抽中……"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("drawcards")] public List DrawCards([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); int reduce = drawCardReduce * 10; if (user.Inventory.Credits >= reduce) { user.Inventory.Credits -= reduce; } else { return [$"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {reduce} 呢,无法十连抽卡!"]; } List result = [$"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameCurrency},恭喜你抽到了:"]; int count = 0; for (int i = 0; i < 10; i++) { double dice = Random.Shared.NextDouble(); if (dice > 0.8) { count++; result.Add(FunGameService.GetDrawCardResult(reduce, user, true, count)); } } if (result.Count == 1) { result[0] = $"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameCurrency},你什么也没抽中……"; } user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return result; } else { return [noSaved]; } } [HttpPost("drawcardm")] public string DrawCard_Material([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); int reduce = drawCardReduce_Material; if (user.Inventory.Materials >= reduce) { user.Inventory.Materials -= reduce; } else { return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {reduce} 呢,无法抽卡!"); } double dice = Random.Shared.NextDouble(); if (dice > 0.8) { string msg = FunGameService.GetDrawCardResult(reduce, user); user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize(msg); } else { pc.SaveConfig(); return NetworkUtility.JsonSerialize($"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},你什么也没抽中……"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("drawcardsm")] public List DrawCards_Material([FromQuery] long? qq = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); int reduce = drawCardReduce_Material * 10; if (user.Inventory.Materials >= reduce) { user.Inventory.Materials -= reduce; } else { return [$"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {reduce} 呢,无法十连抽卡!"]; } List result = [$"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},恭喜你抽到了:"]; int count = 0; for (int i = 0; i < 10; i++) { double dice = Random.Shared.NextDouble(); if (dice > 0.8) { count++; result.Add(FunGameService.GetDrawCardResult(reduce, user, true, count)); } } if (result.Count == 1) { result[0] = $"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},你什么也没抽中……"; } user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return result; } else { return [noSaved]; } } [HttpPost("exchangecredits")] public string ExchangeCredits([FromQuery] long? qq = null, [FromQuery] double? materials = null) { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); double useMaterials = materials ?? 0; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); int reduce = (int)useMaterials >= 10 ? (int)useMaterials : 10; reduce -= reduce % 10; if (reduce >= 10 && user.Inventory.Materials >= reduce) { int reward = reduce / 10 * 2000; user.Inventory.Credits += reward; user.Inventory.Materials -= reduce; user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize($"兑换成功!你消耗了 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},增加了 {reward} {General.GameplayEquilibriumConstant.InGameCurrency}!"); } else { return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {reduce},最低消耗 10 {General.GameplayEquilibriumConstant.InGameMaterial}兑换 2000 {General.GameplayEquilibriumConstant.InGameCurrency}!"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } [HttpPost("showcharacterinfo")] public string GetCharacterInfoFromInventory([FromQuery] long? qq = null, [FromQuery] int? seq = null) { try { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int cIndex = seq ?? 0; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); if (cIndex > 0 && cIndex <= user.Inventory.Characters.Count) { Character character = user.Inventory.Characters.ToList()[cIndex - 1]; return NetworkUtility.JsonSerialize($"这是你库存中序号为 {cIndex} 的角色详细信息:\r\n{character.GetInfo().Trim()}"); } else { return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } catch (Exception e) { return NetworkUtility.JsonSerialize(e.ToString()); } } [HttpPost("showiteminfo")] public string GetItemInfoFromInventory([FromQuery] long? qq = null, [FromQuery] int? seq = null) { try { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int itemIndex = seq ?? 0; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); if (itemIndex > 0 && itemIndex <= user.Inventory.Items.Count) { Item item = user.Inventory.Items.ToList()[itemIndex - 1]; return NetworkUtility.JsonSerialize($"这是你库存中序号为 {itemIndex} 的物品详细信息:\r\n{item.ToStringInventory(true).Trim()}"); } else { return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的物品!"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } catch (Exception e) { return NetworkUtility.JsonSerialize(e.ToString()); } } [HttpPost("equipitem")] public string EquipItem([FromQuery] long? qq = null, [FromQuery] int? c = null, [FromQuery] int? i = null) { try { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; int itemIndex = i ?? 0; PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); Character? character = null; Item? item = null; if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count) { character = user.Inventory.Characters.ToList()[characterIndex - 1]; } else { return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!"); } if (itemIndex > 0 && itemIndex <= user.Inventory.Items.Count) { item = user.Inventory.Items.ToList()[itemIndex - 1]; if ((int)item.ItemType < (int)ItemType.MagicCardPack || (int)item.ItemType > (int)ItemType.Accessory) { return NetworkUtility.JsonSerialize($"这个物品无法被装备!"); } else if (item.Character != null) { return NetworkUtility.JsonSerialize($"这个物品无法被装备![ {item.Character.ToStringWithLevelWithOutUser()} ] 已装备此物品。"); } } else { return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的物品!"); } if (character != null && item != null && character.Equip(item)) { user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize($"装备{ItemSet.GetQualityTypeName(item.QualityType)}{ItemSet.GetItemTypeName(item.ItemType)}【{item.Name}】成功!" + $"({ItemSet.GetEquipSlotTypeName(item.EquipSlotType)}栏位)\r\n物品描述:{item.Description}"); } else { return NetworkUtility.JsonSerialize($"装备失败!可能是角色、物品不存在或者其他原因。"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } catch (Exception e) { return NetworkUtility.JsonSerialize(e.ToString()); } } [HttpPost("unequipitem")] public string UnEquipItem([FromQuery] long? qq = null, [FromQuery] int? c = null, [FromQuery] int? i = null) { try { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; EquipSlotType type = (EquipSlotType)(i ?? 0); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); Character? character = null; if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count) { character = user.Inventory.Characters.ToList()[characterIndex - 1]; Item? item = character.UnEquip(type); if (item != null && user.Inventory.Items.Where(i => i.Guid == item.Guid).FirstOrDefault() is Item itemInventory) { itemInventory.EquipSlotType = EquipSlotType.None; user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); return NetworkUtility.JsonSerialize($"取消装备{ItemSet.GetQualityTypeName(item.QualityType)}{ItemSet.GetItemTypeName(item.ItemType)}【{item.Name}】成功!({ItemSet.GetEquipSlotTypeName(type)}栏位)"); } else return NetworkUtility.JsonSerialize($"取消装备失败!角色并没有装备{ItemSet.GetEquipSlotTypeName(type)},或者库存中不存在此物品!"); } else { return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!"); } } else { return NetworkUtility.JsonSerialize(noSaved); } } catch (Exception e) { return NetworkUtility.JsonSerialize(e.ToString()); } } [HttpPost("fightcustom")] public List FightCustom([FromQuery] long? qq = null, [FromQuery] long? eqq = null) { try { long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); long enemyid = eqq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); PluginConfig pc = new("saved", userid.ToString()); pc.LoadConfig(); PluginConfig pc2 = new("saved", enemyid.ToString()); pc2.LoadConfig(); User? user1 = null, user2 = null; if (pc.Count > 0) { user1 = FunGameService.GetUser(pc); } else { return [noSaved]; } if (pc2.Count > 0) { user2 = FunGameService.GetUser(pc2); } else { return [$"对方貌似还没有创建存档呢!"]; } if (user1 != null && user2 != null) { Character? character1 = user1.Inventory.Characters.FirstOrDefault(c => c.Id == user1.Id); if (character1 is null) { return [$"你似乎没有自建角色,请发送【生成自建角色】创建!"]; } Character? character2 = user2.Inventory.Characters.FirstOrDefault(c => c.Id == user2.Id); if (character2 is null) { return [$"对方似乎还没有自建角色,请发送【生成自建角色】创建!"]; } return FunGameActionQueue.StartGame([character1, character2], false, false, false, false); } else { return [$"决斗发起失败!"]; } } catch (Exception e) { return [e.ToString()]; } } [HttpGet("reload")] public string Relaod([FromQuery] long? master = null) { if (master != null && master == GeneralSettings.Master) { FunGameService.Reload(); FunGameActionQueue.InitFunGame(); 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("绑定失败,请稍后再试。"); } } }