47 TC_LOG_ERROR(
"guild",
"Guild ids overflow!! Can't continue, shutting down server. ");
56 GuildContainer::const_iterator itr =
GuildStore.find(guildId);
58 return itr->second.get();
89 if (itr->second->GetLeaderGUID() == guid)
90 return itr->second.get();
98 TC_LOG_INFO(
"server.loading",
"Loading guilds definitions...");
103 QueryResult result =
CharacterDatabase.Query(
"SELECT g.guildid, g.name, g.leaderguid, g.EmblemStyle, g.EmblemColor, g.BorderStyle, g.BorderColor, "
105 "g.BackgroundColor, g.info, g.motd, g.createdate, g.BankMoney, COUNT(gbt.guildid) "
106 "FROM guild g LEFT JOIN guild_bank_tab gbt ON g.guildid = gbt.guildid GROUP BY g.guildid ORDER BY g.guildid ASC");
110 TC_LOG_INFO(
"server.loading",
">> Loaded 0 guild definitions. DB table `guild` is empty.");
118 Field* fields = result->Fetch();
131 while (result->NextRow());
138 TC_LOG_INFO(
"server.loading",
"Loading guild ranks...");
143 CharacterDatabase.DirectExecute(
"DELETE gr FROM guild_rank gr LEFT JOIN guild g ON gr.guildId = g.guildId WHERE g.guildId IS NULL");
146 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, rid, rname, rights, BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC");
150 TC_LOG_INFO(
"server.loading",
">> Loaded 0 guild ranks. DB table `guild_rank` is empty.");
157 Field* fields = result->Fetch();
161 guild->LoadRankFromDB(fields);
165 while (result->NextRow());
172 TC_LOG_INFO(
"server.loading",
"Loading guild members...");
177 CharacterDatabase.DirectExecute(
"DELETE gm FROM guild_member gm LEFT JOIN guild g ON gm.guildId = g.guildId WHERE g.guildId IS NULL");
178 CharacterDatabase.DirectExecute(
"DELETE gm FROM guild_member_withdraw gm LEFT JOIN guild_member g ON gm.guid = g.guid WHERE g.guid IS NULL");
181 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, gm.guid, `rank` , pnote, offnote, w.tab0, w.tab1, w.tab2, w.tab3, w.tab4, w.tab5, "
183 "w.money, c.name, c.level, c.class, c.gender, c.zone, c.account, c.logout_time "
184 "FROM guild_member gm "
185 "LEFT JOIN guild_member_withdraw w ON gm.guid = w.guid "
186 "LEFT JOIN characters c ON c.guid = gm.guid ORDER BY guildid ASC");
189 TC_LOG_INFO(
"server.loading",
">> Loaded 0 guild members. DB table `guild_member` is empty.");
196 Field* fields = result->Fetch();
200 guild->LoadMemberFromDB(fields);
204 while (result->NextRow());
211 TC_LOG_INFO(
"server.loading",
"Loading bank tab rights...");
216 CharacterDatabase.DirectExecute(
"DELETE gbr FROM guild_bank_right gbr LEFT JOIN guild g ON gbr.guildId = g.guildId WHERE g.guildId IS NULL");
219 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, TabId, rid, gbright, SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC");
223 TC_LOG_INFO(
"server.loading",
">> Loaded 0 guild bank tab rights. DB table `guild_bank_right` is empty.");
230 Field* fields = result->Fetch();
234 guild->LoadBankRightFromDB(fields);
238 while (result->NextRow());
245 TC_LOG_INFO(
"server.loading",
"Loading guild event logs...");
252 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp FROM guild_eventlog ORDER BY TimeStamp DESC, LogGuid DESC");
256 TC_LOG_INFO(
"server.loading",
">> Loaded 0 guild event logs. DB table `guild_eventlog` is empty.");
263 Field* fields = result->Fetch();
267 guild->LoadEventLogFromDB(fields);
271 while (result->NextRow());
278 TC_LOG_INFO(
"server.loading",
"Loading guild bank event logs...");
286 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 TC_LOG_INFO(
"server.loading",
">> Loaded 0 guild bank event logs. DB table `guild_bank_eventlog` is empty.");
297 Field* fields = result->Fetch();
301 guild->LoadBankEventLogFromDB(fields);
305 while (result->NextRow());
312 TC_LOG_INFO(
"server.loading",
"Loading guild bank tabs...");
317 CharacterDatabase.DirectExecute(
"DELETE gbt FROM guild_bank_tab gbt LEFT JOIN guild g ON gbt.guildId = g.guildId WHERE g.guildId IS NULL");
320 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, TabId, TabName, TabIcon, TabText FROM guild_bank_tab ORDER BY guildid ASC, TabId ASC");
324 TC_LOG_INFO(
"server.loading",
">> Loaded 0 guild bank tabs. DB table `guild_bank_tab` is empty.");
331 Field* fields = result->Fetch();
335 guild->LoadBankTabFromDB(fields);
339 while (result->NextRow());
346 TC_LOG_INFO(
"guild",
"Filling bank tabs with items...");
351 CharacterDatabase.DirectExecute(
"DELETE gbi FROM guild_bank_item gbi LEFT JOIN guild g ON gbi.guildId = g.guildId WHERE g.guildId IS NULL");
354 QueryResult result =
CharacterDatabase.Query(
"SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, "
356 "guildid, TabId, SlotId, item_guid, itemEntry FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid");
360 TC_LOG_INFO(
"server.loading",
">> Loaded 0 guild bank tab items. DB table `guild_bank_item` or `item_instance` is empty.");
367 Field* fields = result->Fetch();
371 guild->LoadBankItemFromDB(fields);
375 while (result->NextRow());
382 TC_LOG_INFO(
"guild",
"Validating data of loaded guilds...");
388 Guild* guild = itr->second.get();
401 if (
Guild* guild = itr->second.get())
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
bool StringEqualI(std::string_view a, std::string_view b)
Class used to access individual fields of database query result.
std::string GetGuildNameById(ObjectGuid::LowType guildId) const
GuildContainer GuildStore
Guild * GetGuildById(ObjectGuid::LowType guildId) const
ObjectGuid::LowType NextGuildId
Guild * GetGuildByLeader(ObjectGuid guid) const
void AddGuild(Guild *guild)
ObjectGuid::LowType GenerateGuildId()
void RemoveGuild(ObjectGuid::LowType guildId)
static GuildMgr * instance()
Guild * GetGuildByName(std::string_view guildName) const
void SetWeakPtr(Trinity::unique_weak_ptr< Guild > weakRef)
ObjectGuid::LowType GetId() const
bool LoadFromDB(Field *fields)
std::string const & GetName() const
Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std...
static void StopNow(uint8 exitcode)
@ CONFIG_GUILD_EVENT_LOG_COUNT
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT