diff --git a/chatcommands.lua b/chatcommands.lua index 22c4d8e..8a22887 100644 --- a/chatcommands.lua +++ b/chatcommands.lua @@ -22,7 +22,9 @@ minetest.register_chatcommand("protect", { local canAdd, errMsg = areas:canPlayerAddArea(pos1, pos2, name) if not canAdd then - minetest.chat_send_player(name, "You can't protect that area: "..errMsg) + minetest.chat_send_player(name, + "You can't protect that area: " + ..errMsg) return end @@ -38,103 +40,101 @@ end}) minetest.register_chatcommand("set_owner", { params = " ", - description = "Protect an area beetween two positions and give a player access to it without setting the parent of the area to any existing area", + description = "Protect an area beetween two positions and give" + .." a player access to it without setting the parent of the" + .." area to any existing area", privs = {areas=true}, func = function(name, param) - if param and param ~= "" then - local found, _, ownername, areaname = param:find('^([^%s]+)%s(.+)$') + local found, _, ownername, areaname = param:find('^([^%s]+)%s(.+)$') - if not found then - minetest.chat_send_player(name, "Incorrect usage, see /help set_owner") - return - end - - local pos1, pos2 = {}, {} - if areas:getPos1(name) and areas:getPos2(name) then - pos1 = areas:getPos1(name) - pos2 = areas:getPos2(name) - pos1, pos2 = areas:sortPos(pos1, pos2) - else - minetest.chat_send_player(name, 'You need to select an area first') - return - end - - if not areas:player_exists(ownername) then - minetest.chat_send_player(name, 'The player "'..ownername..'" does not exist') - return - end - - --local canAdd, errMsg = areas:canPlayerAddArea(pos1, pos2, name) - --if not canAdd then - -- minetest.chat_send_player(name, "You can't protect that area: "..errMsg) - -- return - --end - - minetest.log("action", "/set_owner invoked, Owner="..ownername.. - " AreaName="..areaname.. - " StartPos="..minetest.pos_to_string(pos1).. - " EndPos=" ..minetest.pos_to_string(pos2)) - - areas:add(ownername, areaname, pos1, pos2, nil) - areas:save() - - minetest.chat_send_player(ownername, "A concession has been granted to you! Type /list_areas to show your concessions.") - minetest.chat_send_player(name, "Area protected") - else - minetest.chat_send_player(name, 'Invalid usage, see /help set_owner') + if not found then + minetest.chat_send_player(name, "Incorrect usage, see /help set_owner") + return end + + local pos1, pos2 = {}, {} + if areas:getPos1(name) and areas:getPos2(name) then + pos1 = areas:getPos1(name) + pos2 = areas:getPos2(name) + pos1, pos2 = areas:sortPos(pos1, pos2) + else + minetest.chat_send_player(name, 'You need to select an area first') + return + end + + if not areas:player_exists(ownername) then + minetest.chat_send_player(name, 'The player "' + ..ownername..'" does not exist') + return + end + + minetest.log("action", "/set_owner invoked, Owner="..ownername.. + " AreaName="..areaname.. + " StartPos="..minetest.pos_to_string(pos1).. + " EndPos=" ..minetest.pos_to_string(pos2)) + + areas:add(ownername, areaname, pos1, pos2, nil) + areas:save() + + minetest.chat_send_player(ownername, + "You have been granted control over an area." + .." Type /list_areas to show your areas.") + minetest.chat_send_player(name, "Area protected") end}) minetest.register_chatcommand("add_owner", { params = " ", - description = "Give a player access to a sub-area beetween two positions that have already been protected, use set_owner if you don't want the parent to be set", + description = "Give a player access to a sub-area beetween two" + .." positions that have already been protected," + .." Use set_owner if you don't want the parent to be set.", privs = {}, func = function(name, param) - if param and param ~= "" then - local found, _, pid, ownername, areaname = param:find('^(%d+)%s([^%s]+)%s(.+)$') + local found, _, pid, ownername, areaname + = param:find('^(%d+)%s([^%s]+)%s(.+)$') - if not found then - minetest.chat_send_player(name, "Incorrect usage, see /help set_owner") - return - end - - local pos1, pos2 = {}, {} - if areas:getPos1(name) and areas:getPos2(name) then - pos1 = areas:getPos1(name) - pos2 = areas:getPos2(name) - pos1, pos2 = areas:sortPos(pos1, pos2) - else - minetest.chat_send_player(name, 'You need to select an area first') - return - end - - if not areas:player_exists(ownername) then - minetest.chat_send_player(name, 'The player "'..ownername..'" does not exist') - return - end - - minetest.log("action", "add_owner invoked, Owner = "..ownername.. - " AreaName = "..areaname.." ParentID = "..pid.. - " StartPos = "..pos1.x..","..pos1.y..","..pos1.z.. - " EndPos = " ..pos2.x..","..pos2.y..","..pos2.z) - - --Look to see if this new area is inside an area owned by the player using this function - pid = tonumber(pid) - if (not areas:isAreaOwner(pid, name)) or - (not areas:isSubarea(pos1, pos2, pid)) then - minetest.chat_send_player(name, "You can't protect that area") - return - end - - areas:add(ownername, areaname, pos1, pos2, pid) - areas:save() - - minetest.chat_send_player(ownername, "A concession has been granted to you! Type /list_areas to show your concessions.") - minetest.chat_send_player(name, "You granted "..ownername.." a concession successfully!") - else - minetest.chat_send_player(name, 'Invalid usage, see /help add_owner') + if not found then + minetest.chat_send_player(name, "Incorrect usage, see /help set_owner") + return end + + local pos1, pos2 = {}, {} + if areas:getPos1(name) and areas:getPos2(name) then + pos1 = areas:getPos1(name) + pos2 = areas:getPos2(name) + pos1, pos2 = areas:sortPos(pos1, pos2) + else + minetest.chat_send_player(name, 'You need to select an area first') + return + end + + if not areas:player_exists(ownername) then + minetest.chat_send_player(name, 'The player "' + ..ownername..'" does not exist') + return + end + + minetest.log("action", "add_owner invoked, Owner = "..ownername.. + " AreaName = "..areaname.." ParentID = "..pid.. + " StartPos = "..pos1.x..","..pos1.y..","..pos1.z.. + " EndPos = " ..pos2.x..","..pos2.y..","..pos2.z) + + -- Check if this new area is inside an area owned by the player + pid = tonumber(pid) + if (not areas:isAreaOwner(pid, name)) or + (not areas:isSubarea(pos1, pos2, pid)) then + minetest.chat_send_player(name, + "You can't protect that area") + return + end + + areas:add(ownername, areaname, pos1, pos2, pid) + areas:save() + + minetest.chat_send_player(ownername, + "You have been gtanted control over an area." + .." Type /list_areas to show your areas.") + minetest.chat_send_player(name, "Area protected.") end}) @@ -146,19 +146,20 @@ minetest.register_chatcommand("rename_area", { local found, _, id, newName = param:find("^(%d+)%s(.+)$") if not found then - minetest.chat_send_player(name, "Invalid usage, see /help rename_area") + minetest.chat_send_player(name, + "Invalid usage, see /help rename_area") return end index = areas:getIndexById(tonumber(id)) if not index then - minetest.chat_send_player(name, "That area doesn't exist") + minetest.chat_send_player(name, "That area doesn't exist.") return end if not areas:isAreaOwner(id, name) then - minetest.chat_send_player(name, "You don't own that area") + minetest.chat_send_player(name, "You don't own that area.") return end @@ -169,14 +170,23 @@ end}) minetest.register_chatcommand("list_owners", { params = "", - description = "list the players that can edit the area you are in", + description = "List the owners of your position", privs = {}, func = function(name, param) - local owners = areas:getNodeOwners(vector.round(minetest.get_player_by_name(name):getpos())) + local player = minetest.get_player_by_name(name) + if not player then + minetest.chat_send_player(name, + "Unable to find your position.") + return + end + local pos = vector.round(player:getpos()) + local owners = areas:getNodeOwners(pos) if #owners > 0 then - minetest.chat_send_player(name, "Owners: "..table.concat(owners, ", ")) + minetest.chat_send_player(name, + "Owners: "..table.concat(owners, ", ")) else - minetest.chat_send_player(name, "Your position is unowned") + minetest.chat_send_player(name, + "Your position is unowned.") end end}) @@ -186,38 +196,42 @@ minetest.register_chatcommand("find_areas", { description = "Find areas using a Lua regular expression", privs = {}, func = function(name, param) - if param and param ~= "" then - local found = false - for _, area in pairs(areas.areas) do - if areas:isAreaOwner(area.id, name) and - areas:toString(area):find(param) then - minetest.chat_send_player(name, areas:toString(area)) - found = true - end + if param == "" then + minetest.chat_send_player(name, + "A regular expression is required.") + return + end + local found = false + for _, area in pairs(areas.areas) do + if areas:isAreaOwner(area.id, name) and + areas:toString(area):find(param) then + minetest.chat_send_player(name, areas:toString(area)) + found = true end - if not found then - minetest.chat_send_player(name, "No matches found") - end - else - minetest.chat_send_player(name, "Regular expression required") + end + if not found then + minetest.chat_send_player(name, "No matches found") end end}) minetest.register_chatcommand("list_areas", { params = "", - description = "list the areas you own, or all areas if you have privileges", + description = "List your areas, or all areas if you are an admin.", privs = {}, func = function(name, param) admin = minetest.check_player_privs(name, {areas=true}) if admin then - minetest.chat_send_player(name, "Showing all owner entries.") + minetest.chat_send_player(name, + "Showing all areas.") else - minetest.chat_send_player(name, "Showing your owner entries (You can only modify these).") + minetest.chat_send_player(name, + "Showing your areas.") end for _, area in pairs(areas.areas) do if admin or area.owner == name then - minetest.chat_send_player(name, areas:toString(area)) + minetest.chat_send_player(name, + areas:toString(area)) end end end}) @@ -230,8 +244,9 @@ minetest.register_chatcommand("recursive_remove_areas", { func = function(name, param) local id = tonumber(param) if not id then - minetest.chat_send_player(name, 'Invalid usage, see /help recursive_remove_areas') - minetest.chat_send_player(name, 'Use /list_areas to see entries') + minetest.chat_send_player(name, + "Invalid usage, see" + .." /help recursive_remove_areas") return end @@ -240,10 +255,13 @@ minetest.register_chatcommand("recursive_remove_areas", { areas:sort() areas:save() else - minetest.chat_send_player(name, "Area "..id.." does not exist or is not owned by you") + minetest.chat_send_player(name, "Area "..id + .." does not exist or is" + .." not owned by you.") return end - minetest.chat_send_player(name, 'Removed area '..id..'and sub areas') + minetest.chat_send_player(name, "Removed area "..id + .." and it's sub areas.") end}) @@ -254,8 +272,8 @@ minetest.register_chatcommand("remove_area", { func = function(name, param) local id = tonumber(param) if not id then - minetest.chat_send_player(name, 'Invalid usage, see /help remove_area') - minetest.chat_send_player(name, 'Use /list_areas to see entries') + minetest.chat_send_player(name, + "Invalid usage, see /help remove_area") return end @@ -264,7 +282,9 @@ minetest.register_chatcommand("remove_area", { areas:sort() areas:save() else - minetest.chat_send_player(name, "Area "..id.." does not exist or is not owned by you") + minetest.chat_send_player(name, "Area "..id + .." does not exist or" + .." is not owned by you") return end minetest.chat_send_player(name, 'Removed area '..id) @@ -272,31 +292,38 @@ end}) minetest.register_chatcommand("change_owner", { - params = " ", - description = "change the owner of an area using its id", + params = " ", + description = "Change the owner of an area using its id", privs = {}, func = function(name, param) - local found, _, id, new_owner = param:find('^(%d+)%s+([^%s]+)$') + local found, _, id, new_owner = + param:find('^(%d+)%s+([^%s]+)$') if not found then - minetest.chat_send_player(name, 'Invalid usage, see /help change_area_owner') - minetest.chat_send_player(name, 'Use /list_areas to see entries') + minetest.chat_send_player(name, + "Invalid usage," + .." see /help change_area_owner") return end if not areas:player_exists(new_owner) then - minetest.chat_send_player(name, 'The player "'..new_owner..'" does not exist') + minetest.chat_send_player(name, 'The player "' + ..new_owner..'" does not exist') return end id = tonumber(id) - if areas:isAreaOwner(id, name) then - areas.areas[areas:getIndexById(id)].owner = new_owner - areas:save() - minetest.chat_send_player(name, 'Owner changed succesfully') - minetest.chat_send_player(new_owner, name..'" has granted you a concession!') - else - minetest.chat_send_player(new_owner, "Area "..id.." does not exist or is not owned by you") + if not areas:isAreaOwner(id, name) then + minetest.chat_send_player(name, + "Area "..id.." does not exist" + .." or is not owned by you.") + return end + local index = areas:getImdexById(id) + areas.areas[index].owner = new_owner + areas:save() + minetest.chat_send_player(name, 'Owner changed.') + minetest.chat_send_player(new_owner, + name..'" has given you control over an area.') end}) diff --git a/internal.lua b/internal.lua index 2fee018..142e610 100644 --- a/internal.lua +++ b/internal.lua @@ -45,7 +45,8 @@ function areas:remove(id, recurse) local parent = self:getAreaById(id).parent local children = self:getChildren(id) for _, child in pairs(children) do - -- The subarea parent will be niled out if the removed area does not have a parent + -- The subarea parent will be niled out if the + -- removed area does not have a parent areas.areas[self:getIndexById(child)].parent = parent end @@ -58,15 +59,18 @@ end -- Checks if a area between two points is entirely contained by another area function areas:isSubarea(pos1, pos2, id) local area = areas:getAreaById(id) - if area then - p1, p2 = area.pos1, area.pos2 - if (pos1.x >= p1.x and pos1.x <= p2.x) and (pos2.x >= p1.x and pos2.x <= p2.x) and - (pos1.y >= p1.y and pos1.y <= p2.y) and (pos2.y >= p1.y and pos2.y <= p2.y) and - (pos1.z >= p1.z and pos1.z <= p2.z) and (pos2.z >= p1.z and pos2.z <= p2.z) then - return true - end + if not area then + return false + end + p1, p2 = area.pos1, area.pos2 + if (pos1.x >= p1.x and pos1.x <= p2.x) and + (pos2.x >= p1.x and pos2.x <= p2.x) and + (pos1.y >= p1.y and pos1.y <= p2.y) and + (pos2.y >= p1.y and pos2.y <= p2.y) and + (pos1.z >= p1.z and pos1.z <= p2.z) and + (pos2.z >= p1.z and pos2.z <= p2.z) then + return true end - return false end -- Returns a table (list) of children of an area given it's identifier @@ -83,17 +87,20 @@ end -- Checks if the user has sufficient privileges. -- If the player is not a administrator it also checks -- if the area intersects other areas that they do not own. --- Also checks the size of the area and if the user already has more than max_areas. +-- Also checks the size of the area and if the user already +-- has more than max_areas. function areas:canPlayerAddArea(pos1, pos2, name) - --[[ if minetest.check_player_privs(name, {areas=true}) then return true - end--]] + end - -- Check self protection privilege, if it is enabled, and if the area is too big. + -- Check self protection privilege, if it is enabled, + -- and if the area is too big. if (not self.self_protection) or - (not minetest.check_player_privs(name, {[areas.self_protection_privilege]=true})) then - return false, "Self protection is disabled or you do not have the necessary privilege." + (not minetest.check_player_privs(name, + {[areas.self_protection_privilege]=true})) then + return false, "Self protection is disabled or you do not have" + .." the necessary privilege." end if (pos2.x - pos1.x) > self.self_protection_max_size.x or @@ -111,7 +118,9 @@ function areas:canPlayerAddArea(pos1, pos2, name) end end if count > self.self_protection_max_areas then - return false, "You have reached the maximum amount of areas that you are allowed to protect." + return false, "You have reached the maximum amount" + .." of areas that you are allowed to" + .." protect." end end @@ -122,7 +131,8 @@ function areas:canPlayerAddArea(pos1, pos2, name) (area.pos1.z <= pos2.z and area.pos2.z >= pos1.z) then --Found an area intersecting with the suplied area if area.owner ~= name then - return false, "The area intersects with a area that you do not own." + return false, "The area intersects with an" + .." area that you do not own." end end end @@ -130,7 +140,8 @@ function areas:canPlayerAddArea(pos1, pos2, name) return true, "" end --- Given a area returns a string in the format "name [id]: owner (x1, y1, z1) (x2, y2, z2) -> children" +-- Given a area returns a string in the format: +-- "name [id]: owner (x1, y1, z1) (x2, y2, z2) -> children" function areas:toString(area) local message = area.name.. " ["..area.id.."]: "..area.owner.." ".. diff --git a/legacy.lua b/legacy.lua index 9ff7c77..135e6dd 100644 --- a/legacy.lua +++ b/legacy.lua @@ -3,12 +3,11 @@ minetest.register_chatcommand("legacy_load_areas", { params = "", - description = "Loads, converts, and saves the areas from a legacy save file.", - privs = {areas=true, server=true}, + description = "Loads, converts, and saves the areas from" + .." a legacy node_ownership save file.", + privs = {areas=true, server=true, privs=true}, func = function(name, param) minetest.chat_send_player(name, "Converting areas...") - local startTime = os.clock() - err = areas:legacy_load() if err then minetest.chat_send_player(name, "Error loading legacy file: "..err) @@ -36,8 +35,7 @@ minetest.register_chatcommand("legacy_load_areas", { minetest.chat_send_player(name, "Table format updated.") areas:save() - minetest.chat_send_player(name, "Converted areas saved.") - minetest.chat_send_player(name, "Finished in "..tostring(os.clock() - startTime).."s.") + minetest.chat_send_player(name, "Converted areas saved. Done.") end}) -- The old load function from node_ownership (with minor modifications) diff --git a/pos.lua b/pos.lua index d89289a..0ff94d7 100644 --- a/pos.lua +++ b/pos.lua @@ -1,7 +1,8 @@ -- I could depend on WorldEdit for this, but you need to have the 'worldedit' --- permission to use those commands and you don't have /area_pos{1,2} [x y z|x,y,z] --- Since this is mostly copied from WorldEdit it is licensed under the AGPL. +-- permission to use those commands and you don't have +-- /area_pos{1,2} [x y z|x,y,z]. Since this is mostly copied from WorldEdit +-- it is licensed under the AGPL. areas.marker1 = {} areas.marker2 = {} @@ -16,27 +17,32 @@ minetest.register_chatcommand("select_area", { func = function(name, param) local id = tonumber(param) if not id then - minetest.chat_send_player(name, "Invalid usage, see /help select_area.") + minetest.chat_send_player(name, + "Invalid usage, see /help select_area.") end for k, area in pairs(areas.areas) do if area.id == id then areas:setPos1(name, area.pos1) areas:setPos2(name, area.pos2) - minetest.chat_send_player(name, "Area "..tostring(id).." selected.") + minetest.chat_send_player(name, + "Area "..id.." selected.") return end end - minetest.chat_send_player(name, "The area "..tostring(id).." does not exist.") + minetest.chat_send_player(name, + "The area "..id.." does not exist.") end}) minetest.register_chatcommand("area_pos1", { params = "[X Y Z|X,Y,Z]", - description = "Set area protection region position 1 to the player's location or the one specified", + description = "Set area protection region position 1 to your" + .." location or the one specified", privs = {}, func = function(name, param) local pos = {} - local found, _, x, y, z = param:find("^(-?%d+)[%s%,]+(-?%d+)[%s%,]+(-?%d+)$") + local found, _, x, y, z = param:find( + "^(-?%d+)[%s%,]+(-?%d+)[%s%,]+(-?%d+)$") if found then pos = {x=tonumber(x), y=tonumber(y), z=tonumber(z)} elseif param == "" then @@ -44,25 +50,31 @@ minetest.register_chatcommand("area_pos1", { if player then pos = player:getpos() else - minetest.chat_send_player(name, "Unable to get position") + minetest.chat_send_player(name, + "Unable to get position") return end else - minetest.chat_send_player(name, "Invalid usage, see /help no_pos1") + minetest.chat_send_player(name, + "Invalid usage, see /help area_pos1") end - pos.x, pos.y, pos.z = math.floor(pos.x + 0.5), math.floor(pos.y + 0.5), math.floor(pos.z + 0.5) + pos = vector.round(pos) areas:setPos1(name, pos) - minetest.chat_send_player(name, "Area position 1 set to " .. minetest.pos_to_string(pos)) + minetest.chat_send_player(name, + "Area position 1 set to " + ..minetest.pos_to_string(pos)) end, }) minetest.register_chatcommand("area_pos2", { params = "[X Y Z|X,Y,Z]", - description = "Set area protection region position 2 to the player's location or the one specified", + description = "Set area protection region position 2 to your" + .." location or the one specified", privs = {}, func = function(name, param) local pos = {} - local found, _, x, y, z = param:find("^(-?%d+)[%s%,]+(-?%d+)[%s%,]+(-?%d+)$") + local found, _, x, y, z = param:find( + "^(-?%d+)[%s%,]+(-?%d+)[%s%,]+(-?%d+)$") if found then pos = {x=tonumber(x), y=tonumber(y), z=tonumber(z)} elseif param == "" then @@ -70,46 +82,59 @@ minetest.register_chatcommand("area_pos2", { if player then pos = player:getpos() else - minetest.chat_send_player(name, "Unable to get position") + minetest.chat_send_player(name, + "Unable to get position") return end else - minetest.chat_send_player(name, "Invalid usage, see /help no_pos2") + minetest.chat_send_player(name, + "Invalid usage, see /help area_pos2") end - pos.x, pos.y, pos.z = math.floor(pos.x + 0.5), math.floor(pos.y + 0.5), math.floor(pos.z + 0.5) + pos = vector.round(pos) areas:setPos2(name, pos) - minetest.chat_send_player(name, "Area position 2 set to " .. minetest.pos_to_string(pos)) + minetest.chat_send_player(name, + "Area position 2 set to " + ..minetest.pos_to_string(pos)) end, }) minetest.register_chatcommand("area_pos", { params = "set/set1/set2/get", - description = "Set area protection region, position 1, or position 2 by punching nodes, or display the region", + description = "Set area protection region, position 1, or position 2" + .." by punching nodes, or display the region", privs = {}, func = function(name, param) if param == "set" then -- Set both area positions areas.set_pos[name] = "pos1" - minetest.chat_send_player(name, "Select positions by punching two nodes") + minetest.chat_send_player(name, + "Select positions by punching two nodes") elseif param == "set1" then -- Set area position 1 areas.set_pos[name] = "pos1only" - minetest.chat_send_player(name, "Select position 1 by punching a node") + minetest.chat_send_player(name, + "Select position 1 by punching a node") elseif param == "set2" then -- Set area position 2 areas.set_pos[name] = "pos2" - minetest.chat_send_player(name, "Select position 2 by punching a node") + minetest.chat_send_player(name, + "Select position 2 by punching a node") elseif param == "get" then -- Display current area positions if areas.pos1[name] ~= nil then - minetest.chat_send_player(name, "Position 1: " .. minetest.pos_to_string(areas.pos1[name])) + minetest.chat_send_player(name, "Position 1: " + ..minetest.pos_to_string(areas.pos1[name])) else - minetest.chat_send_player(name, "Position 1 not set") + minetest.chat_send_player(name, + "Position 1 not set") end if areas.pos2[name] ~= nil then - minetest.chat_send_player(name, "Position 2: " .. minetest.pos_to_string(areas.pos2[name])) + minetest.chat_send_player(name, "Position 2: " + ..minetest.pos_to_string(areas.pos2[name])) else - minetest.chat_send_player(name, "Position 2 not set") + minetest.chat_send_player(name, + "Position 2 not set") end else - minetest.chat_send_player(name, "Unknown subcommand: " .. param) + minetest.chat_send_player(name, + "Unknown subcommand: "..param) end end, }) @@ -135,22 +160,29 @@ end minetest.register_on_punchnode(function(pos, node, puncher) local name = puncher:get_player_name() - if name ~= "" and areas.set_pos[name] ~= nil then --currently setting position - if areas.set_pos[name] == "pos1" then --setting position 1 + -- Currently setting position + if name ~= "" and areas.set_pos[name] then + if areas.set_pos[name] == "pos1" then areas.pos1[name] = pos areas.markPos1(name) - areas.set_pos[name] = "pos2" --set position 2 on the next invocation - minetest.chat_send_player(name, "Position 1 set to " .. minetest.pos_to_string(pos)) - elseif areas.set_pos[name] == "pos1only" then --setting position 1 only + areas.set_pos[name] = "pos2" + minetest.chat_send_player(name, + "Position 1 set to " + ..minetest.pos_to_string(pos)) + elseif areas.set_pos[name] == "pos1only" then areas.pos1[name] = pos areas.markPos1(name) - areas.set_pos[name] = nil --finished setting positions - minetest.chat_send_player(name, "Position 1 set to " .. minetest.pos_to_string(pos)) - elseif areas.set_pos[name] == "pos2" then --setting position 2 + areas.set_pos[name] = nil + minetest.chat_send_player(name, + "Position 1 set to " + ..minetest.pos_to_string(pos)) + elseif areas.set_pos[name] == "pos2" then areas.pos2[name] = pos areas.markPos2(name) - areas.set_pos[name] = nil --finished setting positions - minetest.chat_send_player(name, "Position 2 set to " .. minetest.pos_to_string(pos)) + areas.set_pos[name] = nil + minetest.chat_send_player(name, + "Position 2 set to " + ..minetest.pos_to_string(pos)) end end end) @@ -171,14 +203,6 @@ function areas:sortPos(pos1, pos2) return pos1, pos2 end --- Rounds a position to the nearest integer -function areas:roundPos(pos) - pos.x = math.floor(pos.x+0.5) - pos.y = math.floor(pos.y+0.5) - pos.z = math.floor(pos.z+0.5) - return pos -end - -- Marks area position 1 areas.markPos1 = function(name) local pos = areas.pos1[name] diff --git a/settings.lua b/settings.lua index ba579ff..d126c83 100644 --- a/settings.lua +++ b/settings.lua @@ -11,13 +11,15 @@ end areas.filename = minetest.setting_get("areas.filename") or worldpath.."/areas.dat" --- Allow players with a privilege create their own areas within the max_size and number +-- Allow players with a privilege create their own areas +-- within the max_size and number areas.self_protection = setting_getbool_default("areas.self_protection", false) areas.self_protection_privilege = minetest.setting_get("areas.self_protection_privilege") or "interact" areas.self_protection_max_size = - minetest.setting_get_pos("areas.self_protection_max_size") or {x=50, y=100, z=50} + minetest.setting_get_pos("areas.self_protection_max_size") or + {x=50, y=100, z=50} areas.self_protection_max_areas = tonumber(minetest.setting_get("areas.self_protection_max_areas")) or 3