mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-22 15:43:49 +01:00
Add dev script to prettify save games
Useful to analyze & debug a player's save game for anomalies.
This commit is contained in:
parent
ae779574b0
commit
f645169752
12
tools/README.md
Normal file
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
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!');
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user