93{
94
95 LOG_INFO(
"server.loading",
"Loading Guilds Definitions...");
96 {
98
99 CharacterDatabase.DirectExecute(
"DELETE g FROM guild g LEFT JOIN guild_member gm ON g.guildid = gm.guildid WHERE gm.guildid IS NULL");
100
101
102 QueryResult result =
CharacterDatabase.Query(
"SELECT g.guildid, g.name, g.leaderguid, g.EmblemStyle, g.EmblemColor, g.BorderStyle, g.BorderColor, "
103
104 "g.BackgroundColor, g.info, g.motd, g.createdate, g.BankMoney, COUNT(gbt.guildid) "
105 "FROM guild g LEFT JOIN guild_bank_tab gbt ON g.guildid = gbt.guildid GROUP BY g.guildid ORDER BY g.guildid ASC");
106
107 if (!result)
108 {
109 LOG_WARN(
"server.loading",
">> Loaded 0 guild definitions. DB table `guild` is empty.");
111 }
112 else
113 {
115 do
116 {
117 Field* fields = result->Fetch();
119
121 {
122 delete guild;
123 continue;
124 }
125
127
128 ++count;
129 } while (result->NextRow());
130
133 }
134 }
135
136
137 LOG_INFO(
"server.loading",
"Loading Guild Ranks...");
138 {
140
141
142 CharacterDatabase.DirectExecute(
"DELETE gr FROM guild_rank gr LEFT JOIN guild g ON gr.guildId = g.guildId WHERE g.guildId IS NULL");
143
144
145 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, rid, rname, rights, BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC");
146
147 if (!result)
148 {
149 LOG_WARN(
"server.loading",
">> Loaded 0 guild ranks. DB table `guild_rank` is empty.");
151 }
152 else
153 {
155 do
156 {
157 Field* fields = result->Fetch();
159
162
163 ++count;
164 } while (result->NextRow());
165
168 }
169 }
170
171
172 LOG_INFO(
"server.loading",
"Loading Guild Members...");
173 {
175
176
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");
179
180
181 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, gm.guid, `rank`, pnote, offnote, w.tab0, w.tab1, w.tab2, w.tab3, w.tab4, w.tab5, "
182
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");
187
188 if (!result)
189 {
190 LOG_WARN(
"server.loading",
">> Loaded 0 guild members. DB table `guild_member` is empty.");
192 }
193 else
194 {
196
197 do
198 {
199 Field* fields = result->Fetch();
201
204
205 ++count;
206 } while (result->NextRow());
207
210 }
211 }
212
213
214 LOG_INFO(
"server.loading",
"Loading Bank Tab Rights...");
215 {
217
218
219 CharacterDatabase.DirectExecute(
"DELETE gbr FROM guild_bank_right gbr LEFT JOIN guild g ON gbr.guildId = g.guildId WHERE g.guildId IS NULL");
220
221
222 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, TabId, rid, gbright, SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC");
223
224 if (!result)
225 {
226 LOG_WARN(
"server.loading",
">> Loaded 0 guild bank tab rights. DB table `guild_bank_right` is empty.");
228 }
229 else
230 {
232 do
233 {
234 Field* fields = result->Fetch();
236
239
240 ++count;
241 } while (result->NextRow());
242
245 }
246 }
247
248
249 LOG_INFO(
"server.loading",
"Loading Guild Event Logs...");
250 {
252
254
255
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 LOG_WARN(
"server.loading",
">> Loaded 0 guild event logs. DB table `guild_eventlog` is empty.");
262 }
263 else
264 {
266 do
267 {
268 Field* fields = result->Fetch();
270
273
274 ++count;
275 } while (result->NextRow());
276
279 }
280 }
281
282
283 LOG_INFO(
"server.loading",
"Loading Guild Bank Event Logs...");
284 {
286
287
289
290
291 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, TabId, LogGuid, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp FROM guild_bank_eventlog ORDER BY TimeStamp DESC, LogGuid DESC");
292
293 if (!result)
294 {
295 LOG_WARN(
"server.loading",
">> Loaded 0 guild bank event logs. DB table `guild_bank_eventlog` is empty.");
297 }
298 else
299 {
301 do
302 {
303 Field* fields = result->Fetch();
305
308
309 ++count;
310 } while (result->NextRow());
311
314 }
315 }
316
317
318 LOG_INFO(
"server.loading",
"Loading Guild Bank Tabs...");
319 {
321
322
323 CharacterDatabase.DirectExecute(
"DELETE gbt FROM guild_bank_tab gbt LEFT JOIN guild g ON gbt.guildId = g.guildId WHERE g.guildId IS NULL");
324
325
326 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, TabId, TabName, TabIcon, TabText FROM guild_bank_tab ORDER BY guildid ASC, TabId ASC");
327
328 if (!result)
329 {
330 LOG_WARN(
"server.loading",
">> Loaded 0 guild bank tabs. DB table `guild_bank_tab` is empty.");
332 }
333 else
334 {
336 do
337 {
338 Field* fields = result->Fetch();
340
343
344 ++count;
345 } while (result->NextRow());
346
349 }
350 }
351
352
353 LOG_INFO(
"server.loading",
"Filling bank tabs with items...");
354 {
356
357
358 CharacterDatabase.DirectExecute(
"DELETE gbi FROM guild_bank_item gbi LEFT JOIN guild g ON gbi.guildId = g.guildId WHERE g.guildId IS NULL");
359
360
361 QueryResult result =
CharacterDatabase.Query(
"SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, "
362
363 "guildid, TabId, SlotId, item_guid, itemEntry FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid");
364
365 if (!result)
366 {
367 LOG_WARN(
"server.loading",
">> Loaded 0 guild bank tab items. DB table `guild_bank_item` or `item_instance` is empty.");
369 }
370 else
371 {
373 do
374 {
375 Field* fields = result->Fetch();
377
380
381 ++count;
382 } while (result->NextRow());
383
386 }
387 }
388
389
390 LOG_INFO(
"server.loading",
"Validating data of loaded guilds...");
391 {
393
395 {
396 Guild* guild = itr->second;
397 ++itr;
399 delete guild;
400 }
401
404 }
405}
std::shared_ptr< ResultSet > QueryResult
Definition DatabaseEnvFwd.h:27
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
std::uint32_t uint32
Definition Define.h:107
@ CONFIG_GUILD_EVENT_LOG_COUNT
Definition IWorld.h:350
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT
Definition IWorld.h:351
#define LOG_INFO(filterType__,...)
Definition Log.h:165
#define LOG_WARN(filterType__,...)
Definition Log.h:161
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:131
uint32 getMSTime()
Definition Timer.h:103
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
void AddGuild(Guild *guild)
Definition GuildMgr.cpp:36
void LoadBankRightFromDB(Field *fields)
Definition Guild.cpp:1958
bool LoadMemberFromDB(Field *fields)
Definition Guild.cpp:1934
bool LoadBankItemFromDB(Field *fields)
Definition Guild.cpp:2032
bool LoadFromDB(Field *fields)
Definition Guild.cpp:1903
bool LoadEventLogFromDB(Field *fields)
Definition Guild.cpp:1966
bool LoadBankEventLogFromDB(Field *fields)
Definition Guild.cpp:1983
void LoadBankTabFromDB(Field *fields)
Definition Guild.cpp:2023
bool Validate()
Definition Guild.cpp:2045
void LoadRankFromDB(Field *fields)
Definition Guild.cpp:1925
#define sWorld
Definition World.h:363