From f06658f319ccc24ff7b8b53fc69cb192a7fce081 Mon Sep 17 00:00:00 2001 From: Robbie Ferguson Date: Fri, 13 May 2016 13:12:11 -0400 Subject: [PATCH] Working on areas protection. Changing the way we detect areas and whether the player is allowed to teleport to a protected area. --- init.lua | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/init.lua b/init.lua index 98554a1..f1fba78 100644 --- a/init.lua +++ b/init.lua @@ -84,28 +84,26 @@ local function tpc_send(player,coordinates) local target_coords={x=posx, y=posy, z=posz} - -- If the area is protected, reject the user's request to teleport to these coordinates -- In future release we'll actually query the player who owns the area, if they're online, and ask for their permission. - -- Admin user (priv "tp_admin") overrides all protection - if minetest.check_player_privs(pname, {tp_admin=true}) then - minetest.chat_send_player(player, 'Teleporting to '..posx..','..posy..','..posz) - minetest.sound_play("tps_portal", {pos = target_coords, gain = 1.0, max_hear_distance = 10}) - pname:setpos(target_coords) - else - local protected = minetest.is_protected(target_coords,pname) - if protected then - local owner_string = areas:getNodeOwners(target_coords) - if pname ~= owner_string then - minetest.chat_send_player(player, "Error: These coordinates are within a protected area.") - return - end - else - end - minetest.chat_send_player(player, 'Teleporting to '..posx..','..posy..','..posz) - minetest.sound_play("tps_portal", {pos = target_coords, gain = 1.0, max_hear_distance = 10}) - pname:setpos(target_coords) - end + -- Admin user (priv "tp_admin") overrides all protection + if minetest.check_player_privs(pname, {tp_admin=true}) then + minetest.chat_send_player(player, 'Teleporting to '..posx..','..posy..','..posz) + minetest.sound_play("tps_portal", {pos = target_coords, gain = 1.0, max_hear_distance = 10}) + pname:setpos(target_coords) + else + local protected = minetest.is_protected(target_coords,pname) + if protected then + if not areas:canInteract(target_coords, pname) then + local owners = areas:getNodeOwners(target_coords) + minetest.chat_send_player(player,("Error: %s is protected by %s."):format(minetest.pos_to_string(target_coords),table.concat(owners, ", "))) + return + end + end + minetest.chat_send_player(player, 'Teleporting to '..posx..','..posy..','..posz) + minetest.sound_play("tps_portal", {pos = target_coords, gain = 1.0, max_hear_distance = 10}) + pname:setpos(target_coords) + end end local function tpr_deny(name)