AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
server_commandscript Class Reference
Inheritance diagram for server_commandscript:
CommandScript ScriptObject

Public Member Functions

 server_commandscript ()
 
ChatCommandTable GetCommands () const override
 
virtual std::vector< Acore::ChatCommands::ChatCommandBuilderGetCommands () const =0
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 

Static Public Member Functions

static bool HandleServerCorpsesCommand (ChatHandler *)
 
static bool HandleServerDebugCommand (ChatHandler *handler)
 
static bool HandleServerInfoCommand (ChatHandler *handler)
 
static bool HandleServerMotdCommand (ChatHandler *handler)
 
static bool HandleServerShutDownCancelCommand (ChatHandler *)
 
static bool HandleServerShutDownCommand (ChatHandler *handler, std::string time, Optional< int32 > exitCode, Tail reason)
 
static bool HandleServerRestartCommand (ChatHandler *handler, std::string time, Optional< int32 > exitCode, Tail reason)
 
static bool HandleServerIdleRestartCommand (ChatHandler *handler, std::string time, Optional< int32 > exitCode, Tail reason)
 
static bool HandleServerIdleShutDownCommand (ChatHandler *handler, std::string time, Optional< int32 > exitCode, Tail reason)
 
static bool HandleServerExitCommand (ChatHandler *handler)
 
static bool HandleServerSetMotdCommand (ChatHandler *handler, std::string realmId, Tail motd)
 
static bool HandleServerSetClosedCommand (ChatHandler *handler, Optional< std::string > args)
 
static bool HandleServerSetLogLevelCommand (ChatHandler *, bool isLogger, std::string const &name, int32 level)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ server_commandscript()

server_commandscript::server_commandscript ( )
inline
51: CommandScript("server_commandscript") { }
Definition: ScriptMgr.h:850

Member Function Documentation

◆ GetCommands()

ChatCommandTable server_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

54 {
55 static ChatCommandTable serverIdleRestartCommandTable =
56 {
57 { "cancel", HandleServerShutDownCancelCommand, SEC_ADMINISTRATOR, Console::Yes },
58 { "", HandleServerIdleRestartCommand, SEC_CONSOLE, Console::Yes }
59 };
60
61 static ChatCommandTable serverIdleShutdownCommandTable =
62 {
63 { "cancel", HandleServerShutDownCancelCommand, SEC_ADMINISTRATOR, Console::Yes },
64 { "", HandleServerIdleShutDownCommand, SEC_CONSOLE, Console::Yes }
65 };
66
67 static ChatCommandTable serverRestartCommandTable =
68 {
69 { "cancel", HandleServerShutDownCancelCommand, SEC_ADMINISTRATOR, Console::Yes },
71 };
72
73 static ChatCommandTable serverShutdownCommandTable =
74 {
75 { "cancel", HandleServerShutDownCancelCommand, SEC_ADMINISTRATOR, Console::Yes },
77 };
78
79 static ChatCommandTable serverSetCommandTable =
80 {
81 { "loglevel", HandleServerSetLogLevelCommand, SEC_CONSOLE, Console::Yes },
82 { "motd", HandleServerSetMotdCommand, SEC_ADMINISTRATOR, Console::Yes },
83 { "closed", HandleServerSetClosedCommand, SEC_CONSOLE, Console::Yes },
84 };
85
86 static ChatCommandTable serverCommandTable =
87 {
88 { "corpses", HandleServerCorpsesCommand, SEC_GAMEMASTER, Console::Yes },
89 { "debug", HandleServerDebugCommand, SEC_ADMINISTRATOR, Console::Yes },
90 { "exit", HandleServerExitCommand, SEC_CONSOLE, Console::Yes },
91 { "idlerestart", serverIdleRestartCommandTable },
92 { "idleshutdown", serverIdleShutdownCommandTable },
93 { "info", HandleServerInfoCommand, SEC_PLAYER, Console::Yes },
94 { "motd", HandleServerMotdCommand, SEC_PLAYER, Console::Yes },
95 { "restart", serverRestartCommandTable },
96 { "shutdown", serverShutdownCommandTable },
97 { "set", serverSetCommandTable }
98 };
99
100 static ChatCommandTable commandTable =
101 {
102 { "server", serverCommandTable }
103 };
104
105 return commandTable;
106 }
@ SEC_PLAYER
Definition: Common.h:66
@ SEC_ADMINISTRATOR
Definition: Common.h:69
@ SEC_GAMEMASTER
Definition: Common.h:68
@ SEC_CONSOLE
Definition: Common.h:70
std::vector< ChatCommandBuilder > ChatCommandTable
Definition: ChatCommand.h:50
static bool HandleServerCorpsesCommand(ChatHandler *)
Definition: cs_server.cpp:109
static bool HandleServerSetLogLevelCommand(ChatHandler *, bool isLogger, std::string const &name, int32 level)
Definition: cs_server.cpp:560
static bool HandleServerSetClosedCommand(ChatHandler *handler, Optional< std::string > args)
Definition: cs_server.cpp:539
static bool HandleServerSetMotdCommand(ChatHandler *handler, std::string realmId, Tail motd)
Definition: cs_server.cpp:501
static bool HandleServerRestartCommand(ChatHandler *handler, std::string time, Optional< int32 > exitCode, Tail reason)
Definition: cs_server.cpp:327
static bool HandleServerShutDownCommand(ChatHandler *handler, std::string time, Optional< int32 > exitCode, Tail reason)
Definition: cs_server.cpp:272
static bool HandleServerInfoCommand(ChatHandler *handler)
Definition: cs_server.cpp:234
static bool HandleServerMotdCommand(ChatHandler *handler)
Definition: cs_server.cpp:259
static bool HandleServerIdleShutDownCommand(ChatHandler *handler, std::string time, Optional< int32 > exitCode, Tail reason)
Definition: cs_server.cpp:437
static bool HandleServerExitCommand(ChatHandler *handler)
Definition: cs_server.cpp:493
static bool HandleServerDebugCommand(ChatHandler *handler)
Definition: cs_server.cpp:115
static bool HandleServerIdleRestartCommand(ChatHandler *handler, std::string time, Optional< int32 > exitCode, Tail reason)
Definition: cs_server.cpp:382
static bool HandleServerShutDownCancelCommand(ChatHandler *)
Definition: cs_server.cpp:265

References HandleServerCorpsesCommand(), HandleServerDebugCommand(), HandleServerExitCommand(), HandleServerIdleRestartCommand(), HandleServerIdleShutDownCommand(), HandleServerInfoCommand(), HandleServerMotdCommand(), HandleServerRestartCommand(), HandleServerSetClosedCommand(), HandleServerSetLogLevelCommand(), HandleServerSetMotdCommand(), HandleServerShutDownCancelCommand(), HandleServerShutDownCommand(), SEC_ADMINISTRATOR, SEC_CONSOLE, SEC_GAMEMASTER, and SEC_PLAYER.

◆ HandleServerCorpsesCommand()

static bool server_commandscript::HandleServerCorpsesCommand ( ChatHandler )
inlinestatic
110 {
111 sWorld->RemoveOldCorpses();
112 return true;
113 }
#define sWorld
Definition: World.h:451

References sWorld.

Referenced by GetCommands().

◆ HandleServerDebugCommand()

static bool server_commandscript::HandleServerDebugCommand ( ChatHandler handler)
inlinestatic
116 {
117 uint16 worldPort = uint16(sWorld->getIntConfig(CONFIG_PORT_WORLD));
118 std::string dbPortOutput;
119
120 {
121 uint16 dbPort = 0;
122 if (QueryResult res = LoginDatabase.Query("SELECT port FROM realmlist WHERE id = {}", realm.Id.Realm))
123 dbPort = (*res)[0].Get<uint16>();
124
125 if (dbPort)
126 dbPortOutput = Acore::StringFormatFmt("Realmlist (Realm Id: {}) configured in port {}", realm.Id.Realm, dbPort);
127 else
128 dbPortOutput = Acore::StringFormat("Realm Id: %u not found in `realmlist` table. Please check your setup", realm.Id.Realm);
129 }
130
132 handler->PSendSysMessage("Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, OpenSSL_version(OPENSSL_VERSION));
133 handler->PSendSysMessage("Using Boost version: %i.%i.%i", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100);
134 handler->PSendSysMessage("Using MySQL version: %u", MySQL::GetLibraryVersion());
135 handler->PSendSysMessage("Using CMake version: %s", GitRevision::GetCMakeVersion());
136
137 handler->PSendSysMessage("Compiled on: %s", GitRevision::GetHostOSVersion());
138
139 handler->PSendSysMessage("Worldserver listening connections on port %" PRIu16, worldPort);
140 handler->PSendSysMessage("%s", dbPortOutput.c_str());
141
142 bool vmapIndoorCheck = sWorld->getBoolConfig(CONFIG_VMAP_INDOOR_CHECK);
145
146 bool mmapEnabled = sWorld->getBoolConfig(CONFIG_ENABLE_MMAPS);
147
148 std::string dataDir = sWorld->GetDataPath();
149 std::vector<std::string> subDirs;
150 subDirs.emplace_back("maps");
151 if (vmapIndoorCheck || vmapLOSCheck || vmapHeightCheck)
152 {
153 handler->PSendSysMessage("VMAPs status: Enabled. LineOfSight: %i, getHeight: %i, indoorCheck: %i", vmapLOSCheck, vmapHeightCheck, vmapIndoorCheck);
154 subDirs.emplace_back("vmaps");
155 }
156 else
157 handler->SendSysMessage("VMAPs status: Disabled");
158
159 if (mmapEnabled)
160 {
161 handler->SendSysMessage("MMAPs status: Enabled");
162 subDirs.emplace_back("mmaps");
163 }
164 else
165 handler->SendSysMessage("MMAPs status: Disabled");
166
167 for (std::string const& subDir : subDirs)
168 {
169 std::filesystem::path mapPath(dataDir);
170 mapPath /= subDir;
171
172 if (!std::filesystem::exists(mapPath))
173 {
174 handler->PSendSysMessage("%s directory doesn't exist!. Using path: %s", subDir.c_str(), mapPath.generic_string().c_str());
175 continue;
176 }
177
178 auto end = std::filesystem::directory_iterator();
179 std::size_t folderSize = std::accumulate(std::filesystem::directory_iterator(mapPath), end, std::size_t(0), [](std::size_t val, std::filesystem::path const& mapFile)
180 {
181 if (std::filesystem::is_regular_file(mapFile))
182 val += std::filesystem::file_size(mapFile);
183 return val;
184 });
185
186 handler->PSendSysMessage(Acore::StringFormatFmt("{} directory located in {}. Total size: {} bytes", subDir.c_str(), mapPath.generic_string().c_str(), folderSize).c_str());
187 }
188
189 LocaleConstant defaultLocale = sWorld->GetDefaultDbcLocale();
190 uint32 availableLocalesMask = (1 << defaultLocale);
191
192 for (uint8 i = 0; i < TOTAL_LOCALES; ++i)
193 {
194 LocaleConstant locale = static_cast<LocaleConstant>(i);
195 if (locale == defaultLocale)
196 continue;
197
198 if (sWorld->GetAvailableDbcLocale(locale) != defaultLocale)
199 availableLocalesMask |= (1 << locale);
200 }
201
202 std::string availableLocales;
203 for (uint8 i = 0; i < TOTAL_LOCALES; ++i)
204 {
205 if (!(availableLocalesMask & (1 << i)))
206 continue;
207
208 availableLocales += localeNames[i];
209 if (i != TOTAL_LOCALES - 1)
210 availableLocales += " ";
211 }
212
213 handler->PSendSysMessage("Using %s DBC Locale as default. All available DBC locales: %s", localeNames[defaultLocale], availableLocales.c_str());
214
215 handler->PSendSysMessage("Using World DB: %s", sWorld->GetDBVersion());
216
217 handler->PSendSysMessage("LoginDatabase queue size: %zu", LoginDatabase.QueueSize());
218 handler->PSendSysMessage("CharacterDatabase queue size: %zu", CharacterDatabase.QueueSize());
219 handler->PSendSysMessage("WorldDatabase queue size: %zu", WorldDatabase.QueueSize());
220
222 handler->SendSysMessage("No modules enabled");
223 else
224 handler->SendSysMessage("> List enable modules:");
225
226 for (auto const& modName : Acore::Module::GetEnableModulesList())
227 {
228 handler->SendSysMessage(Acore::StringFormatFmt("- {}", modName));
229 }
230
231 return true;
232 }
char const * localeNames[TOTAL_LOCALES]
Definition: Common.cpp:20
LocaleConstant
Definition: Common.h:74
@ TOTAL_LOCALES
Definition: Common.h:85
std::uint8_t uint8
Definition: Define.h:110
std::uint32_t uint32
Definition: Define.h:108
std::uint16_t uint16
Definition: Define.h:109
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition: DatabaseEnv.cpp:22
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition: DatabaseEnv.cpp:20
std::shared_ptr< ResultSet > QueryResult
Definition: DatabaseEnvFwd.h:28
@ CONFIG_PORT_WORLD
Definition: IWorld.h:213
@ CONFIG_ENABLE_MMAPS
Definition: IWorld.h:144
@ CONFIG_VMAP_INDOOR_CHECK
Definition: IWorld.h:127
Realm realm
Definition: World.cpp:113
std::string StringFormatFmt(std::string_view fmt, Args &&... args)
Definition: StringFormat.h:44
std::string StringFormat(Format &&fmt, Args &&... args)
Default AC string format function.
Definition: StringFormat.h:29
AC_COMMON_API char const * GetCMakeVersion()
Definition: GitRevision.cpp:29
AC_COMMON_API char const * GetHostOSVersion()
Definition: GitRevision.cpp:34
AC_COMMON_API char const * GetFullVersion()
Definition: GitRevision.cpp:70
AC_DATABASE_API uint32 GetLibraryVersion()
Definition: MySQLThreading.cpp:31
AC_COMMON_API std::vector< std::string_view > GetEnableModulesList()
Definition: ModuleMgr.cpp:31
bool isHeightCalcEnabled() const
Definition: IVMapMgr.h:119
bool isLineOfSightCalcEnabled() const
Definition: IVMapMgr.h:118
static VMapMgr2 * createOrGetVMapMgr()
Definition: VMapFactory.cpp:27
void PSendSysMessage(char const *fmt, Args &&... args)
Definition: Chat.h:60
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition: Chat.cpp:103
uint32 Realm
Definition: Realm.h:42
RealmHandle Id
Definition: Realm.h:68

References CharacterDatabase, CONFIG_ENABLE_MMAPS, CONFIG_PORT_WORLD, CONFIG_VMAP_INDOOR_CHECK, VMAP::VMapFactory::createOrGetVMapMgr(), GitRevision::GetCMakeVersion(), Acore::Module::GetEnableModulesList(), GitRevision::GetFullVersion(), GitRevision::GetHostOSVersion(), MySQL::GetLibraryVersion(), Realm::Id, VMAP::IVMapMgr::isHeightCalcEnabled(), VMAP::IVMapMgr::isLineOfSightCalcEnabled(), localeNames, LoginDatabase, ChatHandler::PSendSysMessage(), realm, RealmHandle::Realm, ChatHandler::SendSysMessage(), Acore::StringFormat(), Acore::StringFormatFmt(), sWorld, TOTAL_LOCALES, and WorldDatabase.

Referenced by GetCommands().

◆ HandleServerExitCommand()

static bool server_commandscript::HandleServerExitCommand ( ChatHandler handler)
inlinestatic
494 {
497 return true;
498 }
@ LANG_COMMAND_EXIT
Definition: Language.h:828
@ SHUTDOWN_EXIT_CODE
Definition: World.h:54
static void StopNow(uint8 exitcode)
Definition: World.h:261

References LANG_COMMAND_EXIT, ChatHandler::SendSysMessage(), SHUTDOWN_EXIT_CODE, and World::StopNow().

Referenced by GetCommands().

◆ HandleServerIdleRestartCommand()

static bool server_commandscript::HandleServerIdleRestartCommand ( ChatHandler handler,
std::string  time,
Optional< int32 exitCode,
Tail  reason 
)
inlinestatic
383 {
384 std::wstring wReason = std::wstring();
385 std::string strReason = std::string();
386
387 if (time.empty())
388 {
389 return false;
390 }
391
392 if (Acore::StringTo<int32>(time).value_or(0) < 0)
393 {
395 handler->SetSentErrorMessage(true);
396 return false;
397 }
398
399 if (!reason.empty())
400 {
401 if (!Utf8toWStr(reason, wReason))
402 {
403 return false;
404 }
405
406 if (!WStrToUtf8(wReason, strReason))
407 {
408 return false;
409 }
410 }
411
412 int32 delay = TimeStringToSecs(time);
413 if (delay <= 0)
414 {
415 delay = Acore::StringTo<int32>(time).value_or(0);
416 }
417
418 if (delay <= 0)
419 {
421 handler->SetSentErrorMessage(true);
422 return false;
423 }
424
425 if (exitCode && *exitCode >= 0 && *exitCode <= 125)
426 {
427 sWorld->ShutdownServ(delay, SHUTDOWN_MASK_RESTART | SHUTDOWN_MASK_IDLE, *exitCode);
428 }
429 else
430 {
431 sWorld->ShutdownServ(delay, SHUTDOWN_MASK_RESTART | SHUTDOWN_MASK_IDLE, RESTART_EXIT_CODE, strReason);
432 }
433
434 return true;
435 }
std::int32_t int32
Definition: Define.h:104
bool WStrToUtf8(wchar_t const *wstr, size_t size, std::string &utf8str)
Definition: Util.cpp:334
uint32 TimeStringToSecs(const std::string &timestring)
Definition: Util.cpp:164
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
Definition: Util.cpp:282
@ LANG_BAD_VALUE
Definition: Language.h:147
@ SHUTDOWN_MASK_RESTART
Definition: World.h:48
@ SHUTDOWN_MASK_IDLE
Definition: World.h:49
@ RESTART_EXIT_CODE
Definition: World.h:56
void SetSentErrorMessage(bool val)
Definition: Chat.h:118

References LANG_BAD_VALUE, RESTART_EXIT_CODE, ChatHandler::SendSysMessage(), ChatHandler::SetSentErrorMessage(), SHUTDOWN_MASK_IDLE, SHUTDOWN_MASK_RESTART, sWorld, TimeStringToSecs(), Utf8toWStr(), and WStrToUtf8().

Referenced by GetCommands().

◆ HandleServerIdleShutDownCommand()

static bool server_commandscript::HandleServerIdleShutDownCommand ( ChatHandler handler,
std::string  time,
Optional< int32 exitCode,
Tail  reason 
)
inlinestatic
438 {
439 std::wstring wReason = std::wstring();
440 std::string strReason = std::string();
441
442 if (time.empty())
443 {
444 return false;
445 }
446
447 if (Acore::StringTo<int32>(time).value_or(0) < 0)
448 {
450 handler->SetSentErrorMessage(true);
451 return false;
452 }
453
454 if (!reason.empty())
455 {
456 if (!Utf8toWStr(reason, wReason))
457 {
458 return false;
459 }
460
461 if (!WStrToUtf8(wReason, strReason))
462 {
463 return false;
464 }
465 }
466
467 int32 delay = TimeStringToSecs(time);
468 if (delay <= 0)
469 {
470 delay = Acore::StringTo<int32>(time).value_or(0);
471 }
472
473 if (delay <= 0)
474 {
476 handler->SetSentErrorMessage(true);
477 return false;
478 }
479
480 if (exitCode && *exitCode >= 0 && *exitCode <= 125)
481 {
482 sWorld->ShutdownServ(delay, SHUTDOWN_MASK_IDLE, *exitCode);
483 }
484 else
485 {
486 sWorld->ShutdownServ(delay, SHUTDOWN_MASK_IDLE, SHUTDOWN_EXIT_CODE, strReason);
487 }
488
489 return true;
490 }

References LANG_BAD_VALUE, ChatHandler::SendSysMessage(), ChatHandler::SetSentErrorMessage(), SHUTDOWN_EXIT_CODE, SHUTDOWN_MASK_IDLE, sWorld, TimeStringToSecs(), Utf8toWStr(), and WStrToUtf8().

Referenced by GetCommands().

◆ HandleServerInfoCommand()

static bool server_commandscript::HandleServerInfoCommand ( ChatHandler handler)
inlinestatic

Can't use sWorld->ShutdownMsg here in case of console command

235 {
236 std::string realmName = sWorld->GetRealmName();
237 uint32 playerCount = sWorld->GetPlayerCount();
238 uint32 activeSessionCount = sWorld->GetActiveSessionCount();
239 uint32 queuedSessionCount = sWorld->GetQueuedSessionCount();
240 uint32 connPeak = sWorld->GetMaxActiveSessionCount();
241
243 if (!queuedSessionCount)
244 handler->PSendSysMessage("Connected players: %u. Characters in world: %u.", activeSessionCount, playerCount);
245 else
246 handler->PSendSysMessage("Connected players: %u. Characters in world: %u. Queue: %u.", activeSessionCount, playerCount, queuedSessionCount);
247
248 handler->PSendSysMessage("Connection peak: %u.", connPeak);
250 handler->PSendSysMessage("Update time diff: %ums, average: %ums.", sWorldUpdateTime.GetLastUpdateTime(), sWorldUpdateTime.GetAverageUpdateTime());
251
253 if (sWorld->IsShuttingDown())
254 handler->PSendSysMessage(LANG_SHUTDOWN_TIMELEFT, secsToTimeString(sWorld->GetShutDownTimeLeft()).append(".").c_str());
255
256 return true;
257 }
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition: Util.cpp:74
@ LANG_UPTIME
Definition: Language.h:45
@ LANG_SHUTDOWN_TIMELEFT
Definition: Language.h:52
WorldUpdateTime sWorldUpdateTime
Definition: UpdateTime.cpp:24
Seconds GetUptime()
Uptime.
Definition: GameTime.cpp:58
uint32 GetAverageUpdateTime() const
Definition: UpdateTime.cpp:38
uint32 GetLastUpdateTime() const
Definition: UpdateTime.cpp:69

References UpdateTime::GetAverageUpdateTime(), GitRevision::GetFullVersion(), UpdateTime::GetLastUpdateTime(), GameTime::GetUptime(), LANG_SHUTDOWN_TIMELEFT, LANG_UPTIME, ChatHandler::PSendSysMessage(), secsToTimeString(), sWorld, and sWorldUpdateTime.

Referenced by GetCommands().

◆ HandleServerMotdCommand()

static bool server_commandscript::HandleServerMotdCommand ( ChatHandler handler)
inlinestatic
260 {
262 return true;
263 }
@ LANG_MOTD_CURRENT
Definition: Language.h:88
char const * GetMotd()
Get the current Message of the Day.
Definition: ServerMotd.cpp:56

References Motd::GetMotd(), LANG_MOTD_CURRENT, and ChatHandler::PSendSysMessage().

Referenced by GetCommands().

◆ HandleServerRestartCommand()

static bool server_commandscript::HandleServerRestartCommand ( ChatHandler handler,
std::string  time,
Optional< int32 exitCode,
Tail  reason 
)
inlinestatic
328 {
329 std::wstring wReason = std::wstring();
330 std::string strReason = std::string();
331
332 if (time.empty())
333 {
334 return false;
335 }
336
337 if (Acore::StringTo<int32>(time).value_or(0) < 0)
338 {
340 handler->SetSentErrorMessage(true);
341 return false;
342 }
343
344 if (!reason.empty())
345 {
346 if (!Utf8toWStr(reason, wReason))
347 {
348 return false;
349 }
350
351 if (!WStrToUtf8(wReason, strReason))
352 {
353 return false;
354 }
355 }
356
357 int32 delay = TimeStringToSecs(time);
358 if (delay <= 0)
359 {
360 delay = Acore::StringTo<int32>(time).value_or(0);
361 }
362
363 if (delay <= 0)
364 {
366 handler->SetSentErrorMessage(true);
367 return false;
368 }
369
370 if (exitCode && *exitCode >= 0 && *exitCode <= 125)
371 {
372 sWorld->ShutdownServ(delay, SHUTDOWN_MASK_RESTART, *exitCode);
373 }
374 else
375 {
376 sWorld->ShutdownServ(delay, SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE, strReason);
377 }
378
379 return true;
380 }

References LANG_BAD_VALUE, RESTART_EXIT_CODE, ChatHandler::SendSysMessage(), ChatHandler::SetSentErrorMessage(), SHUTDOWN_MASK_RESTART, sWorld, TimeStringToSecs(), Utf8toWStr(), and WStrToUtf8().

Referenced by GetCommands().

◆ HandleServerSetClosedCommand()

static bool server_commandscript::HandleServerSetClosedCommand ( ChatHandler handler,
Optional< std::string >  args 
)
inlinestatic
540 {
541 if (StringStartsWith("on", *args))
542 {
544 sWorld->SetClosed(true);
545 return true;
546 }
547 else if (StringStartsWith("off", *args))
548 {
550 sWorld->SetClosed(false);
551 return true;
552 }
553
555 handler->SetSentErrorMessage(true);
556 return false;
557 }
bool StringStartsWith(std::string_view haystack, std::string_view needle)
Definition: Util.h:396
@ LANG_USE_BOL
Definition: Language.h:303
@ LANG_WORLD_CLOSED
Definition: Language.h:1176
@ LANG_WORLD_OPENED
Definition: Language.h:1177

References LANG_USE_BOL, LANG_WORLD_CLOSED, LANG_WORLD_OPENED, ChatHandler::SendSysMessage(), ChatHandler::SetSentErrorMessage(), StringStartsWith(), and sWorld.

Referenced by GetCommands().

◆ HandleServerSetLogLevelCommand()

static bool server_commandscript::HandleServerSetLogLevelCommand ( ChatHandler ,
bool  isLogger,
std::string const &  name,
int32  level 
)
inlinestatic
561 {
562 sLog->SetLogLevel(name, level, isLogger);
563 return true;
564 }
#define sLog
Definition: Log.h:128

References sLog.

Referenced by GetCommands().

◆ HandleServerSetMotdCommand()

static bool server_commandscript::HandleServerSetMotdCommand ( ChatHandler handler,
std::string  realmId,
Tail  motd 
)
inlinestatic
502 {
503 std::wstring wMotd = std::wstring();
504 std::string strMotd = std::string();
505
506 if (realmId.empty())
507 {
508 return false;
509 }
510
511 if (motd.empty())
512 {
513 return false;
514 }
515
516 if (!Utf8toWStr(motd, wMotd))
517 {
518 return false;
519 }
520
521 if (!WStrToUtf8(wMotd, strMotd))
522 {
523 return false;
524 }
525
526 LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction();
527 LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_MOTD);
528 stmt->SetData(0, Acore::StringTo<int32>(realmId).value());
529 stmt->SetData(1, strMotd);
530 trans->Append(stmt);
531 LoginDatabase.CommitTransaction(trans);
532
533 sWorld->LoadMotd();
534 handler->PSendSysMessage(LANG_MOTD_NEW, Acore::StringTo<int32>(realmId).value(), strMotd);
535 return true;
536 }
SQLTransaction< LoginDatabaseConnection > LoginDatabaseTransaction
Definition: DatabaseEnvFwd.h:71
@ LOGIN_REP_MOTD
Definition: LoginDatabase.h:100
@ LANG_MOTD_NEW
Definition: Language.h:863
Definition: PreparedStatement.h:158
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78

References LANG_MOTD_NEW, LOGIN_REP_MOTD, LoginDatabase, ChatHandler::PSendSysMessage(), PreparedStatementBase::SetData(), sWorld, Utf8toWStr(), and WStrToUtf8().

Referenced by GetCommands().

◆ HandleServerShutDownCancelCommand()

static bool server_commandscript::HandleServerShutDownCancelCommand ( ChatHandler )
inlinestatic
266 {
267 sWorld->ShutdownCancel();
268
269 return true;
270 }

References sWorld.

Referenced by GetCommands().

◆ HandleServerShutDownCommand()

static bool server_commandscript::HandleServerShutDownCommand ( ChatHandler handler,
std::string  time,
Optional< int32 exitCode,
Tail  reason 
)
inlinestatic
273 {
274 std::wstring wReason = std::wstring();
275 std::string strReason = std::string();
276
277 if (time.empty())
278 {
279 return false;
280 }
281
282 if (Acore::StringTo<int32>(time).value_or(0) < 0)
283 {
285 handler->SetSentErrorMessage(true);
286 return false;
287 }
288
289 if (!reason.empty())
290 {
291 if (!Utf8toWStr(reason, wReason))
292 {
293 return false;
294 }
295
296 if (!WStrToUtf8(wReason, strReason))
297 {
298 return false;
299 }
300 }
301
302 int32 delay = TimeStringToSecs(time);
303 if (delay <= 0)
304 {
305 delay = Acore::StringTo<int32>(time).value_or(0);
306 }
307
308 if (delay <= 0)
309 {
311 handler->SetSentErrorMessage(true);
312 return false;
313 }
314
315 if (exitCode && *exitCode >= 0 && *exitCode <= 125)
316 {
317 sWorld->ShutdownServ(delay, 0, *exitCode);
318 }
319 else
320 {
321 sWorld->ShutdownServ(delay, 0, SHUTDOWN_EXIT_CODE, strReason);
322 }
323
324 return true;
325 }

References LANG_BAD_VALUE, ChatHandler::SendSysMessage(), ChatHandler::SetSentErrorMessage(), SHUTDOWN_EXIT_CODE, sWorld, TimeStringToSecs(), Utf8toWStr(), and WStrToUtf8().

Referenced by GetCommands().