mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 00:48:56 +01:00
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.
(cherry picked from commit d760219062)
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
-- insert new delay notice messages for server shutdown commands
|
||||
DELETE FROM `trinity_string` WHERE `entry` IN (11017,11018);
|
||||
INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES
|
||||
(11017,"Server shutdown delayed to %d seconds as other users are still connected. Specify 'force' to override."),
|
||||
(11018,"Server shutdown scheduled for T+%d seconds was successfully cancelled.");
|
||||
@@ -1238,5 +1238,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
|
||||
|
||||
@@ -2935,22 +2935,24 @@ void World::ShutdownMsg(bool show, Player* player, const std::string& reason)
|
||||
}
|
||||
|
||||
/// 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();
|
||||
return oldTimer;
|
||||
}
|
||||
|
||||
/// Send a server message to the user(s)
|
||||
|
||||
@@ -696,7 +696,7 @@ class TC_GAME_API 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; }
|
||||
|
||||
@@ -191,9 +191,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;
|
||||
}
|
||||
@@ -210,32 +211,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
|
||||
@@ -330,7 +331,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;
|
||||
@@ -385,8 +386,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))
|
||||
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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user