void Guild::LoadGuildFromDB(uint32 GuildId) { std::stringstream query, ss; query << "SELECT * FROM `guilds` where guildId= " << GuildId; QueryResult *result = sDatabase.Query( query.str().c_str() ); if(!result) return; Field *fields = result->Fetch(); Id = fields[0].GetUInt32(); name = fields[1].GetString(); leaderGuid = fields[2].GetUInt64(); EmblemStyle = fields[3].GetUInt32(); EmblemColor = fields[4].GetUInt32(); BorderStyle = fields[5].GetUInt32(); BorderColor = fields[6].GetUInt32(); BackgroundColor = fields[7].GetUInt32(); MOTD = fields[8].GetString(); delete result; ss << "SELECT DATE_FORMAT(createdate,\"%d\") FROM guilds where guildId= " << GuildId; result = sDatabase.Query( ss.str().c_str() ); if(!result) return; fields = result->Fetch(); CreatedDay = fields[0].GetUInt32(); delete result; ss.rdbuf()->str(""); ss << "SELECT DATE_FORMAT(createdate,\"%M\") FROM guilds where guildId= " << GuildId; result = sDatabase.Query( ss.str().c_str() ); if(!result) return; fields = result->Fetch(); CreatedMonth = fields[0].GetUInt32(); delete result; ss.rdbuf()->str(""); ss << "SELECT DATE_FORMAT(createdate,\"%Y\") FROM guilds where guildId= " << GuildId; result = sDatabase.Query( ss.str().c_str() ); if(!result) return; fields = result->Fetch(); CreatedYear = fields[0].GetUInt32(); delete result; LoadRanksFromDB(GuildId); LoadMembersFromDB(GuildId); }
bool Guild::LoadGuildFromDB(uint32 GuildId) { //set m_Id in case guild data are broken in DB and Guild will be Disbanded (deleted from DB) m_Id = GuildId; if (!LoadRanksFromDB(GuildId)) return false; if (!LoadMembersFromDB(GuildId)) return false; // 0 1 2 3 4 5 QueryResult *result = CharacterDatabase.PQuery("SELECT name, leaderguid, EmblemStyle, EmblemColor, BorderStyle, BorderColor," // 6 7 8 9 "BackgroundColor, info, motd, createdate FROM guild WHERE guildid = '%u'", GuildId); if (!result) return false; Field *fields = result->Fetch(); m_Name = fields[0].GetCppString(); m_LeaderGuid = MAKE_NEW_GUID(fields[1].GetUInt32(), 0, HIGHGUID_PLAYER); m_EmblemStyle = fields[2].GetUInt32(); m_EmblemColor = fields[3].GetUInt32(); m_BorderStyle = fields[4].GetUInt32(); m_BorderColor = fields[5].GetUInt32(); m_BackgroundColor = fields[6].GetUInt32(); GINFO = fields[7].GetCppString(); MOTD = fields[8].GetCppString(); time_t time = fields[9].GetUInt64(); delete result; if (time > 0) { tm local = *(localtime(&time)); // dereference and assign m_CreatedDay = local.tm_mday; m_CreatedMonth = local.tm_mon + 1; m_CreatedYear = local.tm_year + 1900; } // Repair the structure of guild // If the guildmaster doesn't exist or isn't the member of guild // attempt to promote another member int32 GM_rights = GetRank(GUID_LOPART(m_LeaderGuid)); if (GM_rights == -1) { DelMember(m_LeaderGuid); // check no members case (disbanded) if (members.empty()) return false; } else if (GM_rights != GR_GUILDMASTER) SetLeader(m_LeaderGuid); // Allow only 1 guildmaster for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { if (itr->second.RankId == GR_GUILDMASTER && GUID_LOPART(m_LeaderGuid) != itr->first) //set right of member to officer ChangeRank(itr->first, GR_OFFICER); } sLog.outDebug("Guild %u Creation time Loaded day: %u, month: %u, year: %u", GuildId, m_CreatedDay, m_CreatedMonth, m_CreatedYear); return true; }
bool Guild::LoadGuildFromDB(uint32 GuildId) { if(!LoadRanksFromDB(GuildId)) return false; if(!LoadMembersFromDB(GuildId)) return false; QueryResult *result = CharacterDatabase.PQuery("SELECT MAX(TabId) FROM guild_bank_tab WHERE guildid='%u'", GuildId); if(result) { Field *fields = result->Fetch(); purchased_tabs = fields[0].GetUInt8()+1; // Because TabId begins at 0 delete result; } else purchased_tabs = 0; LoadBankRightsFromDB(GuildId); // Must be after LoadRanksFromDB because it populates rank struct // 0 1 2 3 4 5 6 result = CharacterDatabase.PQuery("SELECT guildid, name, leaderguid, EmblemStyle, EmblemColor, BorderStyle, BorderColor," // 7 8 9 10 11 "BackgroundColor, info, motd, createdate, BankMoney FROM guild WHERE guildid = '%u'", GuildId); if(!result) return false; Field *fields = result->Fetch(); Id = fields[0].GetUInt32(); name = fields[1].GetCppString(); leaderGuid = MAKE_NEW_GUID(fields[2].GetUInt32(), 0, HIGHGUID_PLAYER); EmblemStyle = fields[3].GetUInt32(); EmblemColor = fields[4].GetUInt32(); BorderStyle = fields[5].GetUInt32(); BorderColor = fields[6].GetUInt32(); BackgroundColor = fields[7].GetUInt32(); GINFO = fields[8].GetCppString(); MOTD = fields[9].GetCppString(); uint64 time = fields[10].GetUInt64(); //datetime is uint64 type ... YYYYmmdd:hh:mm:ss guildbank_money = fields[11].GetUInt64(); delete result; uint64 dTime = time /1000000; CreatedDay = dTime%100; CreatedMonth = (dTime/100)%100; CreatedYear = (dTime/10000)%10000; // If the leader does not exist attempt to promote another member if(!objmgr.GetPlayerAccountIdByGUID(leaderGuid )) { DelMember(leaderGuid); // check no members case (disbanded) if(members.empty()) return false; } sLog.outDebug("Guild %u Creation time Loaded day: %u, month: %u, year: %u", GuildId, CreatedDay, CreatedMonth, CreatedYear); m_bankloaded = false; m_eventlogloaded = false; m_onlinemembers = 0; RenumBankLogs(); RenumGuildEventlog(); return true; }