116 {
118 std::string dbPortOutput;
119
120 {
123 dbPort = (*res)[0].Get<
uint16>();
124
125 if (dbPort)
127 else
129 }
130
132
133 handler->
PSendSysMessage(
"Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, OpenSSL_version(OPENSSL_VERSION));
134 handler->
PSendSysMessage(
"Using Boost version: %i.%i.%i", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100);
136
139
141
142 handler->
PSendSysMessage(
"Worldserver listening connections on port %" PRIu16, worldPort);
144
148
150
151 std::string dataDir =
sWorld->GetDataPath();
152 std::vector<std::string> subDirs;
153 subDirs.emplace_back("maps");
154 if (vmapIndoorCheck || vmapLOSCheck || vmapHeightCheck)
155 {
156 handler->
PSendSysMessage(
"VMAPs status: Enabled. LineOfSight: %i, getHeight: %i, indoorCheck: %i", vmapLOSCheck, vmapHeightCheck, vmapIndoorCheck);
157 subDirs.emplace_back("vmaps");
158 }
159 else
161
162 if (mmapEnabled)
163 {
165 subDirs.emplace_back("mmaps");
166 }
167 else
169
170 for (std::string const& subDir : subDirs)
171 {
172 std::filesystem::path mapPath(dataDir);
173 mapPath /= subDir;
174
175 if (!std::filesystem::exists(mapPath))
176 {
177 handler->
PSendSysMessage(
"%s directory doesn't exist!. Using path: %s", subDir.c_str(), mapPath.generic_string().c_str());
178 continue;
179 }
180
181 auto end = std::filesystem::directory_iterator();
182 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)
183 {
184 if (std::filesystem::is_regular_file(mapFile))
185 val += std::filesystem::file_size(mapFile);
186 return val;
187 });
188
190 }
191
193 uint32 availableLocalesMask = (1 << defaultLocale);
194
196 {
198 if (locale == defaultLocale)
199 continue;
200
201 if (
sWorld->GetAvailableDbcLocale(locale) != defaultLocale)
202 availableLocalesMask |= (1 << locale);
203 }
204
205 std::string availableLocales;
207 {
208 if (!(availableLocalesMask & (1 << i)))
209 continue;
210
213 availableLocales += " ";
214 }
215
216 handler->
PSendSysMessage(
"Default DBC locale: %s.\nAll available DBC locales: %s",
localeNames[defaultLocale], availableLocales.c_str());
217
219
220 std::string lldb = "No updates found!";
222 {
223 Field* fields = resL->Fetch();
224 lldb = fields[0].
Get<std::string>();
225 }
226 std::string lcdb = "No updates found!";
228 {
229 Field* fields = resC->Fetch();
230 lcdb = fields[0].
Get<std::string>();
231 }
232 std::string lwdb = "No updates found!";
234 {
235 Field* fields = resW->Fetch();
236 lwdb = fields[0].
Get<std::string>();
237 }
238
239 handler->
PSendSysMessage(
"Latest LoginDatabase update: %s", lldb.c_str());
240 handler->
PSendSysMessage(
"Latest CharacterDatabase update: %s", lcdb.c_str());
241 handler->
PSendSysMessage(
"Latest WorldDatabase update: %s", lwdb.c_str());
242
246
249 else
251
253 {
255 }
256
257 return true;
258 }
char const * localeNames[TOTAL_LOCALES]
Definition: Common.cpp:20
LocaleConstant
Definition: Common.h:67
@ TOTAL_LOCALES
Definition: Common.h:78
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:215
@ CONFIG_ENABLE_MMAPS
Definition: IWorld.h:146
@ CONFIG_VMAP_INDOOR_CHECK
Definition: IWorld.h:128
Realm realm
Definition: World.cpp:112
std::string StringFormatFmt(FormatString< Args... > fmt, Args &&... args)
Definition: StringFormat.h:48
std::string StringFormat(Format &&fmt, Args &&... args)
Default AC string format function.
Definition: StringFormat.h:30
AC_COMMON_API char const * GetMySQLExecutable()
Definition: GitRevision.cpp:61
AC_COMMON_API char const * GetCMakeVersion()
Definition: GitRevision.cpp:41
AC_COMMON_API char const * GetHostOSVersion()
Definition: GitRevision.cpp:46
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
Class used to access individual fields of database query result.
Definition: Field.h:99
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition: Field.h:113
void PSendSysMessage(char const *fmt, Args &&... args)
Definition: Chat.h:60
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition: Chat.cpp:101
uint32 Realm
Definition: Realm.h:42
RealmHandle Id
Definition: Realm.h:68