|
|
|
creative_regions.astore = AreaStore()
|
|
|
|
creative_regions.mod_storage = minetest.get_mod_storage()
|
|
|
|
|
|
|
|
creative_regions.region_privs = {}
|
|
|
|
|
|
|
|
function creative_regions.load_regions()
|
|
|
|
creative_regions.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 = creative_regions.astore:insert_area(edge1, edge2, tostring(data))
|
|
|
|
--
|
|
|
|
-- creative_regions.set_region_privs("r"..astore_id, "+creative, +fast, +fly")
|
|
|
|
end
|
|
|
|
|
|
|
|
function creative_regions.save_regions()
|
|
|
|
creative_regions.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
|