void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) { sLog.outDebug("WORLD: Received CMSG_GUILD_LEAVE"); Guild *guild = sObjectMgr.GetGuildById(_player->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if(_player->GetGUID() == guild->GetLeader() && guild->GetMemberSize() > 1) { SendGuildCommandResult(GUILD_QUIT_S, "", ERR_GUILD_LEADER_LEAVE); return; } if(_player->GetGUID() == guild->GetLeader()) { guild->Disband(); return; } guild->DelMember(_player->GetGUID()); // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetGUIDLow(), 0, 0); guild->BroadcastEvent(GE_LEFT, _player->GetGUID(), 1, _player->GetName(), "", ""); SendGuildCommandResult(GUILD_QUIT_S, guild->GetName(), ERR_PLAYER_NO_MORE_IN_GUILD); }
void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_DISBAND"); Guild* guild = sGuildMgr.GetGuildById(GetPlayer()->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (GetPlayer()->GetObjectGuid() != guild->GetLeaderGuid()) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } // do not delete guilds that level are higher than undeletable if (guild->GetMemberSize() == 1 && guild->GetLevel() >= sWorld.getConfig(CONGIG_UINT32_GUILD_UNDELETABLE_LEVEL)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL); return; } guild->Disband(); delete guild; DEBUG_LOG("WORLD: Guild Successfully Disbanded"); }
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_LEAVE"); Guild* guild = sGuildMgr.GetGuildById(_player->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (_player->GetObjectGuid() == guild->GetLeaderGuid() && guild->GetMemberSize() > 1) { SendGuildCommandResult(GUILD_QUIT_S, "", ERR_GUILD_LEADER_LEAVE); return; } // do not delete guilds that level are higher than undeletable if (guild->GetMemberSize() == 1 && guild->GetLevel() >= sWorld.getConfig(CONGIG_UINT32_GUILD_UNDELETABLE_LEVEL)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL); return; } sCalendarMgr.RemoveGuildCalendar(_player->GetObjectGuid(), guild->GetId()); if (_player->GetObjectGuid() == guild->GetLeaderGuid()) { guild->Disband(); delete guild; return; } SendGuildCommandResult(GUILD_QUIT_S, guild->GetName(), ERR_PLAYER_NO_MORE_IN_GUILD); if (guild->DelMember(_player->GetObjectGuid())) { guild->Disband(); delete guild; return; } // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetObjectGuid()); guild->BroadcastEvent(GE_LEFT, _player->GetObjectGuid(), _player->GetName()); }
void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_REMOVE"); std::string plName; recvPacket >> plName; if (!normalizePlayerName(plName)) { return; } Guild* guild = sGuildMgr.GetGuildById(GetPlayer()->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_REMOVE)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } MemberSlot* slot = guild->GetMemberSlot(plName); if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S); return; } if (slot->RankId == GR_GUILDMASTER) { SendGuildCommandResult(GUILD_QUIT_S, "", ERR_GUILD_LEADER_LEAVE); return; } // do not allow to kick player with same or higher rights if (GetPlayer()->GetRank() >= slot->RankId) { SendGuildCommandResult(GUILD_QUIT_S, plName, ERR_GUILD_RANK_TOO_HIGH_S); return; } // possible last member removed, do cleanup, and no need events if (guild->DelMember(slot->guid)) { guild->Disband(); delete guild; return; } // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetObjectGuid(), slot->guid); guild->BroadcastEvent(GE_REMOVED, plName.c_str(), _player->GetName()); }
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_LEAVE"); Guild* guild = sGuildMgr.GetGuildById(_player->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (_player->GetObjectGuid() == guild->GetLeaderGuid() && guild->GetMemberSize() > 1) { SendGuildCommandResult(GUILD_QUIT_S, "", ERR_GUILD_LEADER_LEAVE); return; } if (_player->GetObjectGuid() == guild->GetLeaderGuid()) { guild->Disband(); delete guild; return; } SendGuildCommandResult(GUILD_QUIT_S, guild->GetName(), ERR_PLAYER_NO_MORE_IN_GUILD); if (guild->DelMember(_player->GetObjectGuid())) { guild->Disband(); delete guild; return; } // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetObjectGuid()); guild->BroadcastEvent(GE_LEFT, _player->GetObjectGuid(), _player->GetName()); }
void GuildMgr::LoadGuilds() { Guild *newguild; uint32 count = 0; QueryResultAutoPtr result = RealmDataDatabase.Query("SELECT guildid FROM guild"); if (!result) { BarGoLink bar(1); bar.step(); sLog.outString(); sLog.outString(">> Loaded %u guild definitions", count); return; } BarGoLink bar(result->GetRowCount()); do { Field *fields = result->Fetch(); bar.step(); ++count; newguild = new Guild; if ( !newguild->LoadGuildFromDB( fields[0].GetUInt32() ) ) { newguild->Disband(); delete newguild; continue; } AddGuild(newguild); } while ( result->NextRow( )); result = RealmDataDatabase.Query("SELECT MAX(guildid) FROM guild"); if (result) m_guildId = (*result)[0].GetUInt32()+1; sLog.outString(); sLog.outString(">> Loaded %u guild definitions, next guild ID: %u", count, m_guildId); }
static bool HandleGuildDeleteCommand(ChatHandler* handler, char const* args) { if (!*args) return false; char* guildStr = handler->extractQuotedArg((char*)args); if (!guildStr) return false; std::string guildName = guildStr; Guild* targetGuild = sGuildMgr->GetGuildByName(guildName); if (!targetGuild) return false; targetGuild->Disband(); return true; }
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) { std::string plName; Guild *guild; //sLog.outDebug("WORLD: Received CMSG_GUILD_LEAVE"); guild = objmgr.GetGuildById(_player->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } if(_player->GetGUID() == guild->GetLeader() && guild->GetMemberSize() > 1) { SendGuildCommandResult(GUILD_QUIT_S, "", GUILD_LEADER_LEAVE); return; } if(_player->GetGUID() == guild->GetLeader()) { guild->Disband(); return; } plName = _player->GetName(); guild->DelMember(_player->GetGUID()); // Put record into guildlog guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetGUIDLow(), 0, 0); WorldPacket data(SMSG_GUILD_EVENT, (2+10)); // guess size data << (uint8)GE_LEFT; data << (uint8)1; // strings count data << plName; guild->BroadcastPacket(&data); //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); SendGuildCommandResult(GUILD_QUIT_S, guild->GetName(), GUILD_PLAYER_NO_MORE_IN_GUILD); }
void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/) { sLog.outDebug("WORLD: Received CMSG_GUILD_DISBAND"); Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } if(GetPlayer()->GetGUID() != guild->GetLeader()) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } guild->Disband(); sLog.outDebug("WORLD: Guild Successfully Disbanded"); }
void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_DISBAND"); Guild* guild = sGuildMgr.GetGuildById(GetPlayer()->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (GetPlayer()->GetObjectGuid() != guild->GetLeaderGuid()) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } guild->Disband(); delete guild; DEBUG_LOG("WORLD: Guild Successfully Disbanded"); }
void GuildMgr::LoadGuilds() { Guild* newGuild; uint32 count = 0; // 0 1 2 3 4 5 6 QueryResult* result = CharacterDatabase.Query("SELECT guild.guildid,guild.name,leaderguid,EmblemStyle,EmblemColor,BorderStyle,BorderColor," // 7 8 9 10 "BackgroundColor,info,motd,createdate FROM guild ORDER BY guildid ASC"); if (!result) { BarGoLink bar(1); bar.step(); sLog.outString(">> Loaded %u guild definitions", count); sLog.outString(); return; } // load guild ranks // 0 1 2 3 QueryResult* guildRanksResult = CharacterDatabase.Query("SELECT guildid,rid,rname,rights FROM guild_rank ORDER BY guildid ASC, rid ASC"); // load guild members // 0 1 2 3 4 QueryResult* guildMembersResult = CharacterDatabase.Query("SELECT guildid,guild_member.guid,rank,pnote,offnote," // 5 6 7 8 9 10 "characters.name, characters.level, characters.class, characters.zone, characters.logout_time, characters.account " "FROM guild_member LEFT JOIN characters ON characters.guid = guild_member.guid ORDER BY guildid ASC"); BarGoLink bar(result->GetRowCount()); do { // Field *fields = result->Fetch(); bar.step(); ++count; newGuild = new Guild; if (!newGuild->LoadGuildFromDB(result) || !newGuild->LoadRanksFromDB(guildRanksResult) || !newGuild->LoadMembersFromDB(guildMembersResult) || !newGuild->CheckGuildStructure() ) { newGuild->Disband(); delete newGuild; continue; } newGuild->LoadGuildEventLogFromDB(); AddGuild(newGuild); } while (result->NextRow()); delete result; delete guildRanksResult; delete guildMembersResult; // delete unused LogGuid records in guild_eventlog table // you can comment these lines if you don't plan to change CONFIG_UINT32_GUILD_EVENT_LOG_COUNT CharacterDatabase.PExecute("DELETE FROM guild_eventlog WHERE LogGuid > '%u'", sWorld.getConfig(CONFIG_UINT32_GUILD_EVENT_LOG_COUNT)); sLog.outString(">> Loaded %u guild definitions", count); sLog.outString(); }
void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_REMOVE"); std::string plName; ObjectGuid targetGuid; recvPacket.ReadGuidMask<6, 5, 4, 0, 1, 3, 7, 2>(targetGuid); recvPacket.ReadGuidBytes<2, 6, 5, 7, 1, 4, 3, 0>(targetGuid); Guild* guild = sGuildMgr.GetGuildById(GetPlayer()->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_REMOVE)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } if (!sObjectMgr.GetPlayerNameByGUID(targetGuid, plName)) return; MemberSlot* slot = guild->GetMemberSlot(targetGuid); if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S); return; } if (slot->RankId == GR_GUILDMASTER) { SendGuildCommandResult(GUILD_QUIT_S, "", ERR_GUILD_LEADER_LEAVE); return; } // do not allow to kick player with same or higher rights if (GetPlayer()->GetRank() >= slot->RankId) { SendGuildCommandResult(GUILD_QUIT_S, plName, ERR_GUILD_RANK_TOO_HIGH_S); return; } // do not delete guilds that level are higher than undeletable if (guild->GetMemberSize() == 1 && guild->GetLevel() >= sWorld.getConfig(CONGIG_UINT32_GUILD_UNDELETABLE_LEVEL)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL); return; } // possible last member removed, do cleanup, and no need events if (guild->DelMember(slot->guid)) { guild->Disband(); delete guild; return; } // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetObjectGuid(), slot->guid); guild->BroadcastEvent(GE_REMOVED, plName.c_str(), _player->GetName()); }
void GuildMgr::LoadGuilds() { uint32 count = 0; // 0 1 2 3 4 5 6 QueryResult* result = CharacterDatabase.Query("SELECT guild.guildid,guild.name,leaderguid,EmblemStyle,EmblemColor,BorderStyle,BorderColor," // 7 8 9 10 11 12 "BackgroundColor,info,motd,createdate,BankMoney,(SELECT COUNT(guild_bank_tab.guildid) FROM guild_bank_tab WHERE guild_bank_tab.guildid = guild.guildid) " "FROM guild ORDER BY guildid ASC"); if (!result) { BarGoLink bar(1); bar.step(); sLog.outString(); sLog.outString(">> Loaded %u guild definitions", count); return; } // load guild ranks // 0 1 2 3 4 QueryResult* guildRanksResult = CharacterDatabase.Query("SELECT guildid,rid,rname,rights,BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC"); // load guild members // 0 1 2 3 4 5 6 QueryResult* guildMembersResult = CharacterDatabase.Query("SELECT guildid,guild_member.guid,rank,pnote,offnote,BankResetTimeMoney,BankRemMoney," // 7 8 9 10 11 12 "BankResetTimeTab0,BankRemSlotsTab0,BankResetTimeTab1,BankRemSlotsTab1,BankResetTimeTab2,BankRemSlotsTab2," // 13 14 15 16 17 18 "BankResetTimeTab3,BankRemSlotsTab3,BankResetTimeTab4,BankRemSlotsTab4,BankResetTimeTab5,BankRemSlotsTab5," // 19 20 21 22 23 24 "characters.name, characters.level, characters.class, characters.zone, characters.logout_time, characters.account " "FROM guild_member LEFT JOIN characters ON characters.guid = guild_member.guid ORDER BY guildid ASC"); // load guild bank tab rights // 0 1 2 3 4 QueryResult* guildBankTabRightsResult = CharacterDatabase.Query("SELECT guildid,TabId,rid,gbright,SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC"); BarGoLink bar(result->GetRowCount()); do { // Field *fields = result->Fetch(); bar.step(); ++count; Guild* newGuild = new Guild; if (!newGuild->LoadGuildFromDB(result) || !newGuild->LoadRanksFromDB(guildRanksResult) || !newGuild->LoadMembersFromDB(guildMembersResult) || !newGuild->LoadBankRightsFromDB(guildBankTabRightsResult) || !newGuild->CheckGuildStructure() ) { newGuild->Disband(); delete newGuild; continue; } AddGuild(newGuild); } while (result->NextRow()); delete result; delete guildRanksResult; delete guildMembersResult; delete guildBankTabRightsResult; // delete unused LogGuid records in guild_eventlog and guild_bank_eventlog table // you can comment these lines if you don't plan to change CONFIG_UINT32_GUILD_EVENT_LOG_COUNT and CONFIG_UINT32_GUILD_BANK_EVENT_LOG_COUNT CharacterDatabase.PExecute("DELETE FROM guild_eventlog WHERE LogGuid > '%u'", sWorld.getConfig(CONFIG_UINT32_GUILD_EVENT_LOG_COUNT)); CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE LogGuid > '%u'", sWorld.getConfig(CONFIG_UINT32_GUILD_BANK_EVENT_LOG_COUNT)); sLog.outString(); sLog.outString(">> Loaded %u guild definitions", count); }
void GuildMgr::LoadGuilds() { uint32 count = 0; // 0 1 2 3 4 5 6 QueryResult *result = CharacterDatabase.PQuery("SELECT guild.guildid,guild.name,leaderguid,EmblemStyle,EmblemColor,BorderStyle,BorderColor," // 7 8 9 10 11 12 13 14 15 "BackgroundColor,info,motd,createdate,BankMoney,level,experience,todayExperience,(SELECT COUNT(guild_bank_tab.guildid) FROM guild_bank_tab WHERE guild_bank_tab.guildid = guild.guildid) " "FROM guild ORDER BY guildid ASC"); if (!result) { BarGoLink bar(1); bar.step(); sLog.outString(); sLog.outString(">> Loaded %u guild definitions", count); return; } // load guild ranks // 0 1 2 3 4 QueryResult* guildRanksResult = CharacterDatabase.Query("SELECT guildid,rid,rname,rights,BankMoneyPerDay FROM guild_rank ORDER BY guildid ASC, rid ASC"); // load guild members // 0 1 2 3 4 5 6 QueryResult* guildMembersResult = CharacterDatabase.PQuery("SELECT guildid,guild_member.guid,rank,pnote,offnote,BankResetTimeMoney,BankRemMoney," // 7 8 9 10 11 12 "BankResetTimeTab0,BankRemSlotsTab0,BankResetTimeTab1,BankRemSlotsTab1,BankResetTimeTab2,BankRemSlotsTab2," // 13 14 15 16 17 18 19 20 21 22 "BankResetTimeTab3,BankRemSlotsTab3,BankResetTimeTab4,BankRemSlotsTab4,BankResetTimeTab5,BankRemSlotsTab5,BankResetTimeTab6,BankRemSlotsTab6,BankResetTimeTab7,BankRemSlotsTab7," // 23 24 25 26 27 28 29 "characters.name, characters.level, characters.class, characters.zone, characters.logout_time, characters.account, thisWeekReputation, " // 30 30 32 33 34 35 36 "achievementPoints, firstProfessionId, firstProfessionRank, firstProfessionValue, secondProfessionId, secondProfessionRank, secondProfessionValue " "FROM guild_member LEFT JOIN characters ON characters.guid = guild_member.guid ORDER BY guildid ASC"); // load guild bank tab rights // 0 1 2 3 4 QueryResult* guildBankTabRightsResult = CharacterDatabase.Query("SELECT guildid,TabId,rid,gbright,SlotPerDay FROM guild_bank_right ORDER BY guildid ASC, TabId ASC"); BarGoLink bar(result->GetRowCount()); do { // Field *fields = result->Fetch(); bar.step(); ++count; Guild* newGuild = new Guild; if (!newGuild->LoadGuildFromDB(result) || !newGuild->LoadRanksFromDB(guildRanksResult) || !newGuild->LoadMembersFromDB(guildMembersResult) || !newGuild->LoadBankRightsFromDB(guildBankTabRightsResult) || !newGuild->CheckGuildStructure()) { newGuild->Disband(); delete newGuild; continue; } newGuild->LoadGuildNewsEventLogFromDB(); QueryResult* achievementResult = CharacterDatabase.PQuery("SELECT achievement, date, guids FROM guild_achievement WHERE guildId = %u", newGuild->GetId()); QueryResult* criteriaResult = CharacterDatabase.PQuery("SELECT criteria, counter, date, completedGuid FROM guild_achievement_progress WHERE guildId = %u", newGuild->GetId()); newGuild->GetAchievementMgr().LoadFromDB(achievementResult, criteriaResult); AddGuild(newGuild); } while (result->NextRow()); delete result; delete guildRanksResult; delete guildMembersResult; delete guildBankTabRightsResult; // delete unused LogGuid records in guild_eventlog and guild_bank_eventlog table // you can comment these lines if you don't plan to change CONFIG_UINT32_GUILD_EVENT_LOG_COUNT and CONFIG_UINT32_GUILD_BANK_EVENT_LOG_COUNT CharacterDatabase.PExecute("DELETE FROM guild_news_eventlog WHERE LogGuid > '%u'", GUILD_NEWS_MAX_LOGS); CharacterDatabase.PExecute("DELETE FROM guild_eventlog WHERE LogGuid > '%u'", sWorld.getConfig(CONFIG_UINT32_GUILD_EVENT_LOG_COUNT)); CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE LogGuid > '%u'", sWorld.getConfig(CONFIG_UINT32_GUILD_BANK_EVENT_LOG_COUNT)); sLog.outString(); sLog.outString(">> Loaded %u guild definitions", count); }