From da66780a569712c23ae4f2996cfb4608a9f9d69d Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 1 Apr 2016 20:02:19 -0400 Subject: copy all standard Dreambuilder mods in from the old subgame (exactly as last supplied there, updates to these mods will follow later) --- teleport_request/README.md | 2 + teleport_request/init.lua | 169 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 teleport_request/README.md create mode 100644 teleport_request/init.lua (limited to 'teleport_request') diff --git a/teleport_request/README.md b/teleport_request/README.md new file mode 100644 index 0000000..34c8cfb --- /dev/null +++ b/teleport_request/README.md @@ -0,0 +1,2 @@ +This mod is released under WTFPL. +It adds ability to teleport to other players with their permission by using the /tpr command which requires "interact" privilege and the /tphr command which requires the "interact " privilege. diff --git a/teleport_request/init.lua b/teleport_request/init.lua new file mode 100644 index 0000000..3b4b41b --- /dev/null +++ b/teleport_request/init.lua @@ -0,0 +1,169 @@ +-- Original code by Traxie21 and released with the WTFPL license +-- https://forum.minetest.net/viewtopic.php?id=4457 + +-- Updates by Zeno and ChaosWormz + +local timeout_delay = 60 + +-- Set to true to register tpr_admin priv +local regnewpriv = false + +local version = "1.1" + +local tpr_list = {} +local tphr_list = {} + +--Teleport Request System +local function tpr_send(sender, receiver) + if receiver == "" then + minetest.chat_send_player(sender, "Usage: /tpr ") + return + end + + --If paremeter is valid, Send teleport message and set the table. + if not minetest.get_player_by_name(receiver) then + return + end + + minetest.chat_send_player(receiver, sender ..' is requesting to teleport to you. /tpy to accept.') + minetest.chat_send_player(sender, 'Teleport request sent! It will time out in '.. timeout_delay ..' seconds.') + + --Write name values to list and clear old values. + tpr_list[receiver] = sender + --Teleport timeout delay + minetest.after(timeout_delay, function(name) + if tpr_list[name] then + tpr_list[name] = nil + end + end, sender) +end + +local function tphr_send(sender, receiver) + if receiver == "" then + minetest.chat_send_player(sender, "Usage: /tphr ") + return + end + + --If paremeter is valid, Send teleport message and set the table. + if not minetest.get_player_by_name(receiver) then + return + end + + minetest.chat_send_player(receiver, sender ..' is requesting that you teleport to them. /tpy to accept; /tpn to deny') + minetest.chat_send_player(sender, 'Teleport request sent! It will time out in '.. timeout_delay ..' seconds.') + + --Write name values to list and clear old values. + tphr_list[receiver] = sender + --Teleport timeout delay + minetest.after(timeout_delay, function(name) + if tphr_list[name] then + tphr_list[name] = nil + end + end, sender) +end + +local function tpr_deny(name) + if tpr_list[name] then + minetest.chat_send_player(tpr_list[name], 'Teleport request denied.') + tpr_list[name] = nil + end + if tphr_list[name] then + minetest.chat_send_player(tphr_list[name], 'Teleport request denied.') + tphr_list[name] = nil + end +end + +-- Copied from Celeron-55's /teleport command. Thanks Celeron! +local function find_free_position_near(pos) + local tries = { + {x=1,y=0,z=0}, + {x=-1,y=0,z=0}, + {x=0,y=0,z=1}, + {x=0,y=0,z=-1}, + } + for _,d in pairs(tries) do + local p = vector.add(pos, d) + if not minetest.registered_nodes[minetest.get_node(p).name].walkable then + return p, true + end + end + return pos, false +end + + +--Teleport Accept Systems +local function tpr_accept(name, param) + + --Check to prevent constant teleporting. + if not tpr_list[name] + and not tphr_list[name] then + minetest.chat_send_player(name, "Usage: /tpy allows you to accept teleport requests sent to you by other players") + return + end + + local chatmsg, source, target, name2 + + if tpr_list[name] then + name2 = tpr_list[name] + source = minetest.get_player_by_name(name) + target = minetest.get_player_by_name(name2) + chatmsg = name2 .. " is teleporting to you." + tpr_list[name] = nil + elseif tphr_list[name] then + name2 = tphr_list[name] + source = minetest.get_player_by_name(name2) + target = minetest.get_player_by_name(name) + chatmsg = "You are teleporting to " .. name2 .. "." + tphr_list[name] = nil + else + return + end + + -- Could happen if either player disconnects (or timeout); if so just abort + if not source + or not target then + return + end + + minetest.chat_send_player(name2, "Request Accepted!") + minetest.chat_send_player(name, chatmsg) + + target:setpos(find_free_position_near(source:getpos())) +end + +--Initalize Permissions. + +if regnewpriv then + minetest.register_privilege("tpr_admin", { + description = "Permission to override teleport to other players. UNFINISHED", + give_to_singleplayer = true + }) +end + +--Initalize Commands. + +minetest.register_chatcommand("tpr", { + description = "Request teleport to another player", + params = " | leave playername empty to see help message", + privs = {interact=true}, + func = tpr_send +}) + +minetest.register_chatcommand("tphr", { + description = "Request player to teleport to you", + params = " | leave playername empty to see help message", + privs = {interact=true}, + func = tphr_send +}) + +minetest.register_chatcommand("tpy", { + description = "Accept teleport requests from another player", + func = tpr_accept +}) + +minetest.register_chatcommand("tpn", { + description = "Deny teleport requests from another player", + func = tpr_deny +}) + +minetest.log("info", "[Teleport Request] Teleport Request v" .. version .. " Loaded.") -- cgit v1.2.3