diff --git a/server/routes/games.js b/server/routes/games.js index ffed77c..ec54883 100755 --- a/server/routes/games.js +++ b/server/routes/games.js @@ -492,29 +492,6 @@ const loadGame = async (id) => { game = createGame(id); } - if (!game.pipOrder || !game.borderOrder || !game.tileOrder) { - console.log("Shuffling old save file"); - shuffleBoard(game); - } - - if (!game.pips || !game.borders || !game.tiles) { - [ "pips", "borders", "tiles" ].forEach((field) => { - game[field] = staticData[field] - }); - } - - if (game.state === 'active') { - game.state = 'initial-placement'; - } - - if (typeof game.turn !== 'object') { - game.turn = {}; - } - - if (!game.placements) { - resetGame(game); - } - /* Reconnect session player colors to the player objects */ for (let id in game.sessions) { const session = game.sessions[id]; @@ -526,25 +503,15 @@ const loadGame = async (id) => { } } - for (let color in game.players) { - if (!game.players[color].development) { - game.players[color].development = []; - } - if (!game.players[color].army) { - game.players[color].army = 0; - } - } - games[id] = game; return game; }; const clearPlayer = (player) => { - player.status = 'Not active'; - player.lastActive = 0; - player.order = 0; - delete player.orderRoll; - delete player.orderStatus; + for (let key in player) { + delete player[key]; + } + Object.assign(player, newPlayer()); } const canGiveBuilding = (game) => { @@ -568,15 +535,6 @@ const adminActions = (game, action, value) => { game.debug = true; } break; - - case "state": - switch (value) { - case 'game-order': - resetGame(game); - game.state = 'game-order'; - break; - } - break; case "give": parts = value.match(/^([^-]+)(-(.*))?$/); @@ -2190,7 +2148,7 @@ router.put("/:id/:action/:value?", async (req, res) => { `${name} placed a settlement by a maritime bank that trades ${bankType}. ` + `Next, they need to place a road.`); } else { - addChatMessage(game, session, `${name} placed a settlement.` + + addChatMessage(game, session, `${name} placed a settlement. ` + `Next, they need to place a road.`); } placeRoad(game, layout.corners[index].roads); @@ -2440,7 +2398,7 @@ router.put("/:id/:action/:value?", async (req, res) => { addChatMessage(game, session, `${session.name} receives ${message.join(', ')}.`); } } - addChatMessage(game, session, `It is ${name}'s turn.`); + addChatMessage(game, null, `It is ${name}'s turn.`); game.state = 'normal'; } } @@ -2514,7 +2472,6 @@ router.put("/:id/:action/:value?", async (req, res) => { break; } - resetGame(game); addChatMessage(game, null, `${name} requested to start the game.`); game.state = state; break; @@ -2719,7 +2676,8 @@ const sendGame = async (req, res, game, error) => { } const resetGame = (game) => { - + console.log(`Reseting ${game.id}`); + Object.assign(game, { state: 'lobby', turn: 0, @@ -2780,18 +2738,26 @@ const resetGame = (game) => { shuffle(game.developmentCards); /* Reset all player data */ - game.players = { - R: getPlayer(), - O: getPlayer(), - B: getPlayer(), - W: getPlayer() - }; + for (let color in game.players) { + clearPlayer(game.players[color]); + } - /* Reconnect sessions to new player objects */ + /* Ensure sessions are connected to player objects */ for (let key in game.sessions) { const session = game.sessions[key]; if (session.color) { session.player = game.players[session.color]; + session.player.status = 'Active'; + session.player.lastActive = Date.now(); + } + } + + /* Put the robber back on the Desert */ + for (let i = 0; i < game.pipOrder.length; i++) { + if (game.pipOrder[i] === 18) { + console.log(`Setting robber at ${i}`); + game.robber = i; + break; } } }