aboutsummaryrefslogtreecommitdiff
path: root/request.lua
blob: 0b111633ea851c6062ea550cb157265d55ec5fac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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