From efe25285c74540ffbd88d829b05616087a8b35f1 Mon Sep 17 00:00:00 2001 From: weqqr Date: Mon, 18 Apr 2022 17:20:28 +0300 Subject: [PATCH] Initial commit --- init.lua | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mod.conf | 2 ++ 2 files changed, 63 insertions(+) create mode 100644 init.lua create mode 100644 mod.conf diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..3cbfb5f --- /dev/null +++ b/init.lua @@ -0,0 +1,61 @@ +-- Removes non-serializable data +local function sanitize_table(t) + -- Detect mixed tables + local seen_non_str_keys = false + local seen_str_keys = false + + for key, _ in pairs(t) do + if type(key) == 'string' then + seen_str_keys = true + else + seen_non_str_keys = true + end + end + + if seen_non_str_keys and seen_str_keys then + for k in pairs(t) do + t[k] = nil + end + return + end + + -- Detect non-serializable values + for key, value in pairs(t) do + local value_type = type(value) + if value_type == 'function' or value_type == 'userdata' then + t[key] = nil + elseif value_type == 'table' then + sanitize_table(value) + end + end +end + +core.after(0, function() + local game = {} + game.aliases = table.copy(core.registered_aliases) + game.nodes = table.copy(core.registered_nodes) + sanitize_table(game) + + for name, node in pairs(game.nodes) do + if node.tiles ~= nil and node.tiles.name ~= nil then + game.nodes[name]["tiles"] = {node["tiles"]["name"]} + end + + if node.tiles ~= nil then + for i, tile in ipairs(node.tiles) do + if type(tile) == "table" then + node.tiles[i] = tile.name + end + + if type(tile) ~= "string" and type(tile) ~= "table" then + node.tiles[i] = nil + end + end + end + end + + local file = io.open(core.get_worldpath() .. '/panorama_nodes.json', 'wb') + local json = core.write_json(game, true) + file:write(json) + file:close() +end) diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..5ba326b --- /dev/null +++ b/mod.conf @@ -0,0 +1,2 @@ +name = panorama_api +description = Support mod for Panorama