Add dev script to prettify save games

Useful to analyze & debug a player's save game for anomalies.
This commit is contained in:
Martin Fournier 2022-01-05 10:32:28 -05:00
parent ae779574b0
commit f645169752
2 changed files with 65 additions and 0 deletions

12
tools/README.md Normal file

@ -0,0 +1,12 @@
# Tools
## Pretty Save
Useful to analyze a player's save game for anomalies.
It decodes the save and prettifies the output. Canno be used to modify a save game directly since it drops some properties.
**Usage**
```sh
node ./pretty-save.js 'C:\\Users\\martin\\Desktop\\bitburnerSave_1641395736_BN12x14.json' 'C:\\Users\\martin\\Desktop\\pretty.json'
```

53
tools/pretty-save.js Normal file

@ -0,0 +1,53 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const fs = require('fs').promises;
const path = require('path');
async function getSave(file) {
const data = await fs.readFile(file, 'utf8');
const save = JSON.parse(decodeURIComponent(escape(atob(data))));
const saveData = save.data;
let gameSave = {
PlayerSave: JSON.parse(saveData.PlayerSave),
CompaniesSave: JSON.parse(saveData.CompaniesSave),
FactionsSave: JSON.parse(saveData.FactionsSave),
AliasesSave: JSON.parse(saveData.AliasesSave),
GlobalAliasesSave: JSON.parse(saveData.GlobalAliasesSave),
MessagesSave: JSON.parse(saveData.MessagesSave),
StockMarketSave: JSON.parse(saveData.StockMarketSave),
SettingsSave: JSON.parse(saveData.SettingsSave),
VersionSave: JSON.parse(saveData.VersionSave),
LastExportBonus: JSON.parse(saveData.LastExportBonus),
StaneksGiftSave: JSON.parse(saveData.StaneksGiftSave),
}
const serverStrings = JSON.parse(saveData.AllServersSave);
const servers = {};
for (const [key, value] of Object.entries(serverStrings)) {
servers[key] = value.data;
}
gameSave.AllServersSave = servers;
if (saveData.AllGangsSave) {
gameSave.AllGangsSave = JSON.parse(saveData.AllGangsSave);
}
return gameSave;
}
async function main(input, output) {
const result = await getSave(input)
await fs.writeFile(output, JSON.stringify(result, null, 2));
return result
}
const input = path.resolve(process.argv[2]);
const output = path.resolve(process.argv[3]);
console.log(`Input: ${input}`);
console.log(`Output: ${output}`);
main(input, output).then(() => {
console.log('Done!');
})