From 9b75c37a8f0944b2b7a6644da11866cef5309a79 Mon Sep 17 00:00:00 2001 From: crabman77 Date: Thu, 25 Feb 2016 12:40:02 +0100 Subject: [PATCH] fix areas in areas --- mods/areas/api.lua | 27 +++++++++++++++++++++++++++ mods/areas/internal.lua | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/mods/areas/api.lua b/mods/areas/api.lua index 7f9c4a4c..44874dfc 100755 --- a/mods/areas/api.lua +++ b/mods/areas/api.lua @@ -134,6 +134,33 @@ function areas:canInteractInArea(pos1, pos2, name, allow_open) end +function areas:canMakeArea(pos1, pos2, name) --MFF crabman(25/02/2016) fix areas in areas + if name and minetest.check_player_privs(name, self.adminPrivs) then + return true + end + areas:sortPos(pos1, pos2) + + local id_areas_intersect = {} + local areas = self:getAreasForArea(pos1, pos2) + + if not areas then return true end + + for id, area in pairs(areas) do + if area.owner == name and self:isSubarea(pos1, pos2, id) then + return true + end + if not area.open and not self:isAreaOwner(id, name) then + table.insert(id_areas_intersect, id) + end + end + + if #id_areas_intersect > 0 then + return false, id_areas_intersect[1] + end + + return true +end + --MFF DEBUT crabman(17/09/2015 ) respawn player in special area(event) if a spawn is set. --1 party (2 party in beds mod) diff --git a/mods/areas/internal.lua b/mods/areas/internal.lua index fb619689..6e6bf1dd 100755 --- a/mods/areas/internal.lua +++ b/mods/areas/internal.lua @@ -184,7 +184,7 @@ function areas:canPlayerAddArea(pos1, pos2, name) end -- Check intersecting areas - local can, id = self:canInteractInArea(pos1, pos2, name) + local can, id = self:canMakeArea(pos1, pos2, name) --MFF crabman(25/02/2016) fix areas in areas if not can then local area = self.areas[id] return false, ("The area intersects with %s [%u] (%s).")