From ef349b5d45e9b3e821df78a4caa93d900d4cc996 Mon Sep 17 00:00:00 2001 From: milimoe Date: Thu, 31 Jul 2025 00:44:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E6=9C=AC=E8=BE=93?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OshimaServers/Model/HorseRacing.cs | 18 ++--- OshimaServers/Service/FunGameService.cs | 6 +- OshimaWebAPI/Controllers/FunGameController.cs | 5 ++ OshimaWebAPI/Services/RainBOTService.cs | 81 +++++++++++-------- 4 files changed, 66 insertions(+), 44 deletions(-) diff --git a/OshimaServers/Model/HorseRacing.cs b/OshimaServers/Model/HorseRacing.cs index 02b18ca..5e8c30f 100644 --- a/OshimaServers/Model/HorseRacing.cs +++ b/OshimaServers/Model/HorseRacing.cs @@ -14,7 +14,7 @@ namespace Oshima.FunGame.OshimaServers.Model Dictionary userPoints = []; StringBuilder builder = new(); - builder.AppendLine("--- 参赛选手 ---"); + builder.AppendLine("☆--- 参赛选手 ---☆"); List horses = []; foreach (User user in room.UserAndIsReady.Keys) @@ -33,14 +33,14 @@ namespace Oshima.FunGame.OshimaServers.Model } } - builder.AppendLine("\r\n--- 比赛开始! ---"); + builder.AppendLine("\r\n☆--- 比赛开始! ---☆"); int maxLength = _random.Next(8, 16); builder.AppendLine($"本次抽取赛道长度:{maxLength} 步!"); for (int turn = 1; turn <= MaxTurns; turn++) { - builder.AppendLine($"\r\n--- 第 {turn} 回合 ---"); + builder.AppendLine($"\r\n\r\n☆--- 第 {turn} 回合 ---☆"); bool raceFinished = false; Dictionary turnSteps = []; Dictionary> turnSkills = []; @@ -161,19 +161,19 @@ namespace Oshima.FunGame.OshimaServers.Model if (horse.CurrentPosition >= maxLength) { - builder.AppendLine($"\r\n🎯 恭喜 [ {horse}({horse.HP}) ] 冲过终点线!它赢得了比赛!"); + builder.AppendLine($"\r\n🎯 恭喜 [ {horse}({horse.HP}) ] 冲过终点线!它赢得了比赛!\r\n"); raceFinished = true; break; } } - builder.AppendLine("\r\n--- 赛道状况 ---"); + builder.AppendLine("☆--- 赛道状况 ---☆"); for (int i = 0; i < horses.Count; i++) { builder.AppendLine(GenerateTrackString(horses[i], i + 1, maxLength, turnSteps)); } - msgs.Add(builder.ToString().Trim()); + msgs.Add($"{builder.ToString().Trim()}\r\n"); builder.Clear(); if (raceFinished) @@ -183,7 +183,7 @@ namespace Oshima.FunGame.OshimaServers.Model } builder.Clear(); - builder.AppendLine("\r\n--- 比赛结果 ---"); + builder.AppendLine("☆--- 比赛结果 ---☆"); List finalRanking = [.. horses.OrderByDescending(h => h.CurrentPosition)]; int points = 10; for (int i = 0; i < finalRanking.Count; i++) @@ -194,8 +194,8 @@ namespace Oshima.FunGame.OshimaServers.Model if (points == 0) points = 1; } - builder.AppendLine("\r\n--- 比赛结束,奖励将在稍后发放! ---"); - msgs.Add(builder.ToString().Trim()); + builder.AppendLine("\r\n比赛结束,奖励将在稍后发放!"); + msgs.Add($"\r\n{builder.ToString().Trim()}"); return userPoints; } diff --git a/OshimaServers/Service/FunGameService.cs b/OshimaServers/Service/FunGameService.cs index ef61775..d2ecb0b 100644 --- a/OshimaServers/Service/FunGameService.cs +++ b/OshimaServers/Service/FunGameService.cs @@ -4324,9 +4324,9 @@ namespace Oshima.FunGame.OshimaServers.Service public static string GetMarketInfo(Market market, User? user = null, int page = 1, bool simply = false, bool showListed = true) { if (page <= 0) page = 1; - int maxPage = market.MarketItems.Values.MaxPage(10); + int maxPage = market.MarketItems.Values.MaxPage(8); if (page > maxPage) page = maxPage; - IEnumerable marketItems = market.MarketItems.Values.GetPage(page, 10); + IEnumerable marketItems = market.MarketItems.Values.GetPage(page, 8); StringBuilder builder = new(); @@ -4391,7 +4391,7 @@ namespace Oshima.FunGame.OshimaServers.Service { foreach (MarketItem marketItem in MarketItemsValid) { - builder.AppendLine(GetMarketItemInfo(marketItem, true, user ?? General.UnknownUserInstance)); + builder.AppendLine(GetMarketItemInfo(marketItem, simply, user ?? General.UnknownUserInstance)); } builder.AppendLine("提示:使用【市场查看+序号】查看商品详细信息,使用【市场购买+序号】购买商品。"); } diff --git a/OshimaWebAPI/Controllers/FunGameController.cs b/OshimaWebAPI/Controllers/FunGameController.cs index 1aa0be7..1441e3b 100644 --- a/OshimaWebAPI/Controllers/FunGameController.cs +++ b/OshimaWebAPI/Controllers/FunGameController.cs @@ -7074,10 +7074,15 @@ namespace Oshima.FunGame.WebAPI.Controllers MarketItem[] marketItems = [.. market.MarketItems.Values.Where(m => m.User == userid)]; if (marketItems.Length > 0) { + if (page <= 0) page = 1; + int maxPage = market.MarketItems.Values.MaxPage(8); + if (page > maxPage) page = maxPage; + marketItems = [.. market.MarketItems.Values.GetPage(page, 8)]; foreach (MarketItem marketItem in marketItems) { msg += FunGameService.GetMarketItemInfo(marketItem, true, user) + "\r\n"; } + msg += $"页数:{page} / {maxPage},使用【市场+页码】快速跳转指定页面。"; } else msg += "你还没有上架过任何物品。"; diff --git a/OshimaWebAPI/Services/RainBOTService.cs b/OshimaWebAPI/Services/RainBOTService.cs index 869a6ed..0e8a6ae 100644 --- a/OshimaWebAPI/Services/RainBOTService.cs +++ b/OshimaWebAPI/Services/RainBOTService.cs @@ -320,7 +320,8 @@ namespace Oshima.FunGame.WebAPI.Services FunGameSimulation = true; List msgs = await Controller.GetTest(false, maxRespawnTimesMix: 0); List real = []; - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1; + int remain = perMergeLength; string merge = ""; for (int i = 0; i < msgs.Count - 2; i++) { @@ -330,11 +331,11 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(merge); merge = ""; - if ((msgs.Count - i - 3) < 7) + if ((msgs.Count - i - 3) < perMergeLength) { remain = msgs.Count - i - 3; } - else remain = 7; + else remain = perMergeLength; } } if (msgs.Count > 2) @@ -375,7 +376,8 @@ namespace Oshima.FunGame.WebAPI.Services FunGameSimulation = true; List msgs = await Controller.GetTest(false, maxRespawnTimesMix: maxRespawnTimesMix); List real = []; - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1; + int remain = perMergeLength; string merge = ""; for (int i = 0; i < msgs.Count - 2; i++) { @@ -385,11 +387,11 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(merge); merge = ""; - if ((msgs.Count - i - 3) < 7) + if ((msgs.Count - i - 3) < perMergeLength) { remain = msgs.Count - i - 3; } - else remain = 7; + else remain = perMergeLength; } } if (msgs.Count > 2) @@ -435,7 +437,8 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(msgs[0]); } - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1; + int remain = perMergeLength; string merge = ""; for (int i = 1; i < msgs.Count - 2; i++) { @@ -445,11 +448,11 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(merge); merge = ""; - if ((msgs.Count - i - 3) < 7) + if ((msgs.Count - i - 3) < perMergeLength) { remain = msgs.Count - i - 3; } - else remain = 7; + else remain = perMergeLength; } } if (msgs.Count > 2) @@ -1693,7 +1696,8 @@ namespace Oshima.FunGame.WebAPI.Services { if (msgs.Count < 20) { - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1; + int remain = perMergeLength; string merge = ""; for (int i = 0; i < msgs.Count - 1; i++) { @@ -1703,11 +1707,11 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(merge); merge = ""; - if ((msgs.Count - i - 2) < 7) + if ((msgs.Count - i - 2) < perMergeLength) { remain = msgs.Count - i - 2; } - else remain = 7; + else remain = perMergeLength; } } } @@ -1750,7 +1754,8 @@ namespace Oshima.FunGame.WebAPI.Services List real = []; if (msgs.Count > 2) { - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1; + int remain = perMergeLength; string merge = ""; for (int i = 0; i < msgs.Count - 1; i++) { @@ -1760,11 +1765,11 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(merge); merge = ""; - if ((msgs.Count - i - 3) < 7) + if ((msgs.Count - i - 3) < perMergeLength) { remain = msgs.Count - i - 3; } - else remain = 7; + else remain = perMergeLength; } } real.Add(msgs[^1]); @@ -1803,7 +1808,8 @@ namespace Oshima.FunGame.WebAPI.Services { if (msgs.Count < 20) { - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1; + int remain = perMergeLength; string merge = ""; for (int i = 0; i < msgs.Count - 1; i++) { @@ -1813,11 +1819,11 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(merge); merge = ""; - if ((msgs.Count - i - 3) < 7) + if ((msgs.Count - i - 3) < perMergeLength) { remain = msgs.Count - i - 3; } - else remain = 7; + else remain = perMergeLength; } } } @@ -1876,7 +1882,8 @@ namespace Oshima.FunGame.WebAPI.Services { if (msgs.Count < 20) { - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1; + int remain = perMergeLength; string merge = ""; for (int i = 0; i < msgs.Count - 1; i++) { @@ -1886,11 +1893,11 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(merge); merge = ""; - if ((msgs.Count - i - 3) < 7) + if ((msgs.Count - i - 3) < perMergeLength) { remain = msgs.Count - i - 3; } - else remain = 7; + else remain = perMergeLength; } } } @@ -1935,7 +1942,8 @@ namespace Oshima.FunGame.WebAPI.Services { if (msgs.Count < 20) { - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1; + int remain = perMergeLength; string merge = ""; for (int i = 0; i < msgs.Count - 1; i++) { @@ -1945,11 +1953,11 @@ namespace Oshima.FunGame.WebAPI.Services { real.Add(merge); merge = ""; - if ((msgs.Count - i - 3) < 7) + if ((msgs.Count - i - 3) < perMergeLength) { remain = msgs.Count - i - 3; } - else remain = 7; + else remain = perMergeLength; } } } @@ -3415,7 +3423,7 @@ namespace Oshima.FunGame.WebAPI.Services return result; } - if (e.Detail == "开始游戏") + if (e.Detail == "开始游戏" || e.Detail == "开始赛马") { string groupId = ""; if (e.IsGroup && e is GroupAtMessage groupAtMessage && groupAtMessage.GroupOpenId != "") @@ -3428,6 +3436,15 @@ namespace Oshima.FunGame.WebAPI.Services } if (groupId != "") { + if (e.Detail == "开始赛马" && FunGameConstant.UsersInRoom.TryGetValue(uid, out Room? value) && value != null && value.Name == "赛马房间") + { + // do nothing + } + else + { + await SendAsync(e, "房间", "你不在房间中或者所在的房间不是赛马房间,请使用【开始游戏】指令。注意:只有房主才可以开始游戏。"); + return result; + } (Room room, List msgs) = await Controller.RunGame(uid); List real = []; if (msgs.Count > 1) @@ -3436,24 +3453,24 @@ namespace Oshima.FunGame.WebAPI.Services { msgs = [msgs[0], .. msgs[^20..]]; } - int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; + int perMergeLength = msgs.Count > 5 ? 5 : msgs.Count; + int remain = perMergeLength; string merge = ""; - for (int i = 0; i < msgs.Count - 1; i++) + for (int i = 0; i < msgs.Count; i++) { remain--; merge += msgs[i] + "\r\n"; - if (remain == 0) + if (remain == 0 || i == msgs.Count - 1) { real.Add(merge); merge = ""; - if ((msgs.Count - i - 1) < 7) + if (msgs.Count < perMergeLength) { - remain = msgs.Count - i - 1; + remain = msgs.Count; } - else remain = 7; + else remain = perMergeLength; } } - real.Add(msgs[^1]); } else {