diff options
Diffstat (limited to 'areas/pos.lua')
| -rw-r--r-- | areas/pos.lua | 26 | 
1 files changed, 14 insertions, 12 deletions
| diff --git a/areas/pos.lua b/areas/pos.lua index f969aaa..36a6b78 100644 --- a/areas/pos.lua +++ b/areas/pos.lua @@ -11,6 +11,16 @@ areas.set_pos = {}  areas.pos1 = {}  areas.pos2 = {} +local LIMIT = 30992 -- this is due to MAPBLOCK_SIZE=16! + +local function posLimit(pos) +	return { +		x = math.max(math.min(pos.x, LIMIT), -LIMIT), +		y = math.max(math.min(pos.y, LIMIT), -LIMIT), +		z = math.max(math.min(pos.z, LIMIT), -LIMIT) +	} +end +  minetest.register_chatcommand("select_area", {  	params = "<ID>",  	description = "Select a area by id.", @@ -35,7 +45,7 @@ minetest.register_chatcommand("area_pos1", {  		.." location or the one specified",  	privs = {},  	func = function(name, param) -		local pos = nil +		local pos  		local found, _, x, y, z = param:find(  				"^(-?%d+)[, ](-?%d+)[, ](-?%d+)$")  		if found then @@ -50,7 +60,7 @@ minetest.register_chatcommand("area_pos1", {  		else  			return false, "Invalid usage, see /help area_pos1."  		end -		pos = vector.round(pos) +		pos = posLimit(vector.round(pos))  		areas:setPos1(name, pos)  		return true, "Area position 1 set to "  				..minetest.pos_to_string(pos) @@ -62,7 +72,7 @@ minetest.register_chatcommand("area_pos2", {  	description = "Set area protection region position 2 to your"  		.." location or the one specified",  	func = function(name, param) -		local pos = nil +		local pos  		local found, _, x, y, z = param:find(  				"^(-?%d+)[, ](-?%d+)[, ](-?%d+)$")  		if found then @@ -77,7 +87,7 @@ minetest.register_chatcommand("area_pos2", {  		else  			return false, "Invalid usage, see /help area_pos2."  		end -		pos = vector.round(pos) +		pos = posLimit(vector.round(pos))  		areas:setPos2(name, pos)  		return true, "Area position 2 set to "  				..minetest.pos_to_string(pos) @@ -129,14 +139,6 @@ function areas:getPos(playerName)  	return areas:sortPos(pos1, pos2)  end -local function posLimit(pos) -	return { -		x = math.max(math.min(pos.x, 31000), -31000), -		y = math.max(math.min(pos.y, 31000), -31000), -		z = math.max(math.min(pos.z, 31000), -31000) -	} -end -  function areas:setPos1(playerName, pos)  	areas.pos1[playerName] = posLimit(pos)  	areas.markPos1(playerName) | 
