Scripts/Commands: Some adjustments to make shutdown commands more user-friendly.

- New error message if a shutdown is delayed due to force threshold.
- New status message indicating that a server shutdown was successfully cancelled.
This commit is contained in:
Aokromes
2016-08-07 21:41:10 +02:00
parent ea918e1b69
commit a5a60286fa
4 changed files with 28 additions and 20 deletions

View File

@@ -1215,5 +1215,7 @@ enum TrinityStrings
LANG_INSTANCE_BIND_MISMATCH = 11014,
LANG_CREATURE_NOT_AI_ENABLED = 11015,
LANG_SELECT_PLAYER_OR_PET = 11016,
LANG_SHUTDOWN_DELAYED = 11017,
LANG_SHUTDOWN_CANCELLED = 11018
};
#endif

View File

@@ -2773,25 +2773,27 @@ void World::ShutdownMsg(bool show, Player* player, const std::string& reason)
ServerMessageType msgid = (m_ShutdownMask & SHUTDOWN_MASK_RESTART) ? SERVER_MSG_RESTART_TIME : SERVER_MSG_SHUTDOWN_TIME;
SendServerMessage(msgid, str.c_str(), player);
TC_LOG_DEBUG("misc", "Server is %s in %s", (m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shuttingdown"), str.c_str());
TC_LOG_DEBUG("misc", "Server is %s in %s", (m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shutdown"), str.c_str());
}
}
/// Cancel a planned server shutdown
void World::ShutdownCancel()
uint32 World::ShutdownCancel()
{
// nothing cancel or too later
if (!m_ShutdownTimer || m_stopEvent)
return;
return 0
ServerMessageType msgid = (m_ShutdownMask & SHUTDOWN_MASK_RESTART) ? SERVER_MSG_RESTART_CANCELLED : SERVER_MSG_SHUTDOWN_CANCELLED;
uint32 oldTimer = m_ShutdownTimer;
m_ShutdownMask = 0;
m_ShutdownTimer = 0;
m_ExitCode = SHUTDOWN_EXIT_CODE; // to default value
SendServerMessage(msgid);
TC_LOG_DEBUG("misc", "Server %s cancelled.", (m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shuttingdown"));
TC_LOG_DEBUG("misc", "Server %s cancelled.", (m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shutdown"));
sScriptMgr->OnShutdownCancel();
}

View File

@@ -685,7 +685,7 @@ class World
bool IsShuttingDown() const { return m_ShutdownTimer > 0; }
uint32 GetShutDownTimeLeft() const { return m_ShutdownTimer; }
void ShutdownServ(uint32 time, uint32 options, uint8 exitcode, const std::string& reason = std::string());
void ShutdownCancel();
uint32 ShutdownCancel();
void ShutdownMsg(bool show = false, Player* player = NULL, const std::string& reason = std::string());
static uint8 GetExitCode() { return m_ExitCode; }
static void StopNow(uint8 exitcode) { m_stopEvent = true; m_ExitCode = exitcode; }

View File

@@ -188,9 +188,10 @@ public:
return true;
}
static bool HandleServerShutDownCancelCommand(ChatHandler* /*handler*/, char const* /*args*/)
static bool HandleServerShutDownCancelCommand(ChatHandler* handler, char const* /*args*/)
{
sWorld->ShutdownCancel();
if (uint32 timer = sWorld->ShutdownCancel())
handler->PSendSysMessage(LANG_SHUTDOWN_CANCELLED, timer);
return true;
}
@@ -207,32 +208,32 @@ public:
}
static bool HandleServerShutDownCommand(ChatHandler* handler, char const* args)
{
return ShutdownServer(args, IsOnlyUser(handler->GetSession()) ? SHUTDOWN_MASK_FORCE : 0, SHUTDOWN_EXIT_CODE);
return ShutdownServer(handler, args, 0, SHUTDOWN_EXIT_CODE);
}
static bool HandleServerRestartCommand(ChatHandler* handler, char const* args)
{
return ShutdownServer(args, IsOnlyUser(handler->GetSession()) ? (SHUTDOWN_MASK_FORCE | SHUTDOWN_MASK_RESTART) : SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE);
return ShutdownServer(handler, args, SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE);
}
static bool HandleServerForceShutDownCommand(ChatHandler* /*handler*/, char const* args)
static bool HandleServerForceShutDownCommand(ChatHandler* handler, char const* args)
{
return ShutdownServer(args, SHUTDOWN_MASK_FORCE, SHUTDOWN_EXIT_CODE);
return ShutdownServer(handler, args, SHUTDOWN_MASK_FORCE, SHUTDOWN_EXIT_CODE);
}
static bool HandleServerForceRestartCommand(ChatHandler* /*handler*/, char const* args)
static bool HandleServerForceRestartCommand(ChatHandler* handler, char const* args)
{
return ShutdownServer(args, SHUTDOWN_MASK_FORCE | SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE);
return ShutdownServer(handler, args, SHUTDOWN_MASK_FORCE | SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE);
}
static bool HandleServerIdleShutDownCommand(ChatHandler* /*handler*/, char const* args)
static bool HandleServerIdleShutDownCommand(ChatHandler* handler, char const* args)
{
return ShutdownServer(args, SHUTDOWN_MASK_IDLE, SHUTDOWN_EXIT_CODE);
return ShutdownServer(handler, args, SHUTDOWN_MASK_IDLE, SHUTDOWN_EXIT_CODE);
}
static bool HandleServerIdleRestartCommand(ChatHandler* /*handler*/, char const* args)
static bool HandleServerIdleRestartCommand(ChatHandler* handler, char const* args)
{
return ShutdownServer(args, SHUTDOWN_MASK_RESTART | SHUTDOWN_MASK_IDLE, RESTART_EXIT_CODE);
return ShutdownServer(handler, args, SHUTDOWN_MASK_RESTART | SHUTDOWN_MASK_IDLE, RESTART_EXIT_CODE);
}
// Exit the realm
@@ -327,7 +328,7 @@ private:
return true;
}
static bool ShutdownServer(char const* args, uint32 shutdownMask, int32 defaultExitCode)
static bool ShutdownServer(ChatHandler* handler, char const* args, uint32 shutdownMask, int32 defaultExitCode)
{
if (!*args)
return false;
@@ -382,8 +383,11 @@ private:
return false;
// Override parameter "delay" with the configuration value if there are still players connected and "force" parameter was not specified
if (delay < (int32)sWorld->getIntConfig(CONFIG_FORCE_SHUTDOWN_THRESHOLD) && !(shutdownMask & SHUTDOWN_MASK_FORCE))
delay = (int32)sWorld->getIntConfig(CONFIG_FORCE_SHUTDOWN_THRESHOLD);
if (delay < (int32)sWorld->getIntConfig(CONFIG_FORCE_SHUTDOWN_THRESHOLD) && !(shutdownMask & SHUTDOWN_MASK_FORCE) && !IsOnlyUser(handler->GetSession()))
{
delay = (int32)sWorld->getIntConfig(CONFIG_FORCE_SHUTDOWN_THRESHOLD);
handler->PSendSysMessage(LANG_SHUTDOWN_DELAYED, delay);
}
sWorld->ShutdownServ(delay, shutdownMask, static_cast<uint8>(exitCode), std::string(reason));