优化文本输出

This commit is contained in:
milimoe 2025-07-31 00:44:22 +08:00
parent a23802bdb0
commit ef349b5d45
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
4 changed files with 66 additions and 44 deletions

View File

@ -14,7 +14,7 @@ namespace Oshima.FunGame.OshimaServers.Model
Dictionary<long, int> userPoints = []; Dictionary<long, int> userPoints = [];
StringBuilder builder = new(); StringBuilder builder = new();
builder.AppendLine("--- 参赛选手 ---"); builder.AppendLine("--- 参赛选手 ---");
List<Horse> horses = []; List<Horse> horses = [];
foreach (User user in room.UserAndIsReady.Keys) 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); int maxLength = _random.Next(8, 16);
builder.AppendLine($"本次抽取赛道长度:{maxLength} 步!"); builder.AppendLine($"本次抽取赛道长度:{maxLength} 步!");
for (int turn = 1; turn <= MaxTurns; turn++) for (int turn = 1; turn <= MaxTurns; turn++)
{ {
builder.AppendLine($"\r\n--- 第 {turn} 回合 ---"); builder.AppendLine($"\r\n\r\n☆--- 第 {turn} 回合 ---");
bool raceFinished = false; bool raceFinished = false;
Dictionary<Horse, int> turnSteps = []; Dictionary<Horse, int> turnSteps = [];
Dictionary<Horse, Dictionary<HorseSkill, Horse>> turnSkills = []; Dictionary<Horse, Dictionary<HorseSkill, Horse>> turnSkills = [];
@ -161,19 +161,19 @@ namespace Oshima.FunGame.OshimaServers.Model
if (horse.CurrentPosition >= maxLength) if (horse.CurrentPosition >= maxLength)
{ {
builder.AppendLine($"\r\n🎯 恭喜 [ {horse}({horse.HP}) ] 冲过终点线!它赢得了比赛!"); builder.AppendLine($"\r\n🎯 恭喜 [ {horse}({horse.HP}) ] 冲过终点线!它赢得了比赛!\r\n");
raceFinished = true; raceFinished = true;
break; break;
} }
} }
builder.AppendLine("\r\n--- 赛道状况 ---"); builder.AppendLine("☆--- 赛道状况 ---☆");
for (int i = 0; i < horses.Count; i++) for (int i = 0; i < horses.Count; i++)
{ {
builder.AppendLine(GenerateTrackString(horses[i], i + 1, maxLength, turnSteps)); builder.AppendLine(GenerateTrackString(horses[i], i + 1, maxLength, turnSteps));
} }
msgs.Add(builder.ToString().Trim()); msgs.Add($"{builder.ToString().Trim()}\r\n");
builder.Clear(); builder.Clear();
if (raceFinished) if (raceFinished)
@ -183,7 +183,7 @@ namespace Oshima.FunGame.OshimaServers.Model
} }
builder.Clear(); builder.Clear();
builder.AppendLine("\r\n--- 比赛结果 ---"); builder.AppendLine("☆--- 比赛结果 ---☆");
List<Horse> finalRanking = [.. horses.OrderByDescending(h => h.CurrentPosition)]; List<Horse> finalRanking = [.. horses.OrderByDescending(h => h.CurrentPosition)];
int points = 10; int points = 10;
for (int i = 0; i < finalRanking.Count; i++) for (int i = 0; i < finalRanking.Count; i++)
@ -194,8 +194,8 @@ namespace Oshima.FunGame.OshimaServers.Model
if (points == 0) points = 1; if (points == 0) points = 1;
} }
builder.AppendLine("\r\n--- 比赛结束,奖励将在稍后发放! ---"); builder.AppendLine("\r\n比赛结束,奖励将在稍后发放!");
msgs.Add(builder.ToString().Trim()); msgs.Add($"\r\n{builder.ToString().Trim()}");
return userPoints; return userPoints;
} }

View File

@ -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) public static string GetMarketInfo(Market market, User? user = null, int page = 1, bool simply = false, bool showListed = true)
{ {
if (page <= 0) page = 1; if (page <= 0) page = 1;
int maxPage = market.MarketItems.Values.MaxPage(10); int maxPage = market.MarketItems.Values.MaxPage(8);
if (page > maxPage) page = maxPage; if (page > maxPage) page = maxPage;
IEnumerable<MarketItem> marketItems = market.MarketItems.Values.GetPage(page, 10); IEnumerable<MarketItem> marketItems = market.MarketItems.Values.GetPage(page, 8);
StringBuilder builder = new(); StringBuilder builder = new();
@ -4391,7 +4391,7 @@ namespace Oshima.FunGame.OshimaServers.Service
{ {
foreach (MarketItem marketItem in MarketItemsValid) foreach (MarketItem marketItem in MarketItemsValid)
{ {
builder.AppendLine(GetMarketItemInfo(marketItem, true, user ?? General.UnknownUserInstance)); builder.AppendLine(GetMarketItemInfo(marketItem, simply, user ?? General.UnknownUserInstance));
} }
builder.AppendLine("提示:使用【市场查看+序号】查看商品详细信息,使用【市场购买+序号】购买商品。"); builder.AppendLine("提示:使用【市场查看+序号】查看商品详细信息,使用【市场购买+序号】购买商品。");
} }

View File

@ -7074,10 +7074,15 @@ namespace Oshima.FunGame.WebAPI.Controllers
MarketItem[] marketItems = [.. market.MarketItems.Values.Where(m => m.User == userid)]; MarketItem[] marketItems = [.. market.MarketItems.Values.Where(m => m.User == userid)];
if (marketItems.Length > 0) 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) foreach (MarketItem marketItem in marketItems)
{ {
msg += FunGameService.GetMarketItemInfo(marketItem, true, user) + "\r\n"; msg += FunGameService.GetMarketItemInfo(marketItem, true, user) + "\r\n";
} }
msg += $"页数:{page} / {maxPage},使用【市场+页码】快速跳转指定页面。";
} }
else msg += "你还没有上架过任何物品。"; else msg += "你还没有上架过任何物品。";

View File

@ -320,7 +320,8 @@ namespace Oshima.FunGame.WebAPI.Services
FunGameSimulation = true; FunGameSimulation = true;
List<string> msgs = await Controller.GetTest(false, maxRespawnTimesMix: 0); List<string> msgs = await Controller.GetTest(false, maxRespawnTimesMix: 0);
List<string> real = []; List<string> real = [];
int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1;
int remain = perMergeLength;
string merge = ""; string merge = "";
for (int i = 0; i < msgs.Count - 2; i++) for (int i = 0; i < msgs.Count - 2; i++)
{ {
@ -330,11 +331,11 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(merge); real.Add(merge);
merge = ""; merge = "";
if ((msgs.Count - i - 3) < 7) if ((msgs.Count - i - 3) < perMergeLength)
{ {
remain = msgs.Count - i - 3; remain = msgs.Count - i - 3;
} }
else remain = 7; else remain = perMergeLength;
} }
} }
if (msgs.Count > 2) if (msgs.Count > 2)
@ -375,7 +376,8 @@ namespace Oshima.FunGame.WebAPI.Services
FunGameSimulation = true; FunGameSimulation = true;
List<string> msgs = await Controller.GetTest(false, maxRespawnTimesMix: maxRespawnTimesMix); List<string> msgs = await Controller.GetTest(false, maxRespawnTimesMix: maxRespawnTimesMix);
List<string> real = []; List<string> real = [];
int remain = msgs.Count > 7 ? 7 : msgs.Count - 1; int perMergeLength = msgs.Count > 7 ? 7 : msgs.Count - 1;
int remain = perMergeLength;
string merge = ""; string merge = "";
for (int i = 0; i < msgs.Count - 2; i++) for (int i = 0; i < msgs.Count - 2; i++)
{ {
@ -385,11 +387,11 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(merge); real.Add(merge);
merge = ""; merge = "";
if ((msgs.Count - i - 3) < 7) if ((msgs.Count - i - 3) < perMergeLength)
{ {
remain = msgs.Count - i - 3; remain = msgs.Count - i - 3;
} }
else remain = 7; else remain = perMergeLength;
} }
} }
if (msgs.Count > 2) if (msgs.Count > 2)
@ -435,7 +437,8 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(msgs[0]); 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 = ""; string merge = "";
for (int i = 1; i < msgs.Count - 2; i++) for (int i = 1; i < msgs.Count - 2; i++)
{ {
@ -445,11 +448,11 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(merge); real.Add(merge);
merge = ""; merge = "";
if ((msgs.Count - i - 3) < 7) if ((msgs.Count - i - 3) < perMergeLength)
{ {
remain = msgs.Count - i - 3; remain = msgs.Count - i - 3;
} }
else remain = 7; else remain = perMergeLength;
} }
} }
if (msgs.Count > 2) if (msgs.Count > 2)
@ -1693,7 +1696,8 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
if (msgs.Count < 20) 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 = ""; string merge = "";
for (int i = 0; i < msgs.Count - 1; i++) for (int i = 0; i < msgs.Count - 1; i++)
{ {
@ -1703,11 +1707,11 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(merge); real.Add(merge);
merge = ""; merge = "";
if ((msgs.Count - i - 2) < 7) if ((msgs.Count - i - 2) < perMergeLength)
{ {
remain = msgs.Count - i - 2; remain = msgs.Count - i - 2;
} }
else remain = 7; else remain = perMergeLength;
} }
} }
} }
@ -1750,7 +1754,8 @@ namespace Oshima.FunGame.WebAPI.Services
List<string> real = []; List<string> real = [];
if (msgs.Count > 2) 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 = ""; string merge = "";
for (int i = 0; i < msgs.Count - 1; i++) for (int i = 0; i < msgs.Count - 1; i++)
{ {
@ -1760,11 +1765,11 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(merge); real.Add(merge);
merge = ""; merge = "";
if ((msgs.Count - i - 3) < 7) if ((msgs.Count - i - 3) < perMergeLength)
{ {
remain = msgs.Count - i - 3; remain = msgs.Count - i - 3;
} }
else remain = 7; else remain = perMergeLength;
} }
} }
real.Add(msgs[^1]); real.Add(msgs[^1]);
@ -1803,7 +1808,8 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
if (msgs.Count < 20) 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 = ""; string merge = "";
for (int i = 0; i < msgs.Count - 1; i++) for (int i = 0; i < msgs.Count - 1; i++)
{ {
@ -1813,11 +1819,11 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(merge); real.Add(merge);
merge = ""; merge = "";
if ((msgs.Count - i - 3) < 7) if ((msgs.Count - i - 3) < perMergeLength)
{ {
remain = msgs.Count - i - 3; remain = msgs.Count - i - 3;
} }
else remain = 7; else remain = perMergeLength;
} }
} }
} }
@ -1876,7 +1882,8 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
if (msgs.Count < 20) 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 = ""; string merge = "";
for (int i = 0; i < msgs.Count - 1; i++) for (int i = 0; i < msgs.Count - 1; i++)
{ {
@ -1886,11 +1893,11 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(merge); real.Add(merge);
merge = ""; merge = "";
if ((msgs.Count - i - 3) < 7) if ((msgs.Count - i - 3) < perMergeLength)
{ {
remain = msgs.Count - i - 3; remain = msgs.Count - i - 3;
} }
else remain = 7; else remain = perMergeLength;
} }
} }
} }
@ -1935,7 +1942,8 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
if (msgs.Count < 20) 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 = ""; string merge = "";
for (int i = 0; i < msgs.Count - 1; i++) for (int i = 0; i < msgs.Count - 1; i++)
{ {
@ -1945,11 +1953,11 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
real.Add(merge); real.Add(merge);
merge = ""; merge = "";
if ((msgs.Count - i - 3) < 7) if ((msgs.Count - i - 3) < perMergeLength)
{ {
remain = msgs.Count - i - 3; remain = msgs.Count - i - 3;
} }
else remain = 7; else remain = perMergeLength;
} }
} }
} }
@ -3415,7 +3423,7 @@ namespace Oshima.FunGame.WebAPI.Services
return result; return result;
} }
if (e.Detail == "开始游戏") if (e.Detail == "开始游戏" || e.Detail == "开始赛马")
{ {
string groupId = ""; string groupId = "";
if (e.IsGroup && e is GroupAtMessage groupAtMessage && groupAtMessage.GroupOpenId != "") if (e.IsGroup && e is GroupAtMessage groupAtMessage && groupAtMessage.GroupOpenId != "")
@ -3428,6 +3436,15 @@ namespace Oshima.FunGame.WebAPI.Services
} }
if (groupId != "") 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<string> msgs) = await Controller.RunGame(uid); (Room room, List<string> msgs) = await Controller.RunGame(uid);
List<string> real = []; List<string> real = [];
if (msgs.Count > 1) if (msgs.Count > 1)
@ -3436,24 +3453,24 @@ namespace Oshima.FunGame.WebAPI.Services
{ {
msgs = [msgs[0], .. msgs[^20..]]; 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 = ""; string merge = "";
for (int i = 0; i < msgs.Count - 1; i++) for (int i = 0; i < msgs.Count; i++)
{ {
remain--; remain--;
merge += msgs[i] + "\r\n"; merge += msgs[i] + "\r\n";
if (remain == 0) if (remain == 0 || i == msgs.Count - 1)
{ {
real.Add(merge); real.Add(merge);
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 else
{ {