void Guild::FillQueryData(WorldPacket *data) { data->Initialize(SMSG_GUILD_QUERY_RESPONSE); *data << GetGuildId(); *data << GetGuildName(); std::list<RankInfo*>::iterator itr; for (itr = m_rankList.begin(); itr != m_rankList.end();itr++) *data << (*itr)->name; for (uint32 r = m_rankList.size(); r < MAX_GUILD_RANKS;++r) *data << uint8(0); *data << GetGuildEmblemStyle(); *data << GetGuildEmblemColor(); *data << GetGuildBorderStyle(); *data << GetGuildBorderColor(); *data << GetGuildBackgroundColor(); }
bool Guild::LoadFromDB(Field * f) { m_guildId = f[0].GetUInt32(); m_guildName = strdup(f[1].GetString()); m_guildLeader = f[2].GetUInt32(); m_emblemStyle = f[3].GetUInt32(); m_emblemColor = f[4].GetUInt32(); m_borderStyle = f[5].GetUInt32(); m_borderColor = f[6].GetUInt32(); m_backgroundColor = f[7].GetUInt32(); m_guildInfo = strlen(f[8].GetString()) ? strdup(f[8].GetString()) : NULL; m_motd = strlen(f[9].GetString()) ? strdup(f[9].GetString()) : NULL; m_creationTimeStamp = f[10].GetUInt32(); m_bankTabCount = f[11].GetUInt32(); m_bankBalance = f[12].GetUInt32(); // load ranks uint32 j; QueryResult * result = CharacterDatabase.Query("SELECT * FROM guild_ranks WHERE guildId = %u ORDER BY rankId ASC", m_guildId); if(result==NULL) return false; uint32 sid = 0; do { GuildRank * r = new GuildRank; Field * f2 = result->Fetch(); r->iId = f2[1].GetUInt32(); if(r->iId!=sid) { Log.Notice("Guild", "Renaming rank %u of guild %s to %u.", r->iId, m_guildName, sid); CharacterDatabase.Execute("UPDATE guild_ranks SET rankId = %u WHERE guildId = %u AND rankName = \"%s\"", r->iId, m_guildId, CharacterDatabase.EscapeString(string(f2[2].GetString())).c_str()); r->iId=sid; } sid++; r->szRankName = strdup(f2[2].GetString()); r->iRights = f2[3].GetUInt32(); r->iGoldLimitPerDay = f2[4].GetUInt32(); for(j = 0; j < MAX_GUILD_BANK_TABS; ++j) { r->iTabPermissions[j].iFlags = f2[5+(j*2)].GetUInt32(); r->iTabPermissions[j].iStacksPerDay = f2[6+(j*2)].GetUInt32(); } //m_ranks.push_back(r); ASSERT(m_ranks[r->iId] == NULL); m_ranks[r->iId] = r; } while(result->NextRow()); delete result; // load members result = CharacterDatabase.Query("SELECT * FROM guild_data WHERE guildid = %u", m_guildId); if(result==NULL) return false; do { Field * f3 = result->Fetch(); GuildMember * gm = new GuildMember; gm->pPlayer = objmgr.GetPlayerInfo(f3[1].GetUInt32()); if(gm->pPlayer == NULL) { delete gm; continue; } if(f3[2].GetUInt32() >= MAX_GUILD_RANKS || m_ranks[f3[2].GetUInt32()] == NULL) { delete gm; continue; } gm->pRank = m_ranks[f3[2].GetUInt32()]; if(gm->pRank==NULL) gm->pRank=FindLowestRank(); gm->pPlayer->guild=this; gm->pPlayer->guildRank=gm->pRank; gm->pPlayer->guildMember=gm; if(strlen(f3[3].GetString())) gm->szPublicNote = strdup(f3[3].GetString()); else gm->szPublicNote = NULL; if(strlen(f3[4].GetString())) gm->szOfficerNote = strdup(f3[4].GetString()); else gm->szOfficerNote = NULL; gm->uLastWithdrawReset = f3[5].GetUInt32(); gm->uWithdrawlsSinceLastReset = f3[6].GetUInt32(); for(j = 0; j < MAX_GUILD_BANK_TABS; ++j) { gm->uLastItemWithdrawReset[j] = f3[7+(j*2)].GetUInt32(); gm->uItemWithdrawlsSinceLastReset[j] = f3[8+(j*2)].GetUInt32(); } m_members.insert(make_pair(gm->pPlayer, gm)); } while(result->NextRow()); delete result; result = CharacterDatabase.Query("SELECT MAX(log_id) FROM guild_logs WHERE guildid = %u", m_guildId); m_hiLogId = 1; if(result != NULL) { m_hiLogId = result->Fetch()[0].GetUInt32() + 1; delete result; } result = CharacterDatabase.Query("SELECT MAX(log_id) FROM guild_banklogs WHERE guildid = %u", m_guildId); if(result) { if((result->Fetch()[0].GetUInt32() + 1) > m_hiLogId) m_hiLogId = result->Fetch()[0].GetUInt32() + 1; delete result; } // load log result = CharacterDatabase.Query("SELECT * FROM guild_logs WHERE guildid = %u ORDER BY timestamp ASC", m_guildId); if(result) { do { GuildLogEvent * li = new GuildLogEvent; li->iLogId = result->Fetch()[0].GetUInt32(); li->iEvent = result->Fetch()[3].GetUInt32(); li->iTimeStamp = result->Fetch()[2].GetUInt32(); li->iEventData[0] = result->Fetch()[4].GetUInt32(); li->iEventData[1] = result->Fetch()[5].GetUInt32(); li->iEventData[2] = result->Fetch()[6].GetUInt32(); m_log.push_back(li); } while(result->NextRow()); delete result; } result = CharacterDatabase.Query("SELECT * FROM guild_banktabs WHERE guildId = %u ORDER BY tabId ASC", m_guildId); sid = 0; if(result) { do { if((sid++) != result->Fetch()[1].GetUInt32()) { #ifdef WIN32 MessageBox(0, "Guild bank tabs are out of order!", "Internal error", MB_OK); TerminateProcess(GetCurrentProcess(), 0); return false; #else printf("Guild bank tabs are out of order!\n"); exit(0); #endif } QueryResult * res2 = CharacterDatabase.Query("SELECT * FROM guild_bankitems WHERE guildId = %u AND tabId = %u", m_guildId, result->Fetch()[1].GetUInt32()); GuildBankTab * pTab = new GuildBankTab; pTab->iTabId = (uint8)result->Fetch()[1].GetUInt32(); pTab->szTabName = (strlen(result->Fetch()[2].GetString()) > 0) ? strdup(result->Fetch()[2].GetString()) : NULL; pTab->szTabIcon = (strlen(result->Fetch()[3].GetString()) > 0) ? strdup(result->Fetch()[3].GetString()) : NULL; memset(pTab->pSlots, 0, sizeof(Item*) * MAX_GUILD_BANK_SLOTS); if(res2) { do { //Field *itemfields = objmgr.GetCachedItem(res2->Fetch()[3].GetUInt32()); //Item * pItem = (itemfields == NULL) ? NULL : objmgr.LoadItem(itemfields); Item * pItem = objmgr.LoadItem(res2->Fetch()[3].GetUInt64()); if(pItem == NULL) { printf("Deleting guildbank item for invalid item %u (%u)\n", GetGuildId(), res2->Fetch()[3].GetUInt32()); CharacterDatabase.Execute("DELETE FROM guild_bankitems WHERE itemGuid = %u AND guildId = %u AND tabId = %u", res2->Fetch()[3].GetUInt32(), m_guildId, (uint32)pTab->iTabId); continue; } pTab->pSlots[res2->Fetch()[2].GetUInt32()] = pItem; } while (res2->NextRow()); delete res2; } res2 = CharacterDatabase.Query("SELECT * FROM guild_banklogs WHERE guildid = %u AND tabid = %u ORDER BY timestamp ASC", m_guildId, result->Fetch()[1].GetUInt32()); if(res2 != NULL) { do { GuildBankEvent * ev= new GuildBankEvent; ev->iLogId=res2->Fetch()[0].GetUInt32(); ev->iAction=res2->Fetch()[3].GetUInt8(); ev->uPlayer=res2->Fetch()[4].GetUInt32(); ev->uEntry=res2->Fetch()[5].GetUInt32(); ev->iStack=res2->Fetch()[6].GetUInt8(); ev->uTimeStamp=res2->Fetch()[7].GetUInt32(); pTab->lLog.push_back(ev); } while (res2->NextRow()); delete res2; } m_bankTabs.push_back(pTab); } while (result->NextRow()); delete result; } result = CharacterDatabase.Query("SELECT * FROM guild_banklogs WHERE guildid = %u AND tabid = 6 ORDER BY timestamp ASC", m_guildId); if(result != NULL) { do { GuildBankEvent * ev= new GuildBankEvent; ev->iLogId=result->Fetch()[0].GetUInt32(); ev->iAction=result->Fetch()[3].GetUInt8(); ev->uPlayer=result->Fetch()[4].GetUInt32(); ev->uEntry=result->Fetch()[5].GetUInt32(); ev->iStack=result->Fetch()[6].GetUInt8(); ev->uTimeStamp=result->Fetch()[7].GetUInt32(); m_moneyLog.push_back(ev); } while (result->NextRow()); delete result; } Log.Debug("Guild", "Loaded guild %s, %u members.", m_guildName, m_members.size()); return true; }