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);
|
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) => {
|
||||||
@ -569,15 +536,6 @@ const adminActions = (game, action, value) => {
|
|||||||
}
|
}
|
||||||
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(/^([^-]+)(-(.*))?$/);
|
||||||
if (!parts) {
|
if (!parts) {
|
||||||
@ -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,6 +2676,7 @@ 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',
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user