const { log } = require('console'); const fs = require('fs'); const path = require('path'); const folderPath = "../luaConfigs" function parseLuaConfig(luaContent) { const config = {}; const lines = luaContent.split('\n'); let currentPath = config; lines.forEach(line => { line = line.trim(); if (line.startsWith('--')) return; // 跳过注释行 // 匹配键值对 const keyMatch = line.match(/^\s*(\w+)\s*=\s*(.+?),?$/); if (keyMatch) { const key = keyMatch[1].trim(); const value = keyMatch[2].trim(); // 尝试解析值 let parsedValue; if (value === 'true' || value === 'false') { parsedValue = value === 'true'; } else if (!isNaN(parseFloat(value))) { parsedValue = parseFloat(value); } else if (value.startsWith('"') && value.endsWith('"')) { parsedValue = value.slice(1, -1); } else if (value.startsWith('{') && value.endsWith('}')) { parsedValue = parseLuaTable(value); } else { parsedValue = value; } // 处理嵌套对象 const keys = key.split('.'); keys.reduce((acc, k, i) => { if (i === keys.length - 1) { acc[k] = parsedValue; } else { acc[k] = acc[k] || {}; return acc[k]; } }, currentPath); } // 匹配表(数组或对象) const tableMatch = line.match(/^\s*(\w+)\s*=\s*{(.+?)},?$/); if (tableMatch) { const key = tableMatch[1].trim(); const tableContent = tableMatch[2].trim(); const parsedTable = parseLuaTable(tableContent); // 处理嵌套对象 const keys = key.split('.'); keys.reduce((acc, k, i) => { if (i === keys.length - 1) { acc[k] = parsedTable; } else { acc[k] = acc[k] || {}; return acc[k]; } }, currentPath); } }); return config; } // 解析Lua表(数组或对象) function parseLuaTable(tableContent) { const table = []; const lines = tableContent.split(',').map(line => line.trim()); lines.forEach(line => { if (line.startsWith('{')) { const nestedTableContent = line.slice(1, -1).trim(); table.push(parseLuaTable(nestedTableContent)); } else if (line.startsWith('"') && line.endsWith('"')) { table.push(line.slice(1, -1)); } else if (!isNaN(parseFloat(line))) { table.push(parseFloat(line)); } else if (line === 'true' || line === 'false') { table.push(line === 'true'); } else { table.push(line); } }); return table; } const scope = ["Monster"] const start = () => { const files = fs.readdirSync(folderPath); // 过滤出所有的 JSON 文件 const luaFiles = files.filter(file => path.extname(file) === '.config').filter(file => scope.map(e => `${e}.config`).includes(file)); luaFiles.forEach(file => { const luaContent = fs.readFileSync(path.join(folderPath, file), 'utf8') const filename = path.basename(file, path.extname(file)); const luaConfig = parseLuaConfig(luaContent); log(luaConfig) fs.writeFileSync(`../configs/${filename}.json`, luaConfig); }); } start()