Compare with Previous | Blame | View Log
account = "MyAccountName" --your account name files = { --a list of files to be merged "Esohead.lua", "Esohead2.lua" } output = "Output.lua" --the name of the output file local function isPosition(table) return (type(table[1]) == "number" and type(table[2]) == "number") end local function alreadyInTable(table, entry) for _, value in pairs(table) do if math.abs(entry[1] - value[1]) < 0.005 and math.abs(entry[2] - value[2]) < 0.005 then return true end end return false end local function merge(output, input) for key, data in pairs(input) do if not output[key] then output[key] = data elseif type(key) == "string" and type(output[key]) == "table" then merge(output[key], input[key]) elseif type(key) == "number" then if not isPosition(input[key]) or not alreadyInTable(output, input[key]) then table.insert(output, data) end end end end local function newline(level) return "\n" .. string.rep(" ", 4 * level) end local function export(table, level) if not level then level = 0 end local result = newline(level) .. "{" level = level + 1 for key, value in pairs(table) do result = result .. newline(level) if type(key) == "string" then result = result ..'["' .. key .. '"] = ' else result = result .."[" .. tostring(key) .. "] = " end if type(value) == "table" then result = result .. export(value, level) .. "," elseif type(value) == "string" then result = result .. "[[" .. value .. "]]," else result = result .. tostring(value) .. "," end end level = level - 1 result = result .. newline(level) .. "}" return result end local data = {} for _, file in ipairs(files) do dofile(file) for account, content in pairs(Esohead_SavedVariables["Default"]) do content = content["$AccountWide"] merge(data, content) end end local result = "Esohead_SavedVariables = " result = result .. newline(0) .. "{" result = result .. newline(1) .. '["Default"] = ' result = result .. newline(1) .. "{" result = result .. newline(2) .. '["@' .. account .. '"] = ' result = result .. newline(2) .. "{" result = result .. newline(3) .. '["$AccountWide"] = ' result = result .. export(data, 3) .. "," result = result .. newline(2) .. "}," .. newline(1) .. "}," .. newline(0) .. "}" assert(io.open(output, 'w')):write(result)