diff options
author | Wuzzy <Wuzzy2@mail.ru> | 2021-03-06 04:05:14 +0100 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2021-05-29 11:45:04 +0200 |
commit | d7a4479eb382392555ece1638169aeea094acc31 (patch) | |
tree | fd7c20292cf7b417526a987fa7ea6135fe390912 /builtin/game | |
parent | 5bf72468f3a0925a9fc3c9acacf3f6e138bff35e (diff) | |
download | minetest-d7a4479eb382392555ece1638169aeea094acc31.tar.gz minetest-d7a4479eb382392555ece1638169aeea094acc31.tar.bz2 minetest-d7a4479eb382392555ece1638169aeea094acc31.zip |
Fix misleading /shutdown command syntax
Diffstat (limited to 'builtin/game')
-rw-r--r-- | builtin/game/chat.lua | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua index 0bd12c25f..4dbcff1e2 100644 --- a/builtin/game/chat.lua +++ b/builtin/game/chat.lua @@ -1053,24 +1053,58 @@ core.register_chatcommand("days", { end }) +local function parse_shutdown_param(param) + local delay, reconnect, message + local one, two, three + one, two, three = param:match("^(%S+) +(%-r) +(.*)") + if one and two and three then + -- 3 arguments: delay, reconnect and message + return one, two, three + end + -- 2 arguments + one, two = param:match("^(%S+) +(.*)") + if one and two then + if tonumber(one) then + delay = one + if two == "-r" then + reconnect = two + else + message = two + end + elseif one == "-r" then + reconnect, message = one, two + end + return delay, reconnect, message + end + -- 1 argument + one = param:match("(.*)") + if tonumber(one) then + delay = one + elseif one == "-r" then + reconnect = one + else + message = one + end + return delay, reconnect, message +end + core.register_chatcommand("shutdown", { - params = S("[<delay_in_seconds> | -1] [reconnect] [<message>]"), - description = S("Shutdown server (-1 cancels a delayed shutdown)"), + params = S("[<delay_in_seconds> | -1] [-r] [<message>]"), + description = S("Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)"), privs = {server=true}, func = function(name, param) - local delay, reconnect, message - delay, param = param:match("^%s*(%S+)(.*)") - if param then - reconnect, param = param:match("^%s*(%S+)(.*)") + local delay, reconnect, message = parse_shutdown_param(param) + local bool_reconnect = reconnect == "-r" + if not message then + message = "" end - message = param and param:match("^%s*(.+)") or "" delay = tonumber(delay) or 0 if delay == 0 then core.log("action", name .. " shuts down server") core.chat_send_all("*** "..S("Server shutting down (operator request).")) end - core.request_shutdown(message:trim(), core.is_yes(reconnect), delay) + core.request_shutdown(message:trim(), bool_reconnect, delay) return true end, }) |