From 409d04324f0a81eaa78ff9161b4f3593d89151c5 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Mon, 11 Jun 2018 13:43:12 +0200 Subject: [PATCH] Fix the /shutdown command (#7431) --- builtin/game/chatcommands.lua | 14 ++++++++------ src/server.cpp | 12 +++++++----- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index 3b701c1fd..31ce4359f 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -827,13 +827,15 @@ core.register_chatcommand("shutdown", { description = "Shutdown server (-1 cancels a delayed shutdown)", privs = {server=true}, func = function(name, param) - local delay, reconnect, message = param:match("([^ ][-]?[0-9]+)([^ ]+)(.*)") - message = message or "" + local delay, reconnect, message + delay, param = param:match("^%s*(%S+)(.*)") + if param then + reconnect, param = param:match("^%s*(%S+)(.*)") + end + message = param and param:match("^%s*(.+)") or "" + delay = tonumber(delay) or 0 - if delay ~= "" then - delay = tonumber(delay) or 0 - else - delay = 0 + if delay == 0 then core.log("action", name .. " shuts down server") core.chat_send_all("*** Server shutting down (operator request).") end diff --git a/src/server.cpp b/src/server.cpp index d47b4ecd0..13a3b4552 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3396,10 +3396,6 @@ v3f Server::findSpawnPos() void Server::requestShutdown(const std::string &msg, bool reconnect, float delay) { - m_shutdown_timer = delay; - m_shutdown_msg = msg; - m_shutdown_ask_reconnect = reconnect; - if (delay == 0.0f) { // No delay, shutdown immediately m_shutdown_requested = true; @@ -3418,17 +3414,23 @@ void Server::requestShutdown(const std::string &msg, bool reconnect, float delay infostream << wide_to_utf8(ws.str()).c_str() << std::endl; SendChatMessage(PEER_ID_INEXISTENT, ws.str()); + // m_shutdown_* are already handled, skip. + return; } else if (delay > 0.0f) { // Positive delay, tell the clients when the server will shut down std::wstringstream ws; ws << L"*** Server shutting down in " - << duration_to_string(myround(m_shutdown_timer)).c_str() + << duration_to_string(myround(delay)).c_str() << "."; infostream << wide_to_utf8(ws.str()).c_str() << std::endl; SendChatMessage(PEER_ID_INEXISTENT, ws.str()); } + + m_shutdown_timer = delay; + m_shutdown_msg = msg; + m_shutdown_ask_reconnect = reconnect; } PlayerSAO* Server::emergePlayer(const char *name, session_t peer_id, u16 proto_version)