From 6aa4f376422d51774bd453596935d4a2c9815af7 Mon Sep 17 00:00:00 2001 From: "soroush.asadi" Date: Tue, 16 Jun 2026 21:31:18 +0330 Subject: [PATCH] fix(mm): pro players also wait the 15s queue; compact post-match roster - server: remove pro instant-start so all players queue for up to 15s, giving real players a chance to seat together before bot-fill - post-match: render the 4 seats as a horizontal strip so every player is visible at once without scrolling Co-Authored-By: Claude Opus 4.8 (1M context) --- server/src/Hokm.Server/Game/GameManager.cs | 10 +-- src/components/online/MatchPlayersList.tsx | 75 +++++++++------------- 2 files changed, 32 insertions(+), 53 deletions(-) diff --git a/server/src/Hokm.Server/Game/GameManager.cs b/server/src/Hokm.Server/Game/GameManager.cs index 91f08ae..135bc64 100644 --- a/server/src/Hokm.Server/Game/GameManager.cs +++ b/server/src/Hokm.Server/Game/GameManager.cs @@ -54,13 +54,9 @@ public sealed partial class GameManager return; } - // Pro players skip the queue entirely. - if (p.Plan == "pro") - { - StartMatch(new List { p }); - return; - } - + // Everyone — including pro — waits in the queue so we always try to seat + // real players together first. The 15s timer (NextQueueWaitMs) then fills + // any empty seats with bots, and a full group of 4 forms instantly. lock (_mmLock) { if (_waiting.Any(w => w.player.UserId == p.UserId)) return; diff --git a/src/components/online/MatchPlayersList.tsx b/src/components/online/MatchPlayersList.tsx index b1b7329..d7603e2 100644 --- a/src/components/online/MatchPlayersList.tsx +++ b/src/components/online/MatchPlayersList.tsx @@ -32,64 +32,47 @@ export function MatchPlayersList() { return (
{t("match.players")}
-
+ {/* Horizontal strip: all four seats are visible at once — no scrolling. */} +
{seatPlayers.map((p, i) => { const isMe = p.id ? p.id === myId : !p.isBot; const canAdd = !!p.id && !p.isBot && p.id !== myId; + const tag = isMe ? t("match.you") : p.isBot ? t("match.bot") : null; return ( -
- {canAdd ? ( - - ) : ( - <> - - {p.avatar} - - - - {p.name} - {isMe && ({t("match.you")})} - {p.isBot && ({t("match.bot")})} - - {p.level > 0 && ( - - {t("common.level")} {p.level} - - )} - - - )} + + ))} -
+ ); })}