1
0

Game reset logic adjusted to bind to players.

Reset the robber on resetGame

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-02-27 15:48:57 -08:00
parent 6f7417ba75
commit 8200697573

View File

@ -492,29 +492,6 @@ const loadGame = async (id) => {
game = createGame(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 */ /* Reconnect session player colors to the player objects */
for (let id in game.sessions) { for (let id in game.sessions) {
const session = game.sessions[id]; 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; games[id] = game;
return game; return game;
}; };
const clearPlayer = (player) => { const clearPlayer = (player) => {
player.status = 'Not active'; for (let key in player) {
player.lastActive = 0; delete player[key];
player.order = 0; }
delete player.orderRoll; Object.assign(player, newPlayer());
delete player.orderStatus;
} }
const canGiveBuilding = (game) => { const canGiveBuilding = (game) => {
@ -568,15 +535,6 @@ const adminActions = (game, action, value) => {
game.debug = true; game.debug = true;
} }
break; break;
case "state":
switch (value) {
case 'game-order':
resetGame(game);
game.state = 'game-order';
break;
}
break;
case "give": case "give":
parts = value.match(/^([^-]+)(-(.*))?$/); 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}. ` + `${name} placed a settlement by a maritime bank that trades ${bankType}. ` +
`Next, they need to place a road.`); `Next, they need to place a road.`);
} else { } else {
addChatMessage(game, session, `${name} placed a settlement.` + addChatMessage(game, session, `${name} placed a settlement. ` +
`Next, they need to place a road.`); `Next, they need to place a road.`);
} }
placeRoad(game, layout.corners[index].roads); 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, `${session.name} receives ${message.join(', ')}.`);
} }
} }
addChatMessage(game, session, `It is ${name}'s turn.`); addChatMessage(game, null, `It is ${name}'s turn.`);
game.state = 'normal'; game.state = 'normal';
} }
} }
@ -2514,7 +2472,6 @@ router.put("/:id/:action/:value?", async (req, res) => {
break; break;
} }
resetGame(game);
addChatMessage(game, null, `${name} requested to start the game.`); addChatMessage(game, null, `${name} requested to start the game.`);
game.state = state; game.state = state;
break; break;
@ -2719,7 +2676,8 @@ const sendGame = async (req, res, game, error) => {
} }
const resetGame = (game) => { const resetGame = (game) => {
console.log(`Reseting ${game.id}`);
Object.assign(game, { Object.assign(game, {
state: 'lobby', state: 'lobby',
turn: 0, turn: 0,
@ -2780,18 +2738,26 @@ const resetGame = (game) => {
shuffle(game.developmentCards); shuffle(game.developmentCards);
/* Reset all player data */ /* Reset all player data */
game.players = { for (let color in game.players) {
R: getPlayer(), clearPlayer(game.players[color]);
O: getPlayer(), }
B: getPlayer(),
W: getPlayer()
};
/* Reconnect sessions to new player objects */ /* Ensure sessions are connected to player objects */
for (let key in game.sessions) { for (let key in game.sessions) {
const session = game.sessions[key]; const session = game.sessions[key];
if (session.color) { if (session.color) {
session.player = game.players[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;
} }
} }
} }