不知道为啥缺氧没做这个功能, 创意工坊里也没有做这个的人, 只好自己写个脚本来做了. 特别感谢 @RoboPhred 提供的 oni-save-parser
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| const { readFileSync, writeFileSync } = require("fs"); const { parseSaveGame } = require('oni-save-parser');
const modsFile = JSON.parse(readFileSync('mods.json')) console.log('parsing game... (this might take a while)') const gameSave = parseSaveGame(readFileSync('world.sav').buffer, { versionStrictness: 'none' })
const gameActiveMods = gameSave.world.active_mods const steamMods = modsFile.mods
const gameActiveModIds = gameActiveMods.map(m => m.id) const steamModIds = steamMods.map(m => m.label.id)
const missingMods = gameActiveModIds.filter(id => steamModIds.indexOf(id) == -1).map(id => gameActiveMods[gameActiveMods.findIndex(m => m.id == id)]) if (missingMods.length > 0) { console.log('The following mods are missing, please install/subscribe from Steam') console.log(missingMods) process.exit(1) }
console.log(steamMods.map(m => m.label.title))
steamMods.sort((a, b) => { const modIDA = a.label.id const modIDB = b.label.id
const indexA = gameActiveModIds.indexOf(modIDA) const indexB = gameActiveModIds.indexOf(modIDB)
if (indexA != -1 && indexB != -1) { return indexA - indexB }
if (indexA != -1) { return -1 }
if (indexB != -1) { return 1 }
return a.label.title.toLowerCase().localeCompare(b.label.title.toLowerCase()) })
console.log(steamMods.map(m => m.label.title))
writeFileSync('mods.json', JSON.stringify(modsFile))
|