Simplify settings definitions and namespace settings

This commit is contained in:
ShadowNinja 2014-11-17 21:16:59 -05:00
parent e4aef02cb9
commit 3f777900d4
5 changed files with 45 additions and 44 deletions

View File

@ -2,7 +2,7 @@
minetest.register_chatcommand("protect", { minetest.register_chatcommand("protect", {
params = "<AreaName>", params = "<AreaName>",
description = "Protect your own area", description = "Protect your own area",
privs = {[areas.self_protection_privilege]=true}, privs = {[areas.config.self_protection_privilege]=true},
func = function(name, param) func = function(name, param)
if param == "" then if param == "" then
return false, "Invalid usage, see /help protect." return false, "Invalid usage, see /help protect."

View File

@ -26,8 +26,8 @@ minetest.register_privilege("areas_high_limit", {
description = "Can can more, bigger areas." description = "Can can more, bigger areas."
}) })
if not minetest.registered_privileges[areas.self_protection_privilege] then if not minetest.registered_privileges[areas.config.self_protection_privilege] then
minetest.register_privilege(areas.self_protection_privilege, { minetest.register_privilege(areas.config.self_protection_privilege, {
description = "Can protect areas.", description = "Can protect areas.",
}) })
end end

View File

@ -10,7 +10,7 @@ function areas:save()
minetest.log("error", "[areas] Failed to serialize area data!") minetest.log("error", "[areas] Failed to serialize area data!")
return return
end end
local file, err = io.open(self.filename, "w") local file, err = io.open(self.config.filename, "w")
if err then if err then
return err return err
end end
@ -20,7 +20,7 @@ end
-- Load the areas table from the save file -- Load the areas table from the save file
function areas:load() function areas:load()
local file, err = io.open(self.filename, "r") local file, err = io.open(self.config.filename, "r")
if err then if err then
self.areas = self.areas or {} self.areas = self.areas or {}
return err return err
@ -116,15 +116,15 @@ function areas:canPlayerAddArea(pos1, pos2, name)
-- Check self protection privilege, if it is enabled, -- Check self protection privilege, if it is enabled,
-- and if the area is too big. -- and if the area is too big.
if not self.self_protection or if not self.config.self_protection or
not privs[areas.self_protection_privilege] then not privs[areas.config.self_protection_privilege] then
return false, "Self protection is disabled or you do not have" return false, "Self protection is disabled or you do not have"
.." the necessary privilege." .." the necessary privilege."
end end
local max_size = privs.areas_high_limit and local max_size = privs.areas_high_limit and
self.self_protection_max_size_high or self.config.self_protection_max_size_high or
self.self_protection_max_size self.config.self_protection_max_size
if if
(pos2.x - pos1.x) > max_size.x or (pos2.x - pos1.x) > max_size.x or
(pos2.y - pos1.y) > max_size.y or (pos2.y - pos1.y) > max_size.y or
@ -140,8 +140,8 @@ function areas:canPlayerAddArea(pos1, pos2, name)
end end
end end
local max_areas = privs.areas_high_limit and local max_areas = privs.areas_high_limit and
self.self_protection_max_areas_high or self.config.self_protection_max_areas_high or
self.self_protection_max_areas self.config.self_protection_max_areas
if count >= max_areas then if count >= max_areas then
return false, "You have reached the maximum amount of" return false, "You have reached the maximum amount of"
.." areas that you are allowed to protect." .." areas that you are allowed to protect."

View File

@ -110,7 +110,7 @@ GetNodeOwnerName = areas.getNodeOwnerName
HasOwner = areas.hasOwner HasOwner = areas.hasOwner
-- This is entirely untested and may break in strange and new ways. -- This is entirely untested and may break in strange and new ways.
if areas.legacy_table then if areas.config.legacy_table then
owner_defs = setmetatable({}, { owner_defs = setmetatable({}, {
__index = function(table, key) __index = function(table, key)
local a = rawget(areas.areas, key) local a = rawget(areas.areas, key)

View File

@ -1,42 +1,43 @@
local worldpath = minetest.get_worldpath() local world_path = minetest.get_worldpath()
local function setting_getbool_default(setting, default) areas.config = {}
local value = minetest.setting_getbool(setting)
local function setting(tp, name, default)
local full_name = "areas."..name
local value
if tp == "boolean" then
value = minetest.setting_getbool(full_name)
elseif tp == "string" then
value = minetest.setting_get(full_name)
elseif tp == "position" then
value = minetest.setting_get_pos(full_name)
elseif tp == "number" then
value = tonumber(minetest.setting_get(full_name))
else
error("Invalid setting type!")
end
if value == nil then if value == nil then
value = default value = default
end end
return value areas.config[name] = value
end end
areas.filename = --------------
minetest.setting_get("areas.filename") or worldpath.."/areas.dat" -- Settings --
--------------
setting("string", "filename", world_path.."/areas.dat")
-- Allow players with a privilege create their own areas -- Allow players with a privilege create their own areas
-- within the maximum size and number -- within the maximum size and number.
areas.self_protection = setting("boolean", "self_protection", false)
setting_getbool_default("areas.self_protection", false) setting("string", "self_protection_privilege", "interact")
areas.self_protection_privilege = setting("position", "self_protection_max_size", {x=64, y=128, z=64})
minetest.setting_get("areas.self_protection_privilege") or "interact" setting("number", "self_protection_max_areas", 4)
areas.self_protection_max_size = -- For players with the areas_high_limit privilege.
minetest.setting_get_pos("areas.self_protection_max_size") or setting("position", "self_protection_max_size_high", {x=512, y=512, z=512})
{x=64, y=128, z=64} setting("number", "self_protection_max_areas_high", 32)
areas.self_protection_max_size_high =
minetest.setting_get_pos("areas.self_protection_max_size_high") or
{x=512, y=512, z=512}
areas.self_protection_max_areas =
tonumber(minetest.setting_get("areas.self_protection_max_areas")) or 4
areas.self_protection_max_areas_high =
tonumber(minetest.setting_get("areas.self_protection_max_areas_high")) or 32
-- Register compatability functions for node_ownership. -- legacy_table (owner_defs) compatibility. Untested and has known issues.
-- legacy_table (owner_defs) compatibility is untested setting("boolean", "legacy_table", false)
-- and can not be used if security_safe_mod_api is on.
areas.legacy_table =
setting_getbool_default("areas.legacy_table", false)
-- Prevent players from punching nodes in a protected area.
-- Usefull for things like delayers, usualy annoying and
-- prevents usage of things like buttons.
areas.protect_punches =
setting_getbool_default("areas.protect_punches", false)