aboutsummaryrefslogtreecommitdiff
path: root/request.lua
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2020-06-05 09:57:04 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2020-06-05 09:57:04 +0200
commita35cf885066b717d17a143a5ef01658616ed2331 (patch)
tree5ed5a7c9d3bc98016725de1d9029331a5a5e9349 /request.lua
downloadskycraft-a35cf885066b717d17a143a5ef01658616ed2331.tar.xz
Initial Commit
Diffstat (limited to 'request.lua')
-rw-r--r--request.lua61
1 files changed, 61 insertions, 0 deletions
diff --git a/request.lua b/request.lua
new file mode 100644
index 0000000..0b11163
--- /dev/null
+++ b/request.lua
@@ -0,0 +1,61 @@
+function skycraft.register_request_system(sysname, action, progressive, preposition, func)
+ local action_capital = (action:sub(1, 1)):upper() .. action:sub(2)
+
+ local request_list = {}
+
+ minetest.register_on_leaveplayer(function(name)
+ request_list[name] = nil
+ end)
+
+ minetest.register_chatcommand(sysname, {
+ description = "Request to " .. action .. " " .. preposition .. " another player",
+ params = "<player>",
+ privs = {skycraft = true},
+ func = function(name, param)
+ if param == "" then
+ return false, "Usage: /" .. sysname .. " <player>"
+ end
+ if not minetest.get_player_by_name(param) then
+ return false, "There is no player by that name. Keep in mind this is case-sensitive, and the player must be online"
+ end
+ request_list[param] = name
+ minetest.after(60, function()
+ if request_list[param] then
+ minetest.chat_send_player(name, "Request timed-out.")
+ minetest.chat_send_player(param, "Request timed-out.")
+ request_list[param] = nil
+ end
+ end)
+ minetest.chat_send_player(param, name .. " is requesting to " .. action .. " " .. preposition .. " you. /" .. sysname .. "accept to accept")
+ return true, action_capital .. " request sent! It will timeout in 60 seconds."
+ end
+ })
+
+ minetest.register_chatcommand(sysname .. "accept", {
+ description = "Accept " .. action .. " request from another player",
+ privs = {skycraft = true},
+ func = function(name)
+ if not minetest.get_player_by_name(name) then return false, "You have to be online to use this command" end
+ local other = request_list[name]
+ if not other then return false, "Usage: /" .. sysname .. "accept allows you to accept " .. action .. " requests sent to you by other players" end
+ if not minetest.get_player_by_name(other) then return false, other .. " doesn't exist, or just disconnected/left (by timeout)." end
+ minetest.chat_send_player(other, action_capital .. " request accepted!")
+ func(name, other)
+ request_list[name] = nil
+ return true, other .. " is " .. progressive .. " " .. preposition .. " you."
+ end
+ })
+
+ minetest.register_chatcommand(sysname .. "deny", {
+ description = "Deny " .. action .." request from another player",
+ privs = {skycraft = true},
+ func = function(name)
+ local other = request_list[name]
+ if not other then return false, "Usage: /" .. sysname .. "deny allows you to deny " .. action .. " requests sent to you by other players." end
+ minetest.chat_send_player(other, action_capital .. " request denied.")
+ request_list[name] = nil
+ return false, "You denied the " .. action .. " request " .. other .. " sent you."
+ end
+ })
+
+end