From da66780a569712c23ae4f2996cfb4608a9f9d69d Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 1 Apr 2016 20:02:19 -0400 Subject: copy all standard Dreambuilder mods in from the old subgame (exactly as last supplied there, updates to these mods will follow later) --- areas/legacy.lua | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 areas/legacy.lua (limited to 'areas/legacy.lua') diff --git a/areas/legacy.lua b/areas/legacy.lua new file mode 100644 index 0000000..83b3d27 --- /dev/null +++ b/areas/legacy.lua @@ -0,0 +1,138 @@ +-- This file contains functions to convert from +-- the old areas format and other compatability code. + +minetest.register_chatcommand("legacy_load_areas", { + params = "", + description = "Loads, converts, and saves the areas from" + .." a legacy save file.", + privs = {areas=true, server=true}, + func = function(name, param) + minetest.chat_send_player(name, "Converting areas...") + local version = tonumber(param) + if version == 0 then + err = areas:node_ownership_load() + if err then + minetest.chat_send_player(name, "Error loading legacy file: "..err) + return + end + else + minetest.chat_send_player(name, "Invalid version number. (0 allowed)") + return + end + minetest.chat_send_player(name, "Legacy file loaded.") + + for k, area in pairs(areas.areas) do + -- New position format + area.pos1 = {x=area.x1, y=area.y1, z=area.z1} + area.pos2 = {x=area.x2, y=area.y2, z=area.z2} + + area.x1, area.y1, area.z1, + area.x2, area.y2, area.z2 = + nil, nil, nil, nil, nil, nil + + -- Area positions sorting + areas:sortPos(area.pos1, area.pos2) + + -- Add name + area.name = "unnamed" + + -- Remove ID + area.id = nil + end + minetest.chat_send_player(name, "Table format updated.") + + areas:save() + minetest.chat_send_player(name, "Converted areas saved. Done.") + end +}) + +function areas:node_ownership_load() + local filename = minetest.get_worldpath().."/owners.tbl" + tables, err = loadfile(filename) + if err then + return err + end + + tables = tables() + for idx = 1, #tables do + local tolinkv, tolinki = {}, {} + for i, v in pairs(tables[idx]) do + if type(v) == "table" and tables[v[1]] then + table.insert(tolinkv, {i, tables[v[1]]}) + end + if type(i) == "table" and tables[i[1]] then + table.insert(tolinki, {i, tables[i[1]]}) + end + end + -- link values, first due to possible changes of indices + for _, v in ipairs(tolinkv) do + tables[idx][v[1]] = v[2] + end + -- link indices + for _, v in ipairs(tolinki) do + tables[idx][v[2]], tables[idx][v[1]] = tables[idx][v[1]], nil + end + end + self.areas = tables[1] +end + +-- Returns the name of the first player that owns an area +function areas.getNodeOwnerName(pos) + for id, area in pairs(areas:getAreasAtPos(pos)) do + return area.owner + end + return false +end + +-- Checks if a node is owned by you +function areas.isNodeOwner(pos, name) + if minetest.check_player_privs(name, areas.adminPrivs) then + return true + end + for id, area in pairs(areas:getAreasAtPos(pos)) do + if name == area.owner then + return true + end + end + return false +end + +-- Checks if an area has an owner +function areas.hasOwner(pos) + for id, area in pairs(areas:getAreasAtPos(pos)) do + return true + end + return false +end + +IsPlayerNodeOwner = areas.isNodeOwner +GetNodeOwnerName = areas.getNodeOwnerName +HasOwner = areas.hasOwner + +-- This is entirely untested and may break in strange and new ways. +if areas.config.legacy_table then + owner_defs = setmetatable({}, { + __index = function(table, key) + local a = rawget(areas.areas, key) + if not a then return a end + local b = {} + for k, v in pairs(a) do b[k] = v end + b.x1, b.y1, b.z1 = b.pos1.x, b.pos1.y, b.pos1.z + b.x2, b.y1, b.z2 = b.pos2.x, b.pos2.y, b.pos2.z + b.pos1, b.pos2 = nil, nil + b.id = key + return b + end, + __newindex = function(table, key, value) + local a = value + a.pos1, a.pos2 = {x=a.x1, y=a.y1, z=a.z1}, + {x=a.x2, y=a.y2, z=a.z2} + a.x1, a.y1, a.z1, a.x2, a.y2, a.z2 = + nil, nil, nil, nil, nil, nil + a.name = a.name or "unnamed" + a.id = nil + return rawset(areas.areas, key, a) + end + }) +end + -- cgit v1.2.3