Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
GuildMgr.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "Common.h"
7#include "GuildMgr.h"
8
11
13{
14 for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
15 delete itr->second;
16}
17
19{
20 GuildStore[guild->GetId()] = guild;
21}
22
24{
25 GuildStore.erase(guildId);
26}
27
29{
30 for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
31 itr->second->SaveToDB();
32}
33
35{
36 if (NextGuildId >= 0xFFFFFFFE)
37 {
38 SF_LOG_ERROR("guild", "Guild ids overflow!! Can't continue, shutting down server. ");
40 }
41 return NextGuildId++;
42}
43
44// Guild collection
46{
47 GuildContainer::const_iterator itr = GuildStore.find(guildId);
48 if (itr != GuildStore.end())
49 return itr->second;
50
51 return NULL;
52}
53
55{
56 // Full guids are only used when receiving/sending data to client
57 // everywhere else guild id is used
58 if (IS_GUILD_GUID(guid))
59 if (uint32 guildId = GUID_LOPART(guid))
60 return GetGuildById(guildId);
61
62 return NULL;
63}
64
65Guild* GuildMgr::GetGuildByName(const std::string& guildName) const
66{
67 std::string search = guildName;
68 std::transform(search.begin(), search.end(), search.begin(), ::toupper);
69 for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
70 {
71 std::string gname = itr->second->GetName();
72 std::transform(gname.begin(), gname.end(), gname.begin(), ::toupper);
73 if (search == gname)
74 return itr->second;
75 }
76 return NULL;
77}
78
79std::string GuildMgr::GetGuildNameById(uint32 guildId) const
80{
81 if (Guild* guild = GetGuildById(guildId))
82 return guild->GetName();
83
84 return "";
85}
86
88{
89 for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
90 if (itr->second->GetLeaderGUID() == guid)
91 return itr->second;
92
93 return NULL;
94}
95
97{
98 if (level < GuildXPperLevel.size())
99 return GuildXPperLevel[level];
100 return 0;
101}
102
104{
105 // 1. Load all guilds
106 SF_LOG_INFO("server.loading", "Loading guilds definitions...");
107 {
108 uint32 oldMSTime = getMSTime();
109
110 // 0 1 2 3 4 5 6
111 QueryResult result = CharacterDatabase.Query("SELECT g.guildid, g.name, g.leaderguid, g.EmblemStyle, g.EmblemColor, g.BorderStyle, g.BorderColor, "
112 // 7 8 9 10 11 12 13 14 15
113 "g.BackgroundColor, g.info, g.motd, g.createdate, g.BankMoney, g.level, g.experience, g.todayExperience, COUNT(gbt.guildid) "
114 "FROM guild g LEFT JOIN guild_bank_tab gbt ON g.guildid = gbt.guildid GROUP BY g.guildid ORDER BY g.guildid ASC");
115
116 if (!result)
117 {
118 SF_LOG_INFO("server.loading", ">> Loaded 0 guild definitions. DB table `guild` is empty.");
119 return;
120 }
121 else
122 {
123 uint32 count = 0;
124 do
125 {
126 Field* fields = result->Fetch();
127 Guild* guild = new Guild();
128
129 if (!guild->LoadFromDB(fields))
130 {
131 delete guild;
132 continue;
133 }
134
135 AddGuild(guild);
136
137 ++count;
138 } while (result->NextRow());
139
140 SF_LOG_INFO("server.loading", ">> Loaded %u guild definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
141 }
142 }
143
144 // 2. Load all guild ranks
145 SF_LOG_INFO("server.loading", "Loading guild ranks...");
146 {
147 uint32 oldMSTime = getMSTime();
148
149 // Delete orphaned guild rank entries before loading the valid ones
150 CharacterDatabase.DirectExecute("DELETE gr FROM guild_rank gr LEFT JOIN guild g ON gr.guildId = g.guildId WHERE g.guildId IS NULL");
151
152 // 0 1 2 3 4
153 QueryResult result = CharacterDatabase.Query("SELECT guildid, rid, rname, rights, BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC");
154
155 if (!result)
156 {
157 SF_LOG_INFO("server.loading", ">> Loaded 0 guild ranks. DB table `guild_rank` is empty.");
158 }
159 else
160 {
161 uint32 count = 0;
162 do
163 {
164 Field* fields = result->Fetch();
165 uint32 guildId = fields[0].GetUInt32();
166
167 if (Guild* guild = GetGuildById(guildId))
168 guild->LoadRankFromDB(fields);
169
170 ++count;
171 } while (result->NextRow());
172
173 SF_LOG_INFO("server.loading", ">> Loaded %u guild ranks in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
174 }
175 }
176
177 // 3. Load all guild members
178 SF_LOG_INFO("server.loading", "Loading guild members...");
179 {
180 uint32 oldMSTime = getMSTime();
181
182 // Delete orphaned guild member entries before loading the valid ones
183 CharacterDatabase.DirectExecute("DELETE gm FROM guild_member gm LEFT JOIN guild g ON gm.guildId = g.guildId WHERE g.guildId IS NULL");
184 CharacterDatabase.DirectExecute("DELETE gm FROM guild_member_withdraw gm LEFT JOIN guild_member g ON gm.guid = g.guid WHERE g.guid IS NULL");
185
186 // 0 1 2 3 4 5 6 7 8 9 10
187 QueryResult result = CharacterDatabase.Query("SELECT gm.guildid, gm.guid, member_rank, pnote, offnote, w.tab0, w.tab1, w.tab2, w.tab3, w.tab4, w.tab5, "
188 // 11 12 13 14 15 16 17 18 19 20
189 "w.tab6, w.tab7, w.money, c.name, c.level, c.class, c.zone, c.account, c.logout_time, c.realm "
190 "FROM guild_member gm "
191 "LEFT JOIN guild_member_withdraw w ON gm.guid = w.guid "
192 "LEFT JOIN characters c ON c.guid = gm.guid ORDER BY gm.guildid ASC");
193
194 if (!result)
195 SF_LOG_INFO("server.loading", ">> Loaded 0 guild members. DB table `guild_member` is empty.");
196 else
197 {
198 uint32 count = 0;
199
200 do
201 {
202 Field* fields = result->Fetch();
203 uint32 guildId = fields[0].GetUInt32();
204
205 if (Guild* guild = GetGuildById(guildId))
206 guild->LoadMemberFromDB(fields);
207
208 ++count;
209 } while (result->NextRow());
210
211 SF_LOG_INFO("server.loading", ">> Loaded %u guild members in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
212 }
213 }
214
215 // 4. Load all guild bank tab rights
216 SF_LOG_INFO("server.loading", "Loading bank tab rights...");
217 {
218 uint32 oldMSTime = getMSTime();
219
220 // Delete orphaned guild bank right entries before loading the valid ones
221 CharacterDatabase.DirectExecute("DELETE gbr FROM guild_bank_right gbr LEFT JOIN guild g ON gbr.guildId = g.guildId WHERE g.guildId IS NULL");
222
223 // 0 1 2 3 4
224 QueryResult result = CharacterDatabase.Query("SELECT guildid, TabId, rid, gbright, SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC");
225
226 if (!result)
227 {
228 SF_LOG_INFO("server.loading", ">> Loaded 0 guild bank tab rights. DB table `guild_bank_right` is empty.");
229 }
230 else
231 {
232 uint32 count = 0;
233 do
234 {
235 Field* fields = result->Fetch();
236 uint32 guildId = fields[0].GetUInt32();
237
238 if (Guild* guild = GetGuildById(guildId))
239 guild->LoadBankRightFromDB(fields);
240
241 ++count;
242 } while (result->NextRow());
243
244 SF_LOG_INFO("server.loading", ">> Loaded %u bank tab rights in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
245 }
246 }
247
248 // 5. Load all event logs
249 SF_LOG_INFO("server.loading", "Loading guild event logs...");
250 {
251 uint32 oldMSTime = getMSTime();
252
253 CharacterDatabase.DirectPExecute("DELETE FROM guild_eventlog WHERE LogGuid > %u", sWorld->getIntConfig(WorldIntConfigs::CONFIG_GUILD_EVENT_LOG_COUNT));
254
255 // 0 1 2 3 4 5 6
256 QueryResult result = CharacterDatabase.Query("SELECT guildid, LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp FROM guild_eventlog ORDER BY TimeStamp DESC, LogGuid DESC");
257
258 if (!result)
259 {
260 SF_LOG_INFO("server.loading", ">> Loaded 0 guild event logs. DB table `guild_eventlog` is empty.");
261 }
262 else
263 {
264 uint32 count = 0;
265 do
266 {
267 Field* fields = result->Fetch();
268 uint32 guildId = fields[0].GetUInt32();
269
270 if (Guild* guild = GetGuildById(guildId))
271 guild->LoadEventLogFromDB(fields);
272
273 ++count;
274 } while (result->NextRow());
275
276 SF_LOG_INFO("server.loading", ">> Loaded %u guild event logs in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
277 }
278 }
279
280 // 6. Load all bank event logs
281 SF_LOG_INFO("server.loading", "Loading guild bank event logs...");
282 {
283 uint32 oldMSTime = getMSTime();
284
285 // Remove log entries that exceed the number of allowed entries per guild
286 CharacterDatabase.DirectPExecute("DELETE FROM guild_bank_eventlog WHERE LogGuid > %u", sWorld->getIntConfig(WorldIntConfigs::CONFIG_GUILD_BANK_EVENT_LOG_COUNT));
287
288 // 0 1 2 3 4 5 6 7 8
289 QueryResult result = CharacterDatabase.Query("SELECT guildid, TabId, LogGuid, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp FROM guild_bank_eventlog ORDER BY TimeStamp DESC, LogGuid DESC");
290
291 if (!result)
292 {
293 SF_LOG_INFO("server.loading", ">> Loaded 0 guild bank event logs. DB table `guild_bank_eventlog` is empty.");
294 }
295 else
296 {
297 uint32 count = 0;
298 do
299 {
300 Field* fields = result->Fetch();
301 uint32 guildId = fields[0].GetUInt32();
302
303 if (Guild* guild = GetGuildById(guildId))
304 guild->LoadBankEventLogFromDB(fields);
305
306 ++count;
307 } while (result->NextRow());
308
309 SF_LOG_INFO("server.loading", ">> Loaded %u guild bank event logs in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
310 }
311 }
312
313 // 7. Load all news event logs
314 SF_LOG_INFO("server.loading", "Loading Guild News...");
315 {
316 uint32 oldMSTime = getMSTime();
317
318 CharacterDatabase.DirectPExecute("DELETE FROM guild_newslog WHERE LogGuid > %u", sWorld->getIntConfig(WorldIntConfigs::CONFIG_GUILD_NEWS_LOG_COUNT));
319
320 // 0 1 2 3 4 5 6
321 QueryResult result = CharacterDatabase.Query("SELECT guildid, LogGuid, EventType, PlayerGuid, Flags, Value, Timestamp FROM guild_newslog ORDER BY TimeStamp DESC, LogGuid DESC");
322
323 if (!result)
324 SF_LOG_INFO("server.loading", ">> Loaded 0 guild event logs. DB table `guild_newslog` is empty.");
325 else
326 {
327 uint32 count = 0;
328 do
329 {
330 Field* fields = result->Fetch();
331 uint32 guildId = fields[0].GetUInt32();
332
333 if (Guild* guild = GetGuildById(guildId))
334 guild->LoadGuildNewsLogFromDB(fields);
335
336 ++count;
337 } while (result->NextRow());
338
339 SF_LOG_INFO("server.loading", ">> Loaded %u guild new logs in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
340 }
341 }
342
343 // 8. Load all guild bank tabs
344 SF_LOG_INFO("server.loading", "Loading guild bank tabs...");
345 {
346 uint32 oldMSTime = getMSTime();
347
348 // Delete orphaned guild bank tab entries before loading the valid ones
349 CharacterDatabase.DirectExecute("DELETE gbt FROM guild_bank_tab gbt LEFT JOIN guild g ON gbt.guildId = g.guildId WHERE g.guildId IS NULL");
350
351 // 0 1 2 3 4
352 QueryResult result = CharacterDatabase.Query("SELECT guildid, TabId, TabName, TabIcon, TabText FROM guild_bank_tab ORDER BY guildid ASC, TabId ASC");
353
354 if (!result)
355 {
356 SF_LOG_INFO("server.loading", ">> Loaded 0 guild bank tabs. DB table `guild_bank_tab` is empty.");
357 }
358 else
359 {
360 uint32 count = 0;
361 do
362 {
363 Field* fields = result->Fetch();
364 uint32 guildId = fields[0].GetUInt32();
365
366 if (Guild* guild = GetGuildById(guildId))
367 guild->LoadBankTabFromDB(fields);
368
369 ++count;
370 } while (result->NextRow());
371
372 SF_LOG_INFO("server.loading", ">> Loaded %u guild bank tabs in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
373 }
374 }
375
376 // 9. Fill all guild bank tabs
377 SF_LOG_INFO("guild", "Filling bank tabs with items...");
378 {
379 uint32 oldMSTime = getMSTime();
380
381 // Delete orphan guild bank items
382 CharacterDatabase.DirectExecute("DELETE gbi FROM guild_bank_item gbi LEFT JOIN guild g ON gbi.guildId = g.guildId WHERE g.guildId IS NULL");
383
384 // 0 1 2 3 4 5 6 7 8 9 10
385 QueryResult result = CharacterDatabase.Query("SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, "
386 // 11 12 13 14 15
387 "guildid, TabId, SlotId, item_guid, itemEntry FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid");
388
389 if (!result)
390 {
391 SF_LOG_INFO("server.loading", ">> Loaded 0 guild bank tab items. DB table `guild_bank_item` or `item_instance` is empty.");
392 }
393 else
394 {
395 uint32 count = 0;
396 do
397 {
398 Field* fields = result->Fetch();
399 uint32 guildId = fields[11].GetUInt32();
400
401 if (Guild* guild = GetGuildById(guildId))
402 guild->LoadBankItemFromDB(fields);
403
404 ++count;
405 } while (result->NextRow());
406
407 SF_LOG_INFO("server.loading", ">> Loaded %u guild bank tab items in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
408 }
409 }
410
411 // 10. Load guild achievements
412 {
413 PreparedQueryResult achievementResult;
414 PreparedQueryResult criteriaResult;
415 for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
416 {
418 stmt->setUInt32(0, itr->first);
419 achievementResult = CharacterDatabase.Query(stmt);
420 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_ACHIEVEMENT_CRITERIA);
421 stmt->setUInt32(0, itr->first);
422 criteriaResult = CharacterDatabase.Query(stmt);
423
424 itr->second->GetAchievementMgr().LoadFromDB(achievementResult, criteriaResult);
425 }
426 }
427
428 // 11. Validate loaded guild data
429 SF_LOG_INFO("misc", "Validating data of loaded guilds...");
430 {
431 uint32 oldMSTime = getMSTime();
432
433 for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end();)
434 {
435 Guild* guild = itr->second;
436 ++itr;
437 if (guild && !guild->Validate())
438 delete guild;
439 }
440
441 SF_LOG_INFO("server.loading", ">> Validated data of loaded guilds in %u ms", GetMSTimeDiffToNow(oldMSTime));
442 }
443}
444
446{
447 uint32 oldMSTime = getMSTime();
448
450 for (uint8 level = 0; level < sWorld->getIntConfig(WorldIntConfigs::CONFIG_GUILD_MAX_LEVEL); ++level)
451 GuildXPperLevel[level] = 0;
452
453 // 0 1
454 QueryResult result = WorldDatabase.Query("SELECT lvl, xp_for_next_level FROM guild_xp_for_level");
455
456 if (!result)
457 {
458 SF_LOG_ERROR("server.loading", ">> Loaded 0 xp for guild level definitions. DB table `guild_xp_for_level` is empty.");
459 return;
460 }
461
462 uint32 count = 0;
463
464 do
465 {
466 Field* fields = result->Fetch();
467
468 uint32 level = fields[0].GetUInt8();
469 uint32 requiredXP = fields[1].GetUInt64();
470
471 if (level >= sWorld->getIntConfig(WorldIntConfigs::CONFIG_GUILD_MAX_LEVEL))
472 {
473 SF_LOG_INFO("misc", "Unused (> Guild.MaxLevel in worldserver.conf) level %u in `guild_xp_for_level` table, ignoring.", uint32(level));
474 continue;
475 }
476
477 GuildXPperLevel[level] = requiredXP;
478 ++count;
479 } while (result->NextRow());
480
481 // fill level gaps
482 for (uint8 level = 1; level < sWorld->getIntConfig(WorldIntConfigs::CONFIG_GUILD_MAX_LEVEL); ++level)
483 {
484 if (!GuildXPperLevel[level])
485 {
486 SF_LOG_ERROR("sql.sql", "Level %i does not have XP for guild level data. Using data of level [%i] + 1660000.", level + 1, level);
487 GuildXPperLevel[level] = GuildXPperLevel[level - 1] + 1660000;
488 }
489 }
490
491 SF_LOG_INFO("server.loading", ">> Loaded %u xp for guild level definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
492}
493
495{
496 uint32 oldMSTime = getMSTime();
497
498 // 0 1 2 3 4
499 QueryResult result = WorldDatabase.Query("SELECT entry, standing, racemask, price, achievements FROM guild_rewards");
500
501 if (!result)
502 {
503 SF_LOG_ERROR("server.loading", ">> Loaded 0 guild reward definitions. DB table `guild_rewards` is empty.");
504 return;
505 }
506
507 uint32 count = 0;
508
509 do
510 {
511 GuildReward reward;
512 Field* fields = result->Fetch();
513 reward.Entry = fields[0].GetUInt32();
514 reward.Standing = fields[1].GetUInt8();
515 reward.Racemask = fields[2].GetInt32();
516 reward.Price = fields[3].GetUInt64();
517 char const* achivements = fields[4].GetCString();
518
519 if (strlen(achivements))
520 {
521 Tokenizer tokenizer(achivements, ' ');
522
523 for (Tokenizer::const_iterator iter = tokenizer.begin(); iter != tokenizer.end(); ++iter)
524 {
525 uint32 achivementId = atoi(*iter);
526
527 if (!sAchievementMgr->GetAchievement(achivementId))
528 {
529 SF_LOG_ERROR("server.loading", "Guild rewards constains not existing achievement entry %u", achivementId);
530 continue;
531 }
532
533 reward.Achievements.push_back(achivementId);
534 }
535 }
536
537 if (!sObjectMgr->GetItemTemplate(reward.Entry))
538 {
539 SF_LOG_ERROR("server.loading", "Guild rewards constains not existing item entry %u", reward.Entry);
540 continue;
541 }
542
543 if (reward.Standing >= MAX_REPUTATION_RANK)
544 {
545 SF_LOG_ERROR("server.loading", "Guild rewards contains wrong reputation standing %u, max is %u", uint32(reward.Standing), MAX_REPUTATION_RANK - 1);
546 continue;
547 }
548
549 GuildRewards.push_back(reward);
550 ++count;
551 } while (result->NextRow());
552
553 SF_LOG_INFO("server.loading", ">> Loaded %u guild reward definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
554}
555
556void GuildMgr::ResetTimes(bool week)
557{
560
561 for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
562 if (Guild* guild = itr->second)
563 guild->ResetTimes(week);
564}
#define sAchievementMgr
@ CHAR_SEL_GUILD_ACHIEVEMENT
@ CHAR_UPD_GUILD_RESET_TODAY_EXPERIENCE
@ CHAR_DEL_GUILD_MEMBER_WITHDRAW
@ CHAR_SEL_GUILD_ACHIEVEMENT_CRITERIA
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
#define SF_LOG_INFO(filterType__,...)
Definition Log.h:137
uint32 GUID_LOPART(uint64 x)
bool IS_GUILD_GUID(uint64 guid)
#define sObjectMgr
Definition ObjectMgr.h:1617
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
Definition QueryResult.h:94
Skyfire::AutoPtr< ResultSet, Skyfire::Mutex > QueryResult
Definition QueryResult.h:48
#define MAX_REPUTATION_RANK
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:22
uint32 getMSTime()
Definition Timer.h:12
Definition Field.h:16
uint8 GetUInt8() const
Definition Field.h:26
uint64 GetUInt64() const
Definition Field.h:141
char const * GetCString() const
Definition Field.h:213
uint32 GetUInt32() const
Definition Field.h:105
int32 GetInt32() const
Definition Field.h:123
Definition Guild.h:324
bool LoadFromDB(Field *fields)
Definition Guild.cpp:2506
uint32 GetId() const
Definition Guild.h:757
bool Validate()
Definition Guild.cpp:2657
Guild * GetGuildById(uint32 guildId) const
Definition GuildMgr.cpp:45
GuildContainer GuildStore
Definition GuildMgr.h:48
Guild * GetGuildByName(std::string const &guildName) const
Definition GuildMgr.cpp:65
void ResetTimes(bool week)
Definition GuildMgr.cpp:556
std::vector< GuildReward > GuildRewards
Definition GuildMgr.h:50
void LoadGuildRewards()
Definition GuildMgr.cpp:494
void RemoveGuild(uint32 guildId)
Definition GuildMgr.cpp:23
void AddGuild(Guild *guild)
Definition GuildMgr.cpp:18
uint32 NextGuildId
Definition GuildMgr.h:47
uint32 GenerateGuildId()
Definition GuildMgr.cpp:34
uint32 GetXPForGuildLevel(uint8 level) const
Definition GuildMgr.cpp:96
Guild * GetGuildByGuid(uint64 guid) const
Definition GuildMgr.cpp:54
void LoadGuilds()
Definition GuildMgr.cpp:103
Guild * GetGuildByLeader(uint64 guid) const
Definition GuildMgr.cpp:87
std::string GetGuildNameById(uint32 guildId) const
Definition GuildMgr.cpp:79
std::vector< uint64 > GuildXPperLevel
Definition GuildMgr.h:49
void LoadGuildXpForLevel()
Definition GuildMgr.cpp:445
void SaveGuilds()
Definition GuildMgr.cpp:28
void setUInt32(const uint8 index, const uint32 value)
StorageType::const_iterator const_iterator
Definition Util.h:35
const_iterator end() const
Definition Util.h:44
const_iterator begin() const
Definition Util.h:43
static void StopNow(uint8 exitcode)
Definition World.h:674
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
Definition Main.cpp:41
WorldDatabaseWorkerPool WorldDatabase
Accessor to the world database.
Definition Main.cpp:40
#define sWorld
Definition World.h:910
@ CONFIG_GUILD_EVENT_LOG_COUNT
Definition World.h:316
@ CONFIG_GUILD_NEWS_LOG_COUNT
Definition World.h:315
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT
Definition World.h:317
@ CONFIG_GUILD_MAX_LEVEL
Definition World.h:346
@ ERROR_EXIT_CODE
Definition World.h:65
uint32 Entry
Definition Guild.h:251
uint8 Standing
Definition Guild.h:255
int32 Racemask
Definition Guild.h:252
std::vector< uint32 > Achievements
Definition Guild.h:254
uint64 Price
Definition Guild.h:253