const { log } = require("console"); const fs = require("fs"); const path = require("path"); const folderPath = "./configs"; const scope = [ "StdItems", "Monster" // "ItemMergeConfig", "MergeConfig", "MergeTotal", "RecyclingSettingConfig", "UpstarConfig", ]; const strKey = (key) => (isNaN(key) ? `${key}` : `[${key}]`); function jsonToLua(jsonObj, indent = "", linefeed = "\n") { let luaStr = ""; for (key in jsonObj) { let value = jsonObj[key]; key = strKey(key); if (typeof value === "object" && value !== null && !Array.isArray(value)) { // 对象 luaStr += `${indent}${key} = {`; luaStr += jsonToLua(value, indent + " "); luaStr += `${indent}},\n`; } else if (Array.isArray(value)) { // 数组 luaStr += `${indent}${key} = {`; value.forEach((item) => { if (typeof item === "string") { luaStr += `${indent} '${item}',`; } else if (typeof item == "object") { luaStr += `{${jsonToLua(item, "", "")}},`; } else { luaStr += `${indent} ${item},`; } }); luaStr += `${indent}},\n`; } else { // 基础类型 if (typeof value === "string") { luaStr += `${indent}${key}="${value}",${linefeed}`; } else { luaStr += `${indent}${key}=${value},${linefeed}`; } } } return luaStr; } const start = () => { const files = fs.readdirSync(folderPath); // 过滤出所有的 JSON 文件 const jsonFiles = files.filter((file) => path.extname(file) === ".json").filter((file) => scope.map((e) => `${e}.json`).includes(file)); jsonFiles.forEach((file) => { const json = JSON.parse(fs.readFileSync(path.join(folderPath, file), "utf8")); const filename = path.basename(file, path.extname(file)); const luaConfig = `${filename}={\n${jsonToLua(json)}\n}`; fs.writeFileSync(`./luaConfigs/${filename}.config`, luaConfig); }); }; start();