forked from nalc/areas
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:
parent
a8e5b90aeb
commit
1a5efd07f1
2
api.lua
2
api.lua
|
@ -24,9 +24,11 @@ function areas:canInteract(pos, name)
|
|||
if area.owner == name then
|
||||
return true
|
||||
else
|
||||
if not area.open then
|
||||
owned = true
|
||||
end
|
||||
end
|
||||
end
|
||||
return not owned
|
||||
end
|
||||
|
||||
|
|
|
@ -305,3 +305,29 @@ minetest.register_chatcommand("change_owner", {
|
|||
name..'" has given you control over an area.')
|
||||
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})
|
||||
|
||||
|
|
6
hud.lua
6
hud.lua
|
@ -15,7 +15,11 @@ minetest.register_globalstep(function(dtime)
|
|||
else
|
||||
first = false
|
||||
end
|
||||
areaString = areaString..id.." ("..area.owner..")"
|
||||
local ownertxt = area.owner
|
||||
if area.open then
|
||||
ownertxt = ownertxt.."/open"
|
||||
end
|
||||
areaString = areaString..id.." ("..ownertxt..")"
|
||||
end
|
||||
if not areas.hud[name] then
|
||||
areas.hud[name] = {}
|
||||
|
|
Loading…
Reference in New Issue
Block a user