diff --git a/OshimaCore/Controllers/FunGameController.cs b/OshimaCore/Controllers/FunGameController.cs index ed8afc4..b443ae7 100644 --- a/OshimaCore/Controllers/FunGameController.cs +++ b/OshimaCore/Controllers/FunGameController.cs @@ -61,9 +61,11 @@ 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())]; + List names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())]; + builder.AppendLine($"MVP次数:{stats.MVPs}(#{names.IndexOf(character.GetName()) + 1})"); + + 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.##}%"); @@ -111,11 +113,12 @@ namespace Oshima.Core.Controllers 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.Wins}"); builder.AppendLine($"总计败场数:{stats.Loses}"); - builder.AppendLine($"MVP次数:{stats.MVPs}"); - List names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())]; + List names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())]; + builder.AppendLine($"MVP次数:{stats.MVPs}(#{names.IndexOf(character.GetName()) + 1})"); + 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})"); @@ -470,7 +473,131 @@ namespace Oshima.Core.Controllers } return NetworkUtility.JsonSerialize(""); } + + [HttpPost("cjcd")] + public string CreateSaved([FromQuery] long? qq = null, string? name = null) + { + long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); + string username = name ?? "Unknown"; + string filepath = $@"{AppDomain.CurrentDomain.BaseDirectory}configs/saved/{userid}.json"; + if (System.IO.File.Exists(filepath)) + { + return NetworkUtility.JsonSerialize("你已经创建过存档!"); + } + User user = Factory.GetUser(userid, username, DateTime.Now, DateTime.Now, userid + "@qq.com", username); + user.Inventory.Credits = 100; + PluginConfig pc = new("saved", userid.ToString()); + pc.LoadConfig(); + pc.Add("user", user); + return NetworkUtility.JsonSerialize($"创建存档成功!你的用户名是【{username}】。"); + } + [HttpPost("ckkc")] + public string GetInventoryInfo([FromQuery] long? qq = null) + { + long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); + string filepath = $@"{AppDomain.CurrentDomain.BaseDirectory}configs/saved/{userid}.json"; + if (!System.IO.File.Exists(filepath)) + { + return NetworkUtility.JsonSerialize("你还没有创建存档!请发送【创建存档】创建。"); + } + + PluginConfig pc = new("saved", userid.ToString()); + pc.LoadConfig(); + + if (pc.Count > 0) + { + User user = FunGameSimulation.GetUser(pc); + + return NetworkUtility.JsonSerialize(user.Inventory.ToString(false)); + } + else + { + return NetworkUtility.JsonSerialize($"你好像一无所有……"); + } + } + + [HttpPost("ck")] + public string DrawCards([FromQuery] long? qq = null) + { + long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); + string filepath = $@"{AppDomain.CurrentDomain.BaseDirectory}configs/saved/{userid}.json"; + if (!System.IO.File.Exists(filepath)) + { + return NetworkUtility.JsonSerialize("你还没有创建存档!请发送【创建存档】创建。"); + } + + PluginConfig pc = new("saved", userid.ToString()); + pc.LoadConfig(); + User user = FunGameSimulation.GetUser(pc); + + double dice = Random.Shared.NextDouble(); + if (dice > 0.8) + { + string msg = "恭喜你抽到了:【"; + int r = Random.Shared.Next(7); + switch (r) + { + case 1: + Item[] 武器 = FunGameSimulation.Equipment.Where(i => i.Id.ToString().StartsWith("11")).ToArray(); + Item a = 武器[Random.Shared.Next(武器.Length)].Copy(); + user.Inventory.Items.Add(a); + msg += a.Name; + break; + + case 2: + Item[] 防具 = FunGameSimulation.Equipment.Where(i => i.Id.ToString().StartsWith("12")).ToArray(); + Item b = 防具[Random.Shared.Next(防具.Length)].Copy(); + user.Inventory.Items.Add(b); + msg += b.Name; + break; + + case 3: + Item[] 鞋子 = FunGameSimulation.Equipment.Where(i => i.Id.ToString().StartsWith("13")).ToArray(); + Item c = 鞋子[Random.Shared.Next(鞋子.Length)].Copy(); + user.Inventory.Items.Add(c); + msg += c.Name; + break; + + case 4: + Item[] 饰品 = FunGameSimulation.Equipment.Where(i => i.Id.ToString().StartsWith("14")).ToArray(); + Item d = 饰品[Random.Shared.Next(饰品.Length)].Copy(); + user.Inventory.Items.Add(d); + msg += d.Name; + break; + + case 5: + Character character = FunGameSimulation.Characters[Random.Shared.Next(FunGameSimulation.Characters.Count)].Copy(); + user.Inventory.Characters.Add(character); + msg += character.ToStringWithOutUser(); + break; + + case 6: + Item mfk = FunGameSimulation.GenerateMagicCard(); + user.Inventory.Items.Add(mfk); + msg += mfk.Name; + break; + + case 0: + default: + Item? mfkb = FunGameSimulation.GenerateMagicCardPack(3); + if (mfkb != null) + { + mfkb.IsTradable = false; + mfkb.NextTradableTime = DateTimeUtility.GetTradableTime(); + user.Inventory.Items.Add(mfkb); + msg += mfkb.Name; + } + break; + } + return NetworkUtility.JsonSerialize(msg + "】!"); + } + else + { + return NetworkUtility.JsonSerialize("你什么也没抽中……"); + } + } + [HttpGet("reload")] public string Relaod([FromQuery] long? master = null) { diff --git a/OshimaCore/Utils/FunGameUtil.cs b/OshimaCore/Utils/FunGameUtil.cs index 0b17b8a..4554045 100644 --- a/OshimaCore/Utils/FunGameUtil.cs +++ b/OshimaCore/Utils/FunGameUtil.cs @@ -1369,5 +1369,68 @@ namespace Oshima.Core.Utils return name.ToString(); } + + public static User GetUser(PluginConfig pc) + { + User user = pc.Get("user") ?? Factory.GetUser(); + + List characters = new(user.Inventory.Characters); + List items = new(user.Inventory.Items); + user.Inventory.Characters.Clear(); + user.Inventory.Items.Clear(); + + foreach (Character inventoryCharacter in characters) + { + Character realCharacter = CharacterBuilder.Build(inventoryCharacter, false); + realCharacter.User = user; + user.Inventory.Characters.Add(realCharacter); + } + + foreach (Item inventoryItem in items) + { + Item realItem = inventoryItem.Copy(true, true); + if (realItem.IsEquipment) + { + IEnumerable has = user.Inventory.Characters.Where(character => + { + if (realItem.ItemType == ItemType.MagicCardPack && character.EquipSlot.MagicCardPack != null && realItem.Guid == character.EquipSlot.MagicCardPack.Guid) + { + return true; + } + if (realItem.ItemType == ItemType.Weapon && character.EquipSlot.Weapon != null && realItem.Guid == character.EquipSlot.Weapon.Guid) + { + return true; + } + if (realItem.ItemType == ItemType.Armor && character.EquipSlot.Armor != null && realItem.Guid == character.EquipSlot.Armor.Guid) + { + return true; + } + if (realItem.ItemType == ItemType.Shoes && character.EquipSlot.Shoes != null && realItem.Guid == character.EquipSlot.Shoes.Guid) + { + return true; + } + if (realItem.ItemType == ItemType.Accessory) + { + if (character.EquipSlot.Accessory1 != null && realItem.Guid == character.EquipSlot.Accessory1.Guid) + { + return true; + } + else if (character.EquipSlot.Accessory2 != null && realItem.Guid == character.EquipSlot.Accessory2.Guid) + { + return true; + } + } + return false; + }); + if (has.Any() && has.First() is Character character) + { + realItem.Character = character; + } + } + user.Inventory.Items.Add(realItem); + } + + return user; + } } }