Files
chuanqi-client-config/tools/json2lua.js
2025-01-17 17:02:37 +08:00

58 lines
1.9 KiB
JavaScript

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();