summaryrefslogtreecommitdiff
path: root/api.lua
diff options
context:
space:
mode:
Diffstat (limited to 'api.lua')
-rw-r--r--api.lua38
1 files changed, 22 insertions, 16 deletions
diff --git a/api.lua b/api.lua
index 88c8b1e..95a3987 100644
--- a/api.lua
+++ b/api.lua
@@ -1,20 +1,30 @@
+-- Returns a list of areas that include the provided position
+function areas:getAreasAtPos(pos)
+ local a = {}
+ local px, py, pz = pos.x, pos.y, pos.z
+ for id, area in pairs(self.areas) do
+ local ap1, ap2 = area.pos1, area.pos2
+ if px >= ap1.x and px <= ap2.x and
+ py >= ap1.y and py <= ap2.y and
+ pz >= ap1.z and pz <= ap2.z then
+ a[id] = area
+ end
+ end
+ return a
+end
+
-- Checks if the area is unprotected or owned by you
function areas:canInteract(pos, name)
if minetest.check_player_privs(name, {areas=true}) then
return true
end
local owned = false
- for _, area in pairs(self.areas) do
- p1, p2 = area.pos1, area.pos2
- if pos.x >= p1.x and pos.x <= p2.x and
- pos.y >= p1.y and pos.y <= p2.y and
- pos.z >= p1.z and pos.z <= p2.z then
- if area.owner == name then
- return true
- else
- owned = true
- end
+ for _, area in pairs(self:getAreasAtPos(pos)) do
+ if area.owner == name then
+ return true
+ else
+ owned = true
end
end
return not owned
@@ -23,12 +33,8 @@ end
-- Returns a table (list) of all players that own an area
function areas:getNodeOwners(pos)
local owners = {}
- for _, area in pairs(self.areas) do
- if pos.x >= area.pos1.x and pos.x <= area.pos2.x and
- pos.y >= area.pos1.y and pos.y <= area.pos2.y and
- pos.z >= area.pos1.z and pos.z <= area.pos2.z then
- table.insert(owners, area.owner)
- end
+ for _, area in pairs(self:getAreasAtPos(pos)) do
+ table.insert(owners, area.owner)
end
return owners
end