From b98e8d6da8bf8c9295462ba7a9604170455454d1 Mon Sep 17 00:00:00 2001
From: LeMagnesium <mg.minetest@gmail.com>
Date: Sun, 5 Oct 2014 17:35:10 +0200
Subject: [PATCH] Add a better error message when trying to teleport another
 player without bring privileges

---
 builtin/game/chatcommands.lua | 76 ++++++++++++++++++-----------------
 1 file changed, 39 insertions(+), 37 deletions(-)

diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua
index 9293e98f4..d7ef712ae 100644
--- a/builtin/game/chatcommands.lua
+++ b/builtin/game/chatcommands.lua
@@ -326,46 +326,48 @@ core.register_chatcommand("teleport", {
 			return true, "Teleporting to " .. target_name
 					.. " at "..core.pos_to_string(p)
 		end
+
+		if not core.check_player_privs(name, {bring=true}) then
+			return false, "You don't have permission to teleport other players (missing bring privilege)"
+		end
+
+		local teleportee = nil
+		local p = {}
+		local teleportee_name = nil
+		teleportee_name, p.x, p.y, p.z = param:match(
+				"^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
+		p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
+		if teleportee_name then
+			teleportee = core.get_player_by_name(teleportee_name)
+		end
+		if teleportee and p.x and p.y and p.z then
+			teleportee:setpos(p)
+			return true, "Teleporting " .. teleportee_name
+					.. " to " .. core.pos_to_string(p)
+		end
 		
-		if core.check_player_privs(name, {bring=true}) then
-			local teleportee = nil
-			local p = {}
-			local teleportee_name = nil
-			teleportee_name, p.x, p.y, p.z = param:match(
-					"^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
-			p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
-			if teleportee_name then
-				teleportee = core.get_player_by_name(teleportee_name)
-			end
-			if teleportee and p.x and p.y and p.z then
-				teleportee:setpos(p)
-				return true, "Teleporting " .. teleportee_name
-						.. " to " .. core.pos_to_string(p)
-			end
-			
-			local teleportee = nil
-			local p = nil
-			local teleportee_name = nil
-			local target_name = nil
-			teleportee_name, target_name = string.match(param, "^([^ ]+) +([^ ]+)$")
-			if teleportee_name then
-				teleportee = core.get_player_by_name(teleportee_name)
-			end
-			if target_name then
-				local target = core.get_player_by_name(target_name)
-				if target then
-					p = target:getpos()
-				end
-			end
-			if teleportee and p then
-				p = find_free_position_near(p)
-				teleportee:setpos(p)
-				return true, "Teleporting " .. teleportee_name
-						.. " to " .. target_name
-						.. " at " .. core.pos_to_string(p)
+		local teleportee = nil
+		local p = nil
+		local teleportee_name = nil
+		local target_name = nil
+		teleportee_name, target_name = string.match(param, "^([^ ]+) +([^ ]+)$")
+		if teleportee_name then
+			teleportee = core.get_player_by_name(teleportee_name)
+		end
+		if target_name then
+			local target = core.get_player_by_name(target_name)
+			if target then
+				p = target:getpos()
 			end
 		end
-
+		if teleportee and p then
+			p = find_free_position_near(p)
+			teleportee:setpos(p)
+			return true, "Teleporting " .. teleportee_name
+					.. " to " .. target_name
+					.. " at " .. core.pos_to_string(p)
+		end
+		
 		return false, 'Invalid parameters ("' .. param
 				.. '") or player not found (see /help teleport)'
 	end,
-- 
GitLab