uint32 BaseGuildManager::DBCreateGuild(const char* name, uint32 leader) { //first try to find a free ID. uint32 new_id = _GetFreeGuildID(); if(new_id == GUILD_NONE) return(GUILD_NONE); //now make the guild record in our local manager. //this also sets up the default ranks for us. _CreateGuild(new_id, name, leader, 0, "", "", "", ""); //now store the resulting guild setup into the DB. if(!_StoreGuildDB(new_id)) { _log(GUILDS__ERROR, "Error storing new guild. It may have been partially created which may need manual removal."); return(GUILD_NONE); } _log(GUILDS__DB, "Created guild %d in the database.", new_id); return(new_id); }
bool BaseGuildManager::LoadGuilds() { ClearGuilds(); if(m_db == nullptr) { _log(GUILDS__DB, "Requested to load guilds when we have no database object."); return(false); } char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; std::map<uint32, GuildInfo *>::iterator res; // load up all the guilds if (!m_db->RunQuery(query, MakeAnyLenString(&query, "SELECT id, name, leader, minstatus, motd, motd_setter,channel,url FROM guilds"), errbuf, &result)) { _log(GUILDS__ERROR, "Error loading guilds '%s': %s", query, errbuf); safe_delete_array(query); return(false); } safe_delete_array(query); while ((row = mysql_fetch_row(result))) { _CreateGuild(atoi(row[0]), row[1], atoi(row[2]), atoi(row[3]), row[4], row[5], row[6], row[7]); } mysql_free_result(result); //load up the rank info for each guild. if (!m_db->RunQuery(query, MakeAnyLenString(&query, "SELECT guild_id,rank,title,can_hear,can_speak,can_invite,can_remove,can_promote,can_demote,can_motd,can_warpeace FROM guild_ranks"), errbuf, &result)) { _log(GUILDS__ERROR, "Error loading guild ranks '%s': %s", query, errbuf); safe_delete_array(query); return(false); } safe_delete_array(query); while ((row = mysql_fetch_row(result))) { uint32 guild_id = atoi(row[0]); uint8 rankn = atoi(row[1]); if(rankn > GUILD_MAX_RANK) { _log(GUILDS__ERROR, "Found invalid (too high) rank %d for guild %d, skipping.", rankn, guild_id); continue; } res = m_guilds.find(guild_id); if(res == m_guilds.end()) { _log(GUILDS__ERROR, "Found rank %d for non-existent guild %d, skipping.", rankn, guild_id); continue; } RankInfo &rank = res->second->ranks[rankn]; rank.name = row[2]; rank.permissions[GUILD_HEAR] = (row[3][0] == '1')?true:false; rank.permissions[GUILD_SPEAK] = (row[4][0] == '1')?true:false; rank.permissions[GUILD_INVITE] = (row[5][0] == '1')?true:false; rank.permissions[GUILD_REMOVE] = (row[6][0] == '1')?true:false; rank.permissions[GUILD_PROMOTE] = (row[7][0] == '1')?true:false; rank.permissions[GUILD_DEMOTE] = (row[8][0] == '1')?true:false; rank.permissions[GUILD_MOTD] = (row[9][0] == '1')?true:false; rank.permissions[GUILD_WARPEACE] = (row[10][0] == '1')?true:false; } mysql_free_result(result); return(true); }
bool BaseGuildManager::LoadGuilds() { ClearGuilds(); if(m_db == nullptr) { Log(Logs::Detail, Logs::Guilds, "Requested to load guilds when we have no database object."); return(false); } std::string query("SELECT id, name, leader, minstatus, motd, motd_setter,channel,url FROM guilds"); std::map<uint32, GuildInfo *>::iterator res; auto results = m_db->QueryDatabase(query); if (!results.Success()) { return false; } for (auto row=results.begin();row!=results.end();++row) _CreateGuild(atoi(row[0]), row[1], atoi(row[2]), atoi(row[3]), row[4], row[5], row[6], row[7]); query = "SELECT guild_id,rank,title,can_hear,can_speak,can_invite,can_remove,can_promote,can_demote,can_motd,can_warpeace FROM guild_ranks"; results = m_db->QueryDatabase(query); if (!results.Success()) { return false; } for (auto row=results.begin();row!=results.end();++row) { uint32 guild_id = atoi(row[0]); uint8 rankn = atoi(row[1]); if(rankn > GUILD_MAX_RANK) { Log(Logs::Detail, Logs::Guilds, "Found invalid (too high) rank %d for guild %d, skipping.", rankn, guild_id); continue; } res = m_guilds.find(guild_id); if(res == m_guilds.end()) { Log(Logs::Detail, Logs::Guilds, "Found rank %d for non-existent guild %d, skipping.", rankn, guild_id); continue; } RankInfo &rank = res->second->ranks[rankn]; rank.name = row[2]; rank.permissions[GUILD_HEAR] = (row[3][0] == '1')?true:false; rank.permissions[GUILD_SPEAK] = (row[4][0] == '1')?true:false; rank.permissions[GUILD_INVITE] = (row[5][0] == '1')?true:false; rank.permissions[GUILD_REMOVE] = (row[6][0] == '1')?true:false; rank.permissions[GUILD_PROMOTE] = (row[7][0] == '1')?true:false; rank.permissions[GUILD_DEMOTE] = (row[8][0] == '1')?true:false; rank.permissions[GUILD_MOTD] = (row[9][0] == '1')?true:false; rank.permissions[GUILD_WARPEACE] = (row[10][0] == '1')?true:false; } return true; }
bool BaseGuildManager::RefreshGuild(uint32 guild_id) { if(m_db == nullptr) { _log(GUILDS__DB, "Requested to refresh guild %d when we have no database object.", guild_id); return(false); } char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; std::map<uint32, GuildInfo *>::iterator res; GuildInfo *info; // load up all the guilds if (!m_db->RunQuery(query, MakeAnyLenString(&query, "SELECT name, leader, minstatus, motd, motd_setter, channel,url FROM guilds WHERE id=%lu", (unsigned long)guild_id), errbuf, &result)) { _log(GUILDS__ERROR, "Error reloading guilds '%s': %s", query, errbuf); safe_delete_array(query); return(false); } safe_delete_array(query); if ((row = mysql_fetch_row(result))) { //delete the old entry and create the new one. info = _CreateGuild(guild_id, row[0], atoi(row[1]), atoi(row[2]), row[3], row[4], row[5], row[6]); } else { _log(GUILDS__ERROR, "Unable to find guild %d in the database.", guild_id); return(false); } mysql_free_result(result); //load up the rank info for each guild. if (!m_db->RunQuery(query, MakeAnyLenString(&query, "SELECT guild_id,rank,title,can_hear,can_speak,can_invite,can_remove,can_promote,can_demote,can_motd,can_warpeace " "FROM guild_ranks WHERE guild_id=%lu", (unsigned long)guild_id), errbuf, &result)) { _log(GUILDS__ERROR, "Error reloading guild ranks '%s': %s", query, errbuf); safe_delete_array(query); return(false); } safe_delete_array(query); while((row = mysql_fetch_row(result))) { uint8 rankn = atoi(row[1]); if(rankn > GUILD_MAX_RANK) { _log(GUILDS__ERROR, "Found invalid (too high) rank %d for guild %d, skipping.", rankn, guild_id); continue; } RankInfo &rank = info->ranks[rankn]; rank.name = row[2]; rank.permissions[GUILD_HEAR] = (row[3][0] == '1')?true:false; rank.permissions[GUILD_SPEAK] = (row[4][0] == '1')?true:false; rank.permissions[GUILD_INVITE] = (row[5][0] == '1')?true:false; rank.permissions[GUILD_REMOVE] = (row[6][0] == '1')?true:false; rank.permissions[GUILD_PROMOTE] = (row[7][0] == '1')?true:false; rank.permissions[GUILD_DEMOTE] = (row[8][0] == '1')?true:false; rank.permissions[GUILD_MOTD] = (row[9][0] == '1')?true:false; rank.permissions[GUILD_WARPEACE] = (row[10][0] == '1')?true:false; } mysql_free_result(result); _log(GUILDS__DB, "Successfully refreshed guild %d from the database.", guild_id); return(true); }
bool BaseGuildManager::RefreshGuild(uint32 guild_id) { if(m_db == nullptr) { Log(Logs::Detail, Logs::Guilds, "Requested to refresh guild %d when we have no database object.", guild_id); return(false); } std::string query = StringFormat("SELECT name, leader, minstatus, motd, motd_setter, channel,url FROM guilds WHERE id=%lu", (unsigned long)guild_id); std::map<uint32, GuildInfo *>::iterator res; GuildInfo *info; // load up all the guilds auto results = m_db->QueryDatabase(query); if (!results.Success()) { return false; } if (results.RowCount() == 0) { Log(Logs::Detail, Logs::Guilds, "Unable to find guild %d in the database.", guild_id); return false; } auto row = results.begin(); info = _CreateGuild(guild_id, row[0], atoi(row[1]), atoi(row[2]), row[3], row[4], row[5], row[6]); query = StringFormat("SELECT guild_id, rank, title, can_hear, can_speak, can_invite, can_remove, can_promote, can_demote, can_motd, can_warpeace " "FROM guild_ranks WHERE guild_id=%lu", (unsigned long)guild_id); results = m_db->QueryDatabase(query); if (!results.Success()) { return false; } for (auto row=results.begin();row!=results.end();++row) { uint8 rankn = atoi(row[1]); if(rankn > GUILD_MAX_RANK) { Log(Logs::Detail, Logs::Guilds, "Found invalid (too high) rank %d for guild %d, skipping.", rankn, guild_id); continue; } RankInfo &rank = info->ranks[rankn]; rank.name = row[2]; rank.permissions[GUILD_HEAR] = (row[3][0] == '1') ? true: false; rank.permissions[GUILD_SPEAK] = (row[4][0] == '1') ? true: false; rank.permissions[GUILD_INVITE] = (row[5][0] == '1') ? true: false; rank.permissions[GUILD_REMOVE] = (row[6][0] == '1') ? true: false; rank.permissions[GUILD_PROMOTE] = (row[7][0] == '1') ? true: false; rank.permissions[GUILD_DEMOTE] = (row[8][0] == '1') ? true: false; rank.permissions[GUILD_MOTD] = (row[9][0] == '1') ? true: false; rank.permissions[GUILD_WARPEACE] = (row[10][0] == '1') ? true: false; } Log(Logs::Detail, Logs::Guilds, "Successfully refreshed guild %d from the database.", guild_id); return true; }