Fix the /shutdown command (#7431)

This commit is contained in:
SmallJoker 2018-06-11 13:43:12 +02:00 committed by Loïc Blot
parent fb4e4f048e
commit 409d04324f
2 changed files with 15 additions and 11 deletions

@ -827,13 +827,15 @@ core.register_chatcommand("shutdown", {
description = "Shutdown server (-1 cancels a delayed shutdown)", description = "Shutdown server (-1 cancels a delayed shutdown)",
privs = {server=true}, privs = {server=true},
func = function(name, param) func = function(name, param)
local delay, reconnect, message = param:match("([^ ][-]?[0-9]+)([^ ]+)(.*)") local delay, reconnect, message
message = message or "" delay, param = param:match("^%s*(%S+)(.*)")
if param then
if delay ~= "" then reconnect, param = param:match("^%s*(%S+)(.*)")
end
message = param and param:match("^%s*(.+)") or ""
delay = tonumber(delay) or 0 delay = tonumber(delay) or 0
else
delay = 0 if delay == 0 then
core.log("action", name .. " shuts down server") core.log("action", name .. " shuts down server")
core.chat_send_all("*** Server shutting down (operator request).") core.chat_send_all("*** Server shutting down (operator request).")
end end

@ -3396,10 +3396,6 @@ v3f Server::findSpawnPos()
void Server::requestShutdown(const std::string &msg, bool reconnect, float delay) 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) { if (delay == 0.0f) {
// No delay, shutdown immediately // No delay, shutdown immediately
m_shutdown_requested = true; 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; infostream << wide_to_utf8(ws.str()).c_str() << std::endl;
SendChatMessage(PEER_ID_INEXISTENT, ws.str()); SendChatMessage(PEER_ID_INEXISTENT, ws.str());
// m_shutdown_* are already handled, skip.
return;
} else if (delay > 0.0f) { } else if (delay > 0.0f) {
// Positive delay, tell the clients when the server will shut down // Positive delay, tell the clients when the server will shut down
std::wstringstream ws; std::wstringstream ws;
ws << L"*** Server shutting down in " 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; infostream << wide_to_utf8(ws.str()).c_str() << std::endl;
SendChatMessage(PEER_ID_INEXISTENT, ws.str()); 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) PlayerSAO* Server::emergePlayer(const char *name, session_t peer_id, u16 proto_version)