Allow areas to be optionally open to all other users

In other words, you can retain ownership of an area but disable and
re-enable the protection aspect at will, via the area_open chat command.

By default, nothing is any different following this commit - all
existing areas are protected, as are new ones. But you can do (for
example) "area_open 1" and if you're the owner of that area, it's
now possible for other users to interact there. "area_open 1" again to
toggle the protection back on.

Where there are sub-areas, the main owner and ALL sub-area owners at a
particulare location must have set the areas to open to disable
protection.
This commit is contained in:
Ciaran Gultnieks 2014-02-07 18:05:23 +00:00 committed by ShadowNinja
parent a8e5b90aeb
commit 1a5efd07f1
3 changed files with 34 additions and 2 deletions

View File

@ -24,7 +24,9 @@ function areas:canInteract(pos, name)
if area.owner == name then if area.owner == name then
return true return true
else else
owned = true if not area.open then
owned = true
end
end end
end end
return not owned return not owned

View File

@ -305,3 +305,29 @@ minetest.register_chatcommand("change_owner", {
name..'" has given you control over an area.') name..'" has given you control over an area.')
end}) end})
minetest.register_chatcommand("area_open", {
params = "<id>",
description = "Toggle an area open (anyone can interact) or not",
privs = {},
func = function(name, param)
local id = tonumber(param)
if not id then
minetest.chat_send_player(name,
"Invalid usage, see /help area_open")
return
end
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 open = not areas.areas[id].open
-- Save false as nil to avoid inflating the DB.
areas.areas[id].open = open or nil
areas:save()
minetest.chat_send_player(name, "Area "..(open and "opened" or "closed")..".")
end})

View File

@ -15,7 +15,11 @@ minetest.register_globalstep(function(dtime)
else else
first = false first = false
end end
areaString = areaString..id.." ("..area.owner..")" local ownertxt = area.owner
if area.open then
ownertxt = ownertxt.."/open"
end
areaString = areaString..id.." ("..ownertxt..")"
end end
if not areas.hud[name] then if not areas.hud[name] then
areas.hud[name] = {} areas.hud[name] = {}