diff --git a/server/routes/games.ts b/server/routes/games.ts index 905566a..90dd9b8 100755 --- a/server/routes/games.ts +++ b/server/routes/games.ts @@ -2342,7 +2342,15 @@ const pass = (game: Game, session: Session): string | undefined => { if (!next || !next.player) { return `Unable to find the next player to pass to.`; } - session.player.totalTime += Date.now() - session.player.turnStart; + // Only accumulate totalTime if turnStart is a valid timestamp + if (session.player.turnStart && typeof session.player.turnStart === 'number' && session.player.turnStart > 0) { + const delta = Date.now() - session.player.turnStart; + if (!isNaN(delta) && delta > 0) { + session.player.totalTime += delta; + } + } else { + console.warn(`${session.short}: pass() called but player.turnStart is not set; skipping time accumulation.`); + } session.player.turnNotice = ''; game.turn = newTurn(next.player); next.player.turnStart = Date.now(); @@ -3099,7 +3107,17 @@ const placeRoad = (game: Game, session: Session, index: number): string | undefi } addChatMessage(game, null, `Everyone has placed their two settlements!`); - + // Ensure the first player's turn timer and turnStart are initialized + if (game.turn && game.turn.color) { + const firstSession = sessionFromColor(game, game.turn.color); + if (firstSession && firstSession.player) { + // initialize turnStart if not already set + if (!firstSession.player.turnStart || firstSession.player.turnStart === 0) { + firstSession.player.turnStart = Date.now(); + } + startTurnTimer(game, firstSession); + } + } /* Figure out which players received which resources for their * initial (second) settlement placement. This mirrors the original * behaviour where the player receives resources adjacent to their