TrinityCore
Loading...
Searching...
No Matches
GuildMgr.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "GuildMgr.h"
19#include "AchievementMgr.h"
20#include "DB2Stores.h"
21#include "DatabaseEnv.h"
22#include "Guild.h"
23#include "Log.h"
24#include "ObjectMgr.h"
25#include "Util.h"
26#include "World.h"
27#include <advstd.h>
28
29GuildMgr::GuildMgr() : NextGuildId(UI64LIT(1))
30{
31}
32
33GuildMgr::~GuildMgr() = default;
34
36{
38 ptr.reset(guild);
39 guild->SetWeakPtr(ptr);
40}
41
43{
44 GuildStore.erase(guildId);
45}
46
48{
49 for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
50 itr->second->SaveToDB();
51}
52
54{
55 if (NextGuildId >= 0xFFFFFFFE)
56 {
57 TC_LOG_ERROR("guild", "Guild ids overflow!! Can't continue, shutting down server. ");
59 }
60 return NextGuildId++;
61}
62
63// Guild collection
65{
66 GuildContainer::const_iterator itr = GuildStore.find(guildId);
67 if (itr != GuildStore.end())
68 return itr->second.get();
69
70 return nullptr;
71}
72
74{
75 // Full guids are only used when receiving/sending data to client
76 // everywhere else guild id is used
77 if (guid.IsGuild())
78 if (ObjectGuid::LowType guildId = guid.GetCounter())
79 return GetGuildById(guildId);
80
81 return nullptr;
82}
83
84Guild* GuildMgr::GetGuildByName(std::string_view guildName) const
85{
86 for (auto const& [id, guild] : GuildStore)
87 if (StringEqualI(guild->GetName(), guildName))
88 return guild.get();
89
90 return nullptr;
91}
92
94{
95 if (Guild* guild = GetGuildById(guildId))
96 return guild->GetName();
97
98 return "";
99}
100
102{
103 static GuildMgr instance;
104 return &instance;
105}
106
108{
109 for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
110 if (itr->second->GetLeaderGUID() == guid)
111 return itr->second.get();
112
113 return nullptr;
114}
115
117{
118 // 1. Load all guilds
119 TC_LOG_INFO("server.loading", "Loading guilds definitions...");
120 {
121 uint32 oldMSTime = getMSTime();
122
123 // 0 1 2 3 4 5 6
124 QueryResult result = CharacterDatabase.Query("SELECT g.guildid, g.name, g.leaderguid, g.EmblemStyle, g.EmblemColor, g.BorderStyle, g.BorderColor, "
125 // 7 8 9 10 11 12
126 "g.BackgroundColor, g.info, g.motd, g.createdate, g.BankMoney, COUNT(gbt.guildid) "
127 "FROM guild g LEFT JOIN guild_bank_tab gbt ON g.guildid = gbt.guildid GROUP BY g.guildid ORDER BY g.guildid ASC");
128
129 if (!result)
130 {
131 TC_LOG_INFO("server.loading", ">> Loaded 0 guild definitions. DB table `guild` is empty.");
132 return;
133 }
134 else
135 {
136 uint32 count = 0;
137 do
138 {
139 Field* fields = result->Fetch();
140 Guild* guild = new Guild();
141
142 if (!guild->LoadFromDB(fields))
143 {
144 delete guild;
145 continue;
146 }
147
148 AddGuild(guild);
149
150 ++count;
151 }
152 while (result->NextRow());
153
154 TC_LOG_INFO("server.loading", ">> Loaded {} guild definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
155 }
156 }
157
158 // 2. Load all guild ranks
159 TC_LOG_INFO("server.loading", "Loading guild ranks...");
160 {
161 uint32 oldMSTime = getMSTime();
162
163 // Delete orphaned guild rank entries before loading the valid ones
164 CharacterDatabase.DirectExecute("DELETE gr FROM guild_rank gr LEFT JOIN guild g ON gr.guildId = g.guildId WHERE g.guildId IS NULL");
165
166 // 0 1 2 3 4 5
167 QueryResult result = CharacterDatabase.Query("SELECT guildid, rid, RankOrder, rname, rights, BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC");
168
169 if (!result)
170 {
171 TC_LOG_INFO("server.loading", ">> Loaded 0 guild ranks. DB table `guild_rank` is empty.");
172 }
173 else
174 {
175 uint32 count = 0;
176 do
177 {
178 Field* fields = result->Fetch();
179 uint64 guildId = fields[0].GetUInt64();
180
181 if (Guild* guild = GetGuildById(guildId))
182 guild->LoadRankFromDB(fields);
183
184 ++count;
185 }
186 while (result->NextRow());
187
188 TC_LOG_INFO("server.loading", ">> Loaded {} guild ranks in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
189 }
190 }
191
192 // 3. Load all guild members
193 TC_LOG_INFO("server.loading", "Loading guild members...");
194 {
195 uint32 oldMSTime = getMSTime();
196
197 // Delete orphaned guild member entries before loading the valid ones
198 CharacterDatabase.DirectExecute("DELETE gm FROM guild_member gm LEFT JOIN guild g ON gm.guildId = g.guildId WHERE g.guildId IS NULL");
199 CharacterDatabase.DirectExecute("DELETE gm FROM guild_member_withdraw gm LEFT JOIN guild_member g ON gm.guid = g.guid WHERE g.guid IS NULL");
200
201 // 0 1 2 3 4 5 6 7 8 9 10
202 QueryResult result = CharacterDatabase.Query("SELECT gm.guildid, gm.guid, `rank`, pnote, offnote, w.tab0, w.tab1, w.tab2, w.tab3, w.tab4, w.tab5, "
203 // 11 12 13 14 15 16 17 18 19 20 21
204 "w.tab6, w.tab7, w.money, c.name, c.level, c.race, c.class, c.gender, c.zone, c.account, c.logout_time "
205 "FROM guild_member gm "
206 "LEFT JOIN guild_member_withdraw w ON gm.guid = w.guid "
207 "LEFT JOIN characters c ON c.guid = gm.guid ORDER BY gm.guildid ASC");
208
209 if (!result)
210 TC_LOG_INFO("server.loading", ">> Loaded 0 guild members. DB table `guild_member` is empty.");
211 else
212 {
213 uint32 count = 0;
214
215 do
216 {
217 Field* fields = result->Fetch();
218 uint64 guildId = fields[0].GetUInt64();
219
220 if (Guild* guild = GetGuildById(guildId))
221 guild->LoadMemberFromDB(fields);
222
223 ++count;
224 }
225 while (result->NextRow());
226
227 TC_LOG_INFO("server.loading", ">> Loaded {} guild members in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
228 }
229 }
230
231 // 4. Load all guild bank tab rights
232 TC_LOG_INFO("server.loading", "Loading bank tab rights...");
233 {
234 uint32 oldMSTime = getMSTime();
235
236 // Delete orphaned guild bank right entries before loading the valid ones
237 CharacterDatabase.DirectExecute("DELETE gbr FROM guild_bank_right gbr LEFT JOIN guild g ON gbr.guildId = g.guildId WHERE g.guildId IS NULL");
238
239 // 0 1 2 3 4
240 QueryResult result = CharacterDatabase.Query("SELECT guildid, TabId, rid, gbright, SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC");
241
242 if (!result)
243 {
244 TC_LOG_INFO("server.loading", ">> Loaded 0 guild bank tab rights. DB table `guild_bank_right` is empty.");
245 }
246 else
247 {
248 uint32 count = 0;
249 do
250 {
251 Field* fields = result->Fetch();
252 uint64 guildId = fields[0].GetUInt64();
253
254 if (Guild* guild = GetGuildById(guildId))
255 guild->LoadBankRightFromDB(fields);
256
257 ++count;
258 }
259 while (result->NextRow());
260
261 TC_LOG_INFO("server.loading", ">> Loaded {} bank tab rights in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
262 }
263 }
264
265 // 5. Load all event logs
266 TC_LOG_INFO("server.loading", "Loading guild event logs...");
267 {
268 uint32 oldMSTime = getMSTime();
269
270 CharacterDatabase.DirectPExecute("DELETE FROM guild_eventlog WHERE LogGuid > {}", sWorld->getIntConfig(CONFIG_GUILD_EVENT_LOG_COUNT));
271
272 // 0 1 2 3 4 5 6
273 QueryResult result = CharacterDatabase.Query("SELECT guildid, LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp FROM guild_eventlog ORDER BY TimeStamp DESC, LogGuid DESC");
274
275 if (!result)
276 {
277 TC_LOG_INFO("server.loading", ">> Loaded 0 guild event logs. DB table `guild_eventlog` is empty.");
278 }
279 else
280 {
281 uint32 count = 0;
282 do
283 {
284 Field* fields = result->Fetch();
285 uint64 guildId = fields[0].GetUInt64();
286
287 if (Guild* guild = GetGuildById(guildId))
288 guild->LoadEventLogFromDB(fields);
289
290 ++count;
291 }
292 while (result->NextRow());
293
294 TC_LOG_INFO("server.loading", ">> Loaded {} guild event logs in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
295 }
296 }
297
298 // 6. Load all bank event logs
299 TC_LOG_INFO("server.loading", "Loading guild bank event logs...");
300 {
301 uint32 oldMSTime = getMSTime();
302
303 // Remove log entries that exceed the number of allowed entries per guild
304 CharacterDatabase.DirectPExecute("DELETE FROM guild_bank_eventlog WHERE LogGuid > {}", sWorld->getIntConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT));
305
306 // 0 1 2 3 4 5 6 7 8
307 QueryResult result = CharacterDatabase.Query("SELECT guildid, TabId, LogGuid, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp FROM guild_bank_eventlog ORDER BY TimeStamp DESC, LogGuid DESC");
308
309 if (!result)
310 {
311 TC_LOG_INFO("server.loading", ">> Loaded 0 guild bank event logs. DB table `guild_bank_eventlog` is empty.");
312 }
313 else
314 {
315 uint32 count = 0;
316 do
317 {
318 Field* fields = result->Fetch();
319 uint64 guildId = fields[0].GetUInt64();
320
321 if (Guild* guild = GetGuildById(guildId))
322 guild->LoadBankEventLogFromDB(fields);
323
324 ++count;
325 }
326 while (result->NextRow());
327
328 TC_LOG_INFO("server.loading", ">> Loaded {} guild bank event logs in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
329 }
330 }
331
332 // 7. Load all news event logs
333 TC_LOG_INFO("server.loading", "Loading Guild News...");
334 {
335 uint32 oldMSTime = getMSTime();
336
337 CharacterDatabase.DirectPExecute("DELETE FROM guild_newslog WHERE LogGuid > {}", sWorld->getIntConfig(CONFIG_GUILD_NEWS_LOG_COUNT));
338
339 // 0 1 2 3 4 5 6
340 QueryResult result = CharacterDatabase.Query("SELECT guildid, LogGuid, EventType, PlayerGuid, Flags, Value, Timestamp FROM guild_newslog ORDER BY TimeStamp DESC, LogGuid DESC");
341
342 if (!result)
343 TC_LOG_INFO("server.loading", ">> Loaded 0 guild event logs. DB table `guild_newslog` is empty.");
344 else
345 {
346 uint32 count = 0;
347 do
348 {
349 Field* fields = result->Fetch();
350 uint64 guildId = fields[0].GetUInt64();
351
352 if (Guild* guild = GetGuildById(guildId))
353 guild->LoadGuildNewsLogFromDB(fields);
354
355 ++count;
356 }
357 while (result->NextRow());
358
359 TC_LOG_INFO("server.loading", ">> Loaded {} guild new logs in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
360 }
361 }
362
363 // 8. Load all guild bank tabs
364 TC_LOG_INFO("server.loading", "Loading guild bank tabs...");
365 {
366 uint32 oldMSTime = getMSTime();
367
368 // Delete orphaned guild bank tab entries before loading the valid ones
369 CharacterDatabase.DirectExecute("DELETE gbt FROM guild_bank_tab gbt LEFT JOIN guild g ON gbt.guildId = g.guildId WHERE g.guildId IS NULL");
370
371 // 0 1 2 3 4
372 QueryResult result = CharacterDatabase.Query("SELECT guildid, TabId, TabName, TabIcon, TabText FROM guild_bank_tab ORDER BY guildid ASC, TabId ASC");
373
374 if (!result)
375 {
376 TC_LOG_INFO("server.loading", ">> Loaded 0 guild bank tabs. DB table `guild_bank_tab` is empty.");
377 }
378 else
379 {
380 uint32 count = 0;
381 do
382 {
383 Field* fields = result->Fetch();
384 uint64 guildId = fields[0].GetUInt64();
385
386 if (Guild* guild = GetGuildById(guildId))
387 guild->LoadBankTabFromDB(fields);
388
389 ++count;
390 }
391 while (result->NextRow());
392
393 TC_LOG_INFO("server.loading", ">> Loaded {} guild bank tabs in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
394 }
395 }
396
397 // 9. Fill all guild bank tabs
398 TC_LOG_INFO("server.loading", "Filling bank tabs with items...");
399 {
400 uint32 oldMSTime = getMSTime();
401
402 // Delete orphan guild bank items
403 CharacterDatabase.DirectExecute("DELETE gbi FROM guild_bank_item gbi LEFT JOIN guild g ON gbi.guildId = g.guildId WHERE g.guildId IS NULL");
404
405 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13
406 // SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, createTime, text,
407 // 14 15 16 17 18 19
408 // battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
409 // 20 21 22 23 24 25
410 // itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4, itemModifiedAppearanceSpec5,
411 // 26 27 28 29 30 31
412 // spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4, spellItemEnchantmentSpec5,
413 // 32 33 34
414 // secondaryItemModifiedAppearanceAllSpecs, secondaryItemModifiedAppearanceSpec1, secondaryItemModifiedAppearanceSpec2,
415 // 35 36 37
416 // secondaryItemModifiedAppearanceSpec3, secondaryItemModifiedAppearanceSpec4, secondaryItemModifiedAppearanceSpec5,
417 // 38 39 40 41 42 43 44 45 46 47 48 49
418 // gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3
419 // 50 51
420 // fixedScalingLevel, artifactKnowledgeLevel
421 // 52 53 54
422 // guildid, TabId, SlotId FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid
423
425 if (!result)
426 {
427 TC_LOG_INFO("server.loading", ">> Loaded 0 guild bank tab items. DB table `guild_bank_item` or `item_instance` is empty.");
428 }
429 else
430 {
431 uint32 count = 0;
432 do
433 {
434 Field* fields = result->Fetch();
435 uint64 guildId = fields[52].GetUInt64();
436
437 if (Guild* guild = GetGuildById(guildId))
438 guild->LoadBankItemFromDB(fields);
439
440 ++count;
441 }
442 while (result->NextRow());
443
444 TC_LOG_INFO("server.loading", ">> Loaded {} guild bank tab items in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
445 }
446 }
447
448 // 10. Load guild achievements
449 TC_LOG_INFO("server.loading", "Loading guild achievements...");
450 {
451 uint32 oldMSTime = getMSTime();
452
453 uint64 achievementCount = 0;
454 uint64 criteriaCount = 0;
455
456 PreparedQueryResult achievementResult;
457 PreparedQueryResult criteriaResult;
458 for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
459 {
461 stmt->setUInt64(0, itr->first);
462 achievementResult = CharacterDatabase.Query(stmt);
463 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_ACHIEVEMENT_CRITERIA);
464 stmt->setUInt64(0, itr->first);
465 criteriaResult = CharacterDatabase.Query(stmt);
466
467 if (achievementResult)
468 achievementCount += achievementResult->GetRowCount();
469 if (criteriaResult)
470 criteriaCount += criteriaResult->GetRowCount();
471
472 itr->second->GetAchievementMgr().LoadFromDB(achievementResult, criteriaResult);
473 }
474
475 TC_LOG_INFO("server.loading", ">> Loaded {} guild achievements and {} criterias in {} ms", achievementCount, criteriaCount, GetMSTimeDiffToNow(oldMSTime));
476 }
477
478 // 11. Validate loaded guild data
479 TC_LOG_INFO("misc", "Validating data of loaded guilds...");
480 {
481 uint32 oldMSTime = getMSTime();
482
483 for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end();)
484 {
485 Guild* guild = itr->second.get();
486 ++itr;
487 if (guild)
488 guild->Validate();
489 }
490
491 TC_LOG_INFO("server.loading", ">> Validated data of loaded guilds in {} ms", GetMSTimeDiffToNow(oldMSTime));
492 }
493}
494
496{
497 uint32 oldMSTime = getMSTime();
498
499 // 0 1 2 3
500 QueryResult result = WorldDatabase.Query("SELECT ItemID, MinGuildRep, RaceMask, Cost FROM guild_rewards");
501
502 if (!result)
503 {
504 TC_LOG_INFO("server.loading", ">> Loaded 0 guild reward definitions. DB table `guild_rewards` is empty.");
505 return;
506 }
507
508 uint32 count = 0;
509
510 do
511 {
512 GuildReward reward;
513 Field* fields = result->Fetch();
514 reward.ItemID = fields[0].GetUInt32();
515 reward.MinGuildRep = fields[1].GetUInt8();
516 reward.RaceMask = { advstd::bit_cast<std::array<int32, 2>>(fields[2].GetUInt64()) };
517 reward.Cost = fields[3].GetUInt64();
518
519 if (!sObjectMgr->GetItemTemplate(reward.ItemID))
520 {
521 TC_LOG_ERROR("sql.sql", "Guild rewards constains not existing item entry {}", reward.ItemID);
522 continue;
523 }
524
525 if (reward.MinGuildRep >= MAX_REPUTATION_RANK)
526 {
527 TC_LOG_ERROR("sql.sql", "Guild rewards contains wrong reputation standing {}, max is {}", uint32(reward.MinGuildRep), MAX_REPUTATION_RANK - 1);
528 continue;
529 }
530
532 stmt->setUInt32(0, reward.ItemID);
533 PreparedQueryResult reqAchievementResult = WorldDatabase.Query(stmt);
534 if (reqAchievementResult)
535 {
536 do
537 {
538 fields = reqAchievementResult->Fetch();
539
540 uint32 requiredAchievementId = fields[0].GetUInt32();
541
542 if (!sAchievementStore.LookupEntry(requiredAchievementId))
543 {
544 TC_LOG_ERROR("sql.sql", "Guild rewards constains not existing achievement entry {}", requiredAchievementId);
545 continue;
546 }
547
548 reward.AchievementsRequired.push_back(requiredAchievementId);
549 } while (reqAchievementResult->NextRow());
550 }
551
552 GuildRewards.push_back(reward);
553 ++count;
554 } while (result->NextRow());
555
556 TC_LOG_INFO("server.loading", ">> Loaded {} guild reward definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
557}
558
559void GuildMgr::ResetTimes(bool week)
560{
562
563 for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
564 if (Guild* guild = itr->second.get())
565 guild->ResetTimes(week);
566}
@ CHAR_SEL_GUILD_BANK_ITEMS
@ CHAR_SEL_GUILD_ACHIEVEMENT
@ CHAR_DEL_GUILD_MEMBER_WITHDRAW
@ CHAR_SEL_GUILD_ACHIEVEMENT_CRITERIA
DB2Storage< AchievementEntry > sAchievementStore("Achievement.db2", &AchievementLoadInfo::Instance)
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
uint64_t uint64
Definition Define.h:153
#define UI64LIT(N)
Definition Define.h:139
uint32_t uint32
Definition Define.h:154
#define TC_LOG_ERROR(filterType__, message__,...)
Definition Log.h:190
#define TC_LOG_INFO(filterType__, message__,...)
Definition Log.h:184
#define sObjectMgr
Definition ObjectMgr.h:1885
#define MAX_REPUTATION_RANK
TC_COMMON_API bool StringEqualI(std::string_view str1, std::string_view str2)
Definition Util.cpp:849
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:57
uint32 getMSTime()
Definition Timer.h:33
@ WORLD_SEL_GUILD_REWARDS_REQ_ACHIEVEMENTS
Class used to access individual fields of database query result.
Definition Field.h:94
uint64 GetUInt64() const noexcept
Definition Field.cpp:71
uint32 GetUInt32() const noexcept
Definition Field.cpp:57
uint8 GetUInt8() const noexcept
Definition Field.cpp:29
std::string GetGuildNameById(ObjectGuid::LowType guildId) const
Definition GuildMgr.cpp:93
GuildContainer GuildStore
Definition GuildMgr.h:72
void ResetTimes(bool week)
Definition GuildMgr.cpp:559
Guild * GetGuildById(ObjectGuid::LowType guildId) const
Definition GuildMgr.cpp:64
std::vector< GuildReward > GuildRewards
Definition GuildMgr.h:73
ObjectGuid::LowType NextGuildId
Definition GuildMgr.h:71
void LoadGuildRewards()
Definition GuildMgr.cpp:495
Guild * GetGuildByLeader(ObjectGuid guid) const
Definition GuildMgr.cpp:107
void AddGuild(Guild *guild)
Definition GuildMgr.cpp:35
ObjectGuid::LowType GenerateGuildId()
Definition GuildMgr.cpp:53
Guild * GetGuildByGuid(ObjectGuid guid) const
Definition GuildMgr.cpp:73
void LoadGuilds()
Definition GuildMgr.cpp:116
void RemoveGuild(ObjectGuid::LowType guildId)
Definition GuildMgr.cpp:42
static GuildMgr * instance()
Definition GuildMgr.cpp:101
Guild * GetGuildByName(std::string_view guildName) const
Definition GuildMgr.cpp:84
void SaveGuilds()
Definition GuildMgr.cpp:47
Definition Guild.h:329
void SetWeakPtr(Trinity::unique_weak_ptr< Guild > weakRef)
Definition Guild.h:879
ObjectGuid::LowType GetId() const
Definition Guild.h:754
bool LoadFromDB(Field *fields)
Definition Guild.cpp:2494
std::string const & GetName() const
Definition Guild.h:757
bool Validate()
Definition Guild.cpp:2659
LowType GetCounter() const
Definition ObjectGuid.h:336
bool IsGuild() const
Definition ObjectGuid.h:379
uint64 LowType
Definition ObjectGuid.h:321
void setUInt32(uint8 index, uint32 value)
void setUInt64(uint8 index, uint64 value)
Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std...
static void StopNow(uint8 exitcode)
Definition World.h:667
#define sWorld
Definition World.h:916
@ CONFIG_GUILD_EVENT_LOG_COUNT
Definition World.h:359
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT
Definition World.h:360
@ CONFIG_GUILD_NEWS_LOG_COUNT
Definition World.h:358
@ ERROR_EXIT_CODE
Definition World.h:76
std::vector< uint32 > AchievementsRequired
Definition Guild.h:257
uint32 ItemID
Definition Guild.h:253
uint8 MinGuildRep
Definition Guild.h:254
Trinity::RaceMask< std::array< int32, 2 > > RaceMask
Definition Guild.h:255
uint64 Cost
Definition Guild.h:256