creative_regions.astore = AreaStore() creative_regions.mod_storage = minetest.get_mod_storage() creative_regions.region_privs = {} function creative_regions:load_regions() self.astore:from_file(minetest.get_worldpath().."/creative_regions_regions") creative_regions.region_privs = minetest.deserialize(creative_regions.mod_storage:get_string("astore_privs")) or {} -- local edge1 = { x=-10, y=-10, z=-10 } -- local edge2 = { x=10, y=10, z=10 } -- local data = "Testregion" -- local astore_id = self.astore:insert_area(edge1, edge2, tostring(data)) -- -- creative_regions:set_region_privs("r"..astore_id, "+creative, +fast, +fly") end function creative_regions:save_regions() self.astore:to_file(minetest.get_worldpath().."/creative_regions_regions") local datastr = minetest.serialize(creative_regions.region_privs) if not datastr then minetest.log("error", "[creative_regions] Failed to serialize region_privs data!") return end creative_regions.mod_storage:set_string("astore_privs", datastr) end function creative_regions:get_region_size(astore_area) local pos1 = astore_area.min local pos2 = astore_area.max local x = math.abs( pos2.x - pos1.x ) local z = math.abs( pos2.z - pos1.x ) return x*z end function creative_regions:set_region_privs(id, privs_string) creative_regions.region_privs[tostring(id)] = privs_string end function creative_regions:decode_privs_table(privs_table) local privs_grant = {} local privs_revoke = {} --table is sorted ascending with priority for _, priv in ipairs(privs_table) do local toggle = string.sub(priv, 1, 1) priv = string.sub(priv, 2) if toggle == '+' then privs_grant[priv] = true privs_revoke[priv] = nil elseif toggle == '-' then privs_revoke[priv] = true privs_grant[priv] = nil end end return privs_grant, privs_revoke end function creative_regions:add_privs_from_string(privs_table, str) -- minetest/builtin/common/misc_helpers.lua:core.string_to_privs() assert(type(str) == "string") local delim = ',' local privs = {} for _, priv in pairs(string.split(str, delim)) do priv = priv:trim() table.insert(privs_table, priv) end return privs end