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:
parent
6f7417ba75
commit
8200697573
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user