Skip to content

Commit 14fdd39

Browse files
committed
Fix roulette
1 parent 1d5faf9 commit 14fdd39

2 files changed

Lines changed: 17 additions & 8 deletions

File tree

artifacts/api-server/src/quiz-nav.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,17 @@ export function setupQuizNav(io: Server) {
485485
const href = targetNav.adeptsWheelReturnHref;
486486
targetNav.adeptsWheelActive = false;
487487
targetNav.adeptsWheelReturnHref = null;
488+
/**
489+
* After roulette, `pandoraRouletteActive` can remain true until host navigates or
490+
* `hostPandoraRouletteReturn` runs. If it is still set when the table returns from the
491+
* wheel, `requestPandoraRouletteState` replays `pandoraRouletteOpened` and seated players
492+
* were wrongly sent back to `/game`. Clearing here keeps wheel return idempotent with the board.
493+
*/
494+
if (targetNav.pandoraRouletteActive) {
495+
targetNav.pandoraRouletteActive = false;
496+
targetNav.pandoraRouletteReturnHref = null;
497+
targetNav.pandoraRoulettePlayerNames = [];
498+
}
488499
ns.to(targetSessionId).emit("adeptsWheelReturn", { returnHref: href });
489500
logger.info({ sessionId, targetSessionId, returnHref: href }, "Quiz adepts wheel return");
490501
});

artifacts/game-client/src/components/QuizPandoraRouletteSync.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,15 @@ export function QuizPandoraRouletteSync() {
5252
}
5353
const po = raw && typeof raw === "object" ? (raw as Record<string, unknown>) : {};
5454
/**
55-
* Реплей `requestPandoraRouletteState`: если флаг на сервере устарел после возврата с рулетки,
56-
* не уводить ведущего/зрителя с квиз-доски повторно на `/spectate`.
57-
* Игрок за столом (место 0–4) при активной рулетке после перезагрузки/реконнекта страницы
58-
* как раз должен попасть на `/game` — для него этот ранний выход не применяем.
55+
* Реплей `requestPandoraRouletteState` с монтирования `AdeptsQuizBoardGuard` (в т.ч. после
56+
* возврата с колеса): устаревший `pandoraRouletteActive` после прошлой рулетки не должен
57+
* уводить никого с доски на `/game`/`/spectate`. Раньше исключали только игроков 0–4 —
58+
* из‑за этого после «рулетка → раунд → колесо → доска» игроки снова попадали в рулетку.
59+
* Запрос реплея шлётся только с маршрутов `/adepts-game/*`, а не со страницы `/game`.
5960
*/
6061
if (po["stateReplay"] === true) {
6162
try {
62-
if (
63-
window.location.pathname.includes("/adepts-game") &&
64-
!clientJoinsPandoraRouletteAsPlayer()
65-
) {
63+
if (window.location.pathname.includes("/adepts-game")) {
6664
return;
6765
}
6866
} catch {

0 commit comments

Comments
 (0)