32 static std::vector<ChatCommand> serverIdleRestartCommandTable =
38 static std::vector<ChatCommand> serverIdleShutdownCommandTable =
44 static std::vector<ChatCommand> serverRestartCommandTable =
51 static std::vector<ChatCommand> serverShutdownCommandTable =
57 static std::vector<ChatCommand> serverMetricsCommandTable =
63 static std::vector<ChatCommand> serverSetCommandTable =
71 static std::vector<ChatCommand> serverCommandTable =
87 static std::vector<ChatCommand> commandTable =
103 std::vector<std::string> runtimeMetrics =
105 for (std::vector<std::string>::const_iterator itr = runtimeMetrics.begin(); itr != runtimeMetrics.end(); ++itr)
110 ", rejected " UI64FMTD ", backlog %u, high-water %u, high-water events " UI64FMTD,
125 sMapMgr->GetMapUpdater()->ResetExecutorMetrics();
134 uint32 activeClientsNum =
sWorld->GetActiveSessionCount();
135 uint32 queuedClientsNum =
sWorld->GetQueuedSessionCount();
136 uint32 maxActiveClientsNum =
sWorld->GetMaxActiveSessionCount();
137 uint32 maxQueuedClientsNum =
sWorld->GetMaxQueuedSessionCount();
145 handler->
PSendSysMessage(
"Open Source Emulation https://www.projectskyfire.org");
147 handler->
PSendSysMessage(
"revision: %s", SKYFIRE_VER_PRODUCTVERSION_STR);
157 if (
sWorld->IsShuttingDown())
181 char* paramStr = strtok((
char*)args,
" ");
185 int32 limit = strlen(paramStr);
187 if (strncmp(paramStr,
"player", limit) == 0)
189 else if (strncmp(paramStr,
"moderator", limit) == 0)
191 else if (strncmp(paramStr,
"gamemaster", limit) == 0)
193 else if (strncmp(paramStr,
"administrator", limit) == 0)
195 else if (strncmp(paramStr,
"reset", limit) == 0)
197 sWorld->SetPlayerAmountLimit(
sConfigMgr->GetIntDefault(
"PlayerLimit", 100));
198 sWorld->LoadDBAllowedSecurityLevel();
202 int32 value = atoi(paramStr);
210 uint32 playerAmountLimit =
sWorld->GetPlayerAmountLimit();
212 char const* secName =
"";
213 switch (allowedAccountType)
219 secName =
"Moderator";
222 secName =
"Gamemaster";
225 secName =
"Administrator";
228 secName =
"<unknown>";
231 handler->
PSendSysMessage(
"Player limits: amount %u, min. security level %s.", playerAmountLimit, secName);
248 char* timeStr = strtok((
char*)args,
" ");
249 char* exitCodeStr = strtok(NULL,
"");
251 int32 time = atoi(timeStr);
254 if ((time == 0 && (timeStr[0] !=
'0' || timeStr[1] !=
'\0')) || time < 0)
259 int32 exitCode = atoi(exitCodeStr);
262 if (exitCode == 0 && (exitCodeStr[0] !=
'0' || exitCodeStr[1] !=
'\0'))
268 if (exitCode < 0 || exitCode > 125)
271 sWorld->ShutdownServ(time, 0, exitCode);
284 char* timeStr = strtok((
char*)args,
" ");
285 char* exitCodeStr = strtok(NULL,
"");
287 int32 time = atoi(timeStr);
290 if ((time == 0 && (timeStr[0] !=
'0' || timeStr[1] !=
'\0')) || time < 0)
295 int32 exitCode = atoi(exitCodeStr);
298 if (exitCode == 0 && (exitCodeStr[0] !=
'0' || exitCodeStr[1] !=
'\0'))
304 if (exitCode < 0 || exitCode > 125)
320 char* timeStr = strtok((
char*)args,
" ");
321 char* exitCodeStr = strtok(NULL,
"");
329 int32 exitCode = atoi(exitCodeStr);
332 if (exitCode == 0 && (exitCodeStr[0] !=
'0' || exitCodeStr[1] !=
'\0'))
338 if (exitCode < 0 || exitCode > 125)
354 char* timeStr = strtok((
char*)args,
" ");
355 char* exitCodeStr = strtok(NULL,
"");
357 int32 time = atoi(timeStr);
360 if ((time == 0 && (timeStr[0] !=
'0' || timeStr[1] !=
'\0')) || time < 0)
365 int32 exitCode = atoi(exitCodeStr);
368 if (exitCode == 0 && (exitCodeStr[0] !=
'0' || exitCodeStr[1] !=
'\0'))
374 if (exitCode < 0 || exitCode > 125)
389 char* timeStr = strtok((
char*)args,
" ");
390 char* exitCodeStr = strtok(NULL,
"");
392 int32 time = atoi(timeStr);
395 if ((time == 0 && (timeStr[0] !=
'0' || timeStr[1] !=
'\0')) || time < 0)
400 int32 exitCode = atoi(exitCodeStr);
403 if (exitCode == 0 && (exitCodeStr[0] !=
'0' || exitCodeStr[1] !=
'\0'))
409 if (exitCode < 0 || exitCode > 125)
439 if (strncmp(args,
"on", 3) == 0)
445 else if (strncmp(args,
"off", 4) == 0)
463 char* type = strtok((
char*)args,
" ");
464 char* name = strtok(NULL,
" ");
465 char* level = strtok(NULL,
" ");
467 if (!type || !name || !level || *name ==
'\0' || *level ==
'\0' || (*type !=
'a' && *type !=
'l'))
470 sLog->SetLogLevel(name, level, *type ==
'l');
480 char* newTimeStr = strtok((
char*)args,
" ");
484 int32 newTime = atoi(newTimeStr);
488 sWorld->SetRecordDiffInterval(newTime);
489 printf(
"Record diff every %u ms\n", newTime);
std::string secsToTimeString(uint64 timeInSecs, bool shortText, bool hoursOnly)
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
void SetSentErrorMessage(bool val)
virtual void SendSysMessage(const char *str)
CommandScript(const char *name)
static void StopNow(uint8 exitcode)
static bool HandleServerShutDownCommand(ChatHandler *, char const *args)
static bool HandleServerUptimeCommand(ChatHandler *handler, char const *)
static bool HandleServerMetricsCommand(ChatHandler *handler, char const *)
static bool HandleServerIdleRestartCommand(ChatHandler *, char const *args)
std::vector< ChatCommand > GetCommands() const OVERRIDE
static bool HandleServerMetricsResetCommand(ChatHandler *handler, char const *)
static bool HandleServerSetDiffTimeCommand(ChatHandler *, char const *args)
static bool HandleServerSetMotdCommand(ChatHandler *handler, char const *args)
static bool HandleServerExitCommand(ChatHandler *handler, char const *)
static bool HandleServerCorpsesCommand(ChatHandler *, char const *)
static bool HandleServerSetLogLevelCommand(ChatHandler *, char const *args)
static void SendRuntimeMetrics(ChatHandler *handler)
static bool HandleServerPLimitCommand(ChatHandler *handler, char const *args)
static bool HandleServerRestartTimeCommand(ChatHandler *, char const *args)
static bool HandleServerMotdCommand(ChatHandler *handler, char const *)
static bool HandleServerSetClosedCommand(ChatHandler *handler, char const *args)
static bool HandleServerInfoCommand(ChatHandler *handler, char const *)
static bool HandleServerIdleShutDownCommand(ChatHandler *, char const *args)
static bool HandleServerRestartCommand(ChatHandler *, char const *args)
static bool HandleServerShutDownCancelCommand(ChatHandler *, char const *)
void AddSC_server_commandscript()
RuntimeMetrics & GetRuntimeMetrics()
std::vector< std::string > FormatRuntimeMetricLines(RuntimeMetricsSnapshot const &snapshot)
bool CalculateRestartDelay(char const *text, uint32 currentSecondsOfDay, uint32 &delaySeconds)
bool GetProcessMemoryUsage(ProcessMemoryUsage &usage)
bool GetSystemMemoryUsage(SystemMemoryUsage &usage)
std::string FormatMemoryUsageSummary(ProcessMemoryUsage const &processUsage, SystemMemoryUsage const &systemUsage)
@ RBAC_PERM_COMMAND_SERVER_SHUTDOWN
@ RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL
@ RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL
@ RBAC_PERM_COMMAND_SERVER_SET
@ RBAC_PERM_COMMAND_SERVER_EXIT
@ RBAC_PERM_COMMAND_SERVER_RESTART
@ RBAC_PERM_COMMAND_SERVER_PLIMIT
@ RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL
@ RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME
@ RBAC_PERM_COMMAND_SERVER_UPTIME
@ RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL
@ RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL
@ RBAC_PERM_COMMAND_SERVER
@ RBAC_PERM_COMMAND_SERVER_MOTD
@ RBAC_PERM_COMMAND_SERVER_SET_CLOSED
@ RBAC_PERM_COMMAND_SERVER_SET_MOTD
@ RBAC_PERM_COMMAND_SERVER_INFO
@ RBAC_PERM_COMMAND_SERVER_IDLERESTART
@ RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN
@ RBAC_PERM_COMMAND_SERVER_CORPSES
uint64 BacklogHighWaterEvents