From 5f890b40f50e4555464d66677adac4deb4737ec0 Mon Sep 17 00:00:00 2001 From: Zutatensuppe Date: Thu, 24 Dec 2020 13:56:14 +0100 Subject: [PATCH] add script to fix bad tiles --- common/GameCommon.js | 1 + scripts/fix_tiles.js | 27 +++++++++++++++++++++++++++ server/Game.js | 34 ++++++++++++++++++++-------------- 3 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 scripts/fix_tiles.js diff --git a/common/GameCommon.js b/common/GameCommon.js index 60dfd9e..b7133bc 100644 --- a/common/GameCommon.js +++ b/common/GameCommon.js @@ -660,6 +660,7 @@ export default { getFirstOwnedTile, getTileDrawOffset, getTileDrawSize, + getFinalTilePos, getStartTs, getFinishTs, handleInput, diff --git a/scripts/fix_tiles.js b/scripts/fix_tiles.js new file mode 100644 index 0000000..93d231e --- /dev/null +++ b/scripts/fix_tiles.js @@ -0,0 +1,27 @@ +import fs from 'fs' +import GameCommon from '../common/GameCommon.js' +import Game from '../server/Game.js' + +function fix_tiles(gameId) { + Game.loadAllGames() + let changed = false + const tiles = GameCommon.getTilesSortedByZIndex(gameId) + for (let tile of tiles) { + if (tile.owner === -1) { + const p = GameCommon.getFinalTilePos(gameId, tile.idx) + if (p.x === tile.pos.x && p.y === tile.pos.y) { + console.log('all good', tile.pos) + } else { + console.log('bad tile pos', tile.pos, 'should be: ', p) + tile.pos = p + GameCommon.setTile(gameId, tile.idx, tile) + changed = true + } + } + } + if (changed) { + Game.persistGame(gameId) + } +} + +fix_tiles(process.argv[2]) diff --git a/server/Game.js b/server/Game.js index 70dfa67..6984a65 100644 --- a/server/Game.js +++ b/server/Game.js @@ -105,27 +105,33 @@ function handleInput(gameId, playerId, input, ts) { } function persistChangedGames() { - for (const game of GameCommon.getAllGames()) { - if (game.id in changedGames) { - delete changedGames[game.id] - fs.writeFileSync(`${DATA_DIR}/${game.id}.json`, JSON.stringify({ - id: game.id, - rng: { - type: game.rng.type, - obj: Rng.serialize(game.rng.obj), - }, - puzzle: game.puzzle, - players: game.players, - })) - console.info(`[INFO] persisted game ${game.id}`) - } + for (const gameId of Object.keys(changedGames)) { + persistGame(gameId) } } +function persistGame(gameId) { + const game = GameCommon.get(gameId) + if (game.id in changedGames) { + delete changedGames[game.id] + } + fs.writeFileSync(`${DATA_DIR}/${game.id}.json`, JSON.stringify({ + id: game.id, + rng: { + type: game.rng.type, + obj: Rng.serialize(game.rng.obj), + }, + puzzle: game.puzzle, + players: game.players, + })) + console.info(`[INFO] persisted game ${game.id}`) +} + export default { createGameObject, loadAllGames, persistChangedGames, + persistGame, createGame, addPlayer, handleInput,