31 itr->second->SaveToDB();
38 SF_LOG_ERROR(
"guild",
"Guild ids overflow!! Can't continue, shutting down server. ");
47 GuildContainer::const_iterator itr =
GuildStore.find(guildId);
67 std::string search = guildName;
68 std::transform(search.begin(), search.end(), search.begin(), ::toupper);
71 std::string gname = itr->second->GetName();
72 std::transform(gname.begin(), gname.end(), gname.begin(), ::toupper);
82 return guild->GetName();
90 if (itr->second->GetLeaderGUID() == guid)
106 SF_LOG_INFO(
"server.loading",
"Loading guilds definitions...");
111 QueryResult result =
CharacterDatabase.Query(
"SELECT g.guildid, g.name, g.leaderguid, g.EmblemStyle, g.EmblemColor, g.BorderStyle, g.BorderColor, "
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");
118 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild definitions. DB table `guild` is empty.");
126 Field* fields = result->Fetch();
138 }
while (result->NextRow());
145 SF_LOG_INFO(
"server.loading",
"Loading guild ranks...");
150 CharacterDatabase.DirectExecute(
"DELETE gr FROM guild_rank gr LEFT JOIN guild g ON gr.guildId = g.guildId WHERE g.guildId IS NULL");
153 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, rid, rname, rights, BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC");
157 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild ranks. DB table `guild_rank` is empty.");
164 Field* fields = result->Fetch();
168 guild->LoadRankFromDB(fields);
171 }
while (result->NextRow());
178 SF_LOG_INFO(
"server.loading",
"Loading guild members...");
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");
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, "
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");
195 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild members. DB table `guild_member` is empty.");
202 Field* fields = result->Fetch();
206 guild->LoadMemberFromDB(fields);
209 }
while (result->NextRow());
216 SF_LOG_INFO(
"server.loading",
"Loading bank tab rights...");
221 CharacterDatabase.DirectExecute(
"DELETE gbr FROM guild_bank_right gbr LEFT JOIN guild g ON gbr.guildId = g.guildId WHERE g.guildId IS NULL");
224 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, TabId, rid, gbright, SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC");
228 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild bank tab rights. DB table `guild_bank_right` is empty.");
235 Field* fields = result->Fetch();
239 guild->LoadBankRightFromDB(fields);
242 }
while (result->NextRow());
249 SF_LOG_INFO(
"server.loading",
"Loading guild event logs...");
256 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp FROM guild_eventlog ORDER BY TimeStamp DESC, LogGuid DESC");
260 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild event logs. DB table `guild_eventlog` is empty.");
267 Field* fields = result->Fetch();
271 guild->LoadEventLogFromDB(fields);
274 }
while (result->NextRow());
281 SF_LOG_INFO(
"server.loading",
"Loading guild bank event logs...");
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");
293 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild bank event logs. DB table `guild_bank_eventlog` is empty.");
300 Field* fields = result->Fetch();
304 guild->LoadBankEventLogFromDB(fields);
307 }
while (result->NextRow());
314 SF_LOG_INFO(
"server.loading",
"Loading Guild News...");
321 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, LogGuid, EventType, PlayerGuid, Flags, Value, Timestamp FROM guild_newslog ORDER BY TimeStamp DESC, LogGuid DESC");
324 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild event logs. DB table `guild_newslog` is empty.");
330 Field* fields = result->Fetch();
334 guild->LoadGuildNewsLogFromDB(fields);
337 }
while (result->NextRow());
344 SF_LOG_INFO(
"server.loading",
"Loading guild bank tabs...");
349 CharacterDatabase.DirectExecute(
"DELETE gbt FROM guild_bank_tab gbt LEFT JOIN guild g ON gbt.guildId = g.guildId WHERE g.guildId IS NULL");
352 QueryResult result =
CharacterDatabase.Query(
"SELECT guildid, TabId, TabName, TabIcon, TabText FROM guild_bank_tab ORDER BY guildid ASC, TabId ASC");
356 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild bank tabs. DB table `guild_bank_tab` is empty.");
363 Field* fields = result->Fetch();
367 guild->LoadBankTabFromDB(fields);
370 }
while (result->NextRow());
377 SF_LOG_INFO(
"guild",
"Filling bank tabs with 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");
385 QueryResult result =
CharacterDatabase.Query(
"SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, "
387 "guildid, TabId, SlotId, item_guid, itemEntry FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid");
391 SF_LOG_INFO(
"server.loading",
">> Loaded 0 guild bank tab items. DB table `guild_bank_item` or `item_instance` is empty.");
398 Field* fields = result->Fetch();
402 guild->LoadBankItemFromDB(fields);
405 }
while (result->NextRow());
424 itr->second->GetAchievementMgr().LoadFromDB(achievementResult, criteriaResult);
429 SF_LOG_INFO(
"misc",
"Validating data of loaded guilds...");
435 Guild* guild = itr->second;
458 SF_LOG_ERROR(
"server.loading",
">> Loaded 0 xp for guild level definitions. DB table `guild_xp_for_level` is empty.");
466 Field* fields = result->Fetch();
473 SF_LOG_INFO(
"misc",
"Unused (> Guild.MaxLevel in worldserver.conf) level %u in `guild_xp_for_level` table, ignoring.",
uint32(level));
479 }
while (result->NextRow());
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);
499 QueryResult result =
WorldDatabase.Query(
"SELECT entry, standing, racemask, price, achievements FROM guild_rewards");
503 SF_LOG_ERROR(
"server.loading",
">> Loaded 0 guild reward definitions. DB table `guild_rewards` is empty.");
512 Field* fields = result->Fetch();
517 char const* achivements = fields[4].
GetCString();
519 if (strlen(achivements))
525 uint32 achivementId = atoi(*iter);
529 SF_LOG_ERROR(
"server.loading",
"Guild rewards constains not existing achievement entry %u", achivementId);
539 SF_LOG_ERROR(
"server.loading",
"Guild rewards constains not existing item entry %u", reward.
Entry);
551 }
while (result->NextRow());
562 if (
Guild* guild = itr->second)
563 guild->ResetTimes(week);
@ CHAR_SEL_GUILD_ACHIEVEMENT
@ CHAR_UPD_GUILD_RESET_TODAY_EXPERIENCE
@ CHAR_DEL_GUILD_MEMBER_WITHDRAW
@ CHAR_SEL_GUILD_ACHIEVEMENT_CRITERIA
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
uint32 GUID_LOPART(uint64 x)
bool IS_GUILD_GUID(uint64 guid)
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
Skyfire::AutoPtr< ResultSet, Skyfire::Mutex > QueryResult
#define MAX_REPUTATION_RANK
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
char const * GetCString() const
bool LoadFromDB(Field *fields)
Guild * GetGuildById(uint32 guildId) const
GuildContainer GuildStore
Guild * GetGuildByName(std::string const &guildName) const
void ResetTimes(bool week)
std::vector< GuildReward > GuildRewards
void RemoveGuild(uint32 guildId)
void AddGuild(Guild *guild)
uint32 GetXPForGuildLevel(uint8 level) const
Guild * GetGuildByGuid(uint64 guid) const
Guild * GetGuildByLeader(uint64 guid) const
std::string GetGuildNameById(uint32 guildId) const
std::vector< uint64 > GuildXPperLevel
void LoadGuildXpForLevel()
void setUInt32(const uint8 index, const uint32 value)
StorageType::const_iterator const_iterator
const_iterator end() const
const_iterator begin() const
static void StopNow(uint8 exitcode)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
WorldDatabaseWorkerPool WorldDatabase
Accessor to the world database.
@ CONFIG_GUILD_EVENT_LOG_COUNT
@ CONFIG_GUILD_NEWS_LOG_COUNT
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT
std::vector< uint32 > Achievements