diff options
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/game/chat.lua | 50 | ||||
-rw-r--r-- | builtin/locale/template.txt | 4 |
2 files changed, 44 insertions, 10 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, }) diff --git a/builtin/locale/template.txt b/builtin/locale/template.txt index db0ee07b8..13e6287a1 100644 --- a/builtin/locale/template.txt +++ b/builtin/locale/template.txt @@ -143,8 +143,8 @@ Invalid hour (must be between 0 and 23 inclusive).= Invalid minute (must be between 0 and 59 inclusive).= Show day count since world creation= Current day is @1.= -[<delay_in_seconds> | -1] [reconnect] [<message>]= -Shutdown server (-1 cancels a delayed shutdown)= +[<delay_in_seconds> | -1] [-r] [<message>]= +Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)= Server shutting down (operator request).= Ban the IP of a player or show the ban list= The ban list is empty.= |