void WorldSession::HandleGuildSwitchRankOpcode(WorldPacket& recvPacket) { uint32 rankId; bool up; recvPacket >> rankId; up = recvPacket.ReadBit(); DEBUG_LOG("WORLD: Received CMSG_GUILD_SWITCH_RANK rank %u up %u", rankId, up); 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->SwitchRank(rankId, up); guild->QueryRanks(this); guild->Query(this); guild->Roster(); // broadcast for tab rights update }
void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received CMSG_GUILD_ADD_RANK"); recvPacket >> Unused<uint32>(); // rank id std::string rankname = recvPacket.ReadString(recvPacket.ReadBits(7)); 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; } if (guild->GetRanksSize() >= GUILD_RANKS_MAX_COUNT) // client not let create more 10 than ranks return; guild->CreateRank(rankname, GR_RIGHT_GCHATLISTEN | GR_RIGHT_GCHATSPEAK); guild->Query(this); guild->QueryRanks(this); guild->Roster(); // broadcast for tab rights update }
void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/) { DEBUG_LOG("WORLD: Received 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::HandleGuildDelRankOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_DEL_RANK"); uint32 rankId; recvPacket >> rankId; 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 allow delete rank if there are still members using it if (guild->HasMembersWithRank(rankId)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_RANK_IN_USE); return; } guild->DelRank(rankId); guild->Query(this); guild->QueryRanks(this); guild->Roster(); // broadcast for tab rights update }
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::HandleGuildRemoveOpcode(WorldPacket& recvPacket) { std::string plName; //sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE"); recvPacket >> plName; if(!normalizePlayerName(plName)) return; Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_REMOVE)) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } uint64 plGuid; MemberSlot* slot = guild->GetMemberSlot(plName, plGuid); if(!slot) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return; } if(slot->RankId == GR_GUILDMASTER) { SendGuildCommandResult(GUILD_QUIT_S, "", 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, GUILD_RANK_TOO_HIGH_S); return; } guild->DelMember(plGuid); // Put record into guildlog guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), 0); WorldPacket data(SMSG_GUILD_EVENT, (2+20)); // guess size data << (uint8)GE_REMOVED; data << (uint8)2; // strings count data << plName; data << GetPlayer()->GetName(); guild->BroadcastPacket(&data); }
void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket) { std::string rankname; uint32 rankId; uint32 rights, MoneyPerDay; DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_RANK"); Guild* guild = sGuildMgr.GetGuildById(GetPlayer()->GetGuildId()); if (!guild) { recvPacket.rfinish(); // set to end to avoid warnings spam SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (GetPlayer()->GetObjectGuid() != guild->GetLeaderGuid()) { recvPacket.rfinish(); // set to end to avoid warnings spam SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } recvPacket >> Unused<uint32>(); // unk recvPacket >> Unused<uint32>(); // old rights recvPacket >> rights; uint32 BankRights[GUILD_BANK_MAX_TABS]; uint32 BankSlotPerDay[GUILD_BANK_MAX_TABS]; for (int i = 0; i < GUILD_BANK_MAX_TABS; ++i) { recvPacket >> BankRights[i]; recvPacket >> BankSlotPerDay[i]; } recvPacket >> MoneyPerDay; recvPacket >> rankId; rankname = recvPacket.ReadString(recvPacket.ReadBits(7)); DEBUG_LOG("WORLD: Changed RankName to %s , Rights to 0x%.4X", rankname.c_str(), rights); for (int i = 0; i < GUILD_BANK_MAX_TABS; ++i) guild->SetBankRightsAndSlots(rankId, uint8(i), uint16(BankRights[i] & 0xFF), uint16(BankSlotPerDay[i]), true); guild->SetBankMoneyPerDay(rankId, MoneyPerDay); guild->SetRankName(rankId, rankname); if (rankId == GR_GUILDMASTER) // prevent loss leader rights rights = GR_RIGHT_ALL; guild->SetRankRights(rankId, rights); guild->Query(this); guild->Roster(); // broadcast for tab rights update }
void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) { sLog.outDebug("WORLD: Received CMSG_GUILD_PROMOTE"); std::string plName; recvPacket >> plName; if(!normalizePlayerName(plName)) return; Guild* guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_PROMOTE)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } uint64 plGuid; MemberSlot* slot = guild->GetMemberSlot(plName, plGuid); if(!slot) { SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S); return; } if(plGuid == GetPlayer()->GetGUID()) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_NAME_INVALID); return; } // allow to promote only to lower rank than member's rank // guildmaster's rank = 0 // GetPlayer()->GetRank() + 1 is highest rank that current player can promote to if(GetPlayer()->GetRank() + 1 >= slot->RankId) { SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_RANK_TOO_HIGH_S); return; } uint32 newRankId = slot->RankId - 1; //when promoting player, rank is decreased guild->ChangeRank(plGuid, newRankId); // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_PROMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), newRankId); guild->BroadcastEvent(GE_PROMOTION, 0, 3, _player->GetName(), plName, guild->GetRankName(newRankId)); }
void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_PROMOTE"); std::string plName; ObjectGuid targetGuid; recvPacket.ReadGuidMask<7, 2, 5, 6, 1, 0, 3, 4>(targetGuid); recvPacket.ReadGuidBytes<0, 5, 2, 3, 6, 4, 1, 7>(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_PROMOTE)) { 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->guid == GetPlayer()->GetObjectGuid()) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_NAME_INVALID); return; } // allow to promote only to lower rank than member's rank // guildmaster's rank = 0 // GetPlayer()->GetRank() + 1 is highest rank that current player can promote to if (GetPlayer()->GetRank() + 1 >= slot->RankId) { SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_RANK_TOO_HIGH_S); return; } uint32 newRankId = slot->RankId - 1; // when promoting player, rank is decreased slot->ChangeRank(newRankId); // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_PROMOTE_PLAYER, GetPlayer()->GetObjectGuid(), slot->guid, newRankId); guild->BroadcastEvent(GE_PROMOTION, _player->GetName(), plName.c_str(), guild->GetRankName(newRankId).c_str()); }
void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received CMSG_GUILD_REMOVE"); std::string plName; recvPacket >> plName; if(!normalizePlayerName(plName)) return; Guild* guild = sObjectMgr.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; } uint64 plGuid; MemberSlot* slot = guild->GetMemberSlot(plName, plGuid); 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; } guild->DelMember(plGuid); // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), 0); guild->BroadcastEvent(GE_REMOVED, 0, 2, plName, _player->GetName(), ""); }
void WorldSession::HandleGuildSetNoteOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_SET_NOTE"); bool officer; uint32 noteLen; std::string name, note; ObjectGuid targetGuid; recvPacket.ReadGuidMask<1, 4, 5, 3, 0, 7>(targetGuid); officer = !recvPacket.ReadBit(); recvPacket.ReadGuidMask<6>(targetGuid); noteLen = recvPacket.ReadBits(8); recvPacket.ReadGuidMask<2>(targetGuid); recvPacket.ReadGuidBytes<4, 5, 0, 3, 1, 6, 7>(targetGuid); note = recvPacket.ReadString(noteLen); recvPacket.ReadGuidBytes<2>(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(), officer ? GR_RIGHT_EOFFNOTE : GR_RIGHT_EPNOTE)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } if (!sObjectMgr.GetPlayerNameByGUID(targetGuid, name)) return; MemberSlot* slot = guild->GetMemberSlot(targetGuid); if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, name, ERR_GUILD_PLAYER_NOT_IN_GUILD_S); return; } if (officer) slot->SetOFFNOTE(note); else slot->SetPNOTE(note); guild->Roster(this); }
void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_LEADER"); std::string name = recvPacket.ReadString(recvPacket.ReadBits(7)); Player* oldLeader = GetPlayer(); if (!normalizePlayerName(name)) return; Guild* guild = sGuildMgr.GetGuildById(oldLeader->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (oldLeader->GetObjectGuid() != guild->GetLeaderGuid()) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } MemberSlot* oldSlot = guild->GetMemberSlot(oldLeader->GetObjectGuid()); if (!oldSlot) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } MemberSlot* slot = guild->GetMemberSlot(name); if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, name, ERR_GUILD_PLAYER_NOT_IN_GUILD_S); return; } if (slot->guid == oldLeader->GetObjectGuid()) return; guild->SetLeader(slot->guid); // NOTE: GR_OFFICER might not actually be officer rank oldSlot->ChangeRank(GR_OFFICER); guild->BroadcastEvent(GE_LEADER_CHANGED, oldLeader->GetName(), name.c_str()); }
void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) { std::string name; Player *oldLeader = GetPlayer(); Guild *guild; //sLog.outDebug("WORLD: Received CMSG_GUILD_LEADER"); recvPacket >> name; if(!normalizePlayerName(name)) return; guild = objmgr.GetGuildById(oldLeader->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } if( oldLeader->GetGUID() != guild->GetLeader()) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } uint64 newLeaderGUID; MemberSlot* slot = guild->GetMemberSlot(name, newLeaderGUID); if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); return; } guild->SetLeader(newLeaderGUID); guild->ChangeRank(oldLeader->GetGUID(), GR_OFFICER); WorldPacket data(SMSG_GUILD_EVENT, (2+20)); // guess size data << (uint8)GE_LEADER_CHANGED; data << (uint8)2; // strings count data << oldLeader->GetName(); data << name.c_str(); guild->BroadcastPacket(&data); //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); }
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 Guild::DemoteGuildMember(PlayerInfo* pMember, WorldSession* pClient) { if(pClient->GetPlayer()->getPlayerInfo()->guild != this || pMember->guild != this) return; if(!pClient->GetPlayer()->getPlayerInfo()->guildRank->CanPerformCommand(GR_RIGHT_DEMOTE) || pMember->guid == GetGuildLeader() || pClient->GetPlayer()->getPlayerInfo()->guildRank->iId >= pMember->guildRank->iId) { SendGuildCommandResult(pClient, GUILD_PROMOTE_S, "", GUILD_PERMISSIONS); return; } // find the next highest rank uint32 nh = pMember->guildRank->iId + 1; GuildRank* newRank = NULL; m_lock.Acquire(); while(nh < 10 && newRank == NULL) { newRank = m_ranks[nh]; ++nh; } if(newRank == NULL) { m_lock.Release(); pClient->SystemMessage("Could not find a rank to demote this member to."); return; } GuildMemberMap::iterator itr = m_members.find(pMember); if(itr == m_members.end()) { // shouldn't happen m_lock.Release(); return; } itr->second->pRank = newRank; itr->second->pPlayer->guildRank = newRank; // log it LogGuildEvent(GUILD_EVENT_DEMOTION, 3, pClient->GetPlayer()->GetName(), pMember->name, newRank->szRankName); AddGuildLogEntry(GUILD_LOG_EVENT_DEMOTION, 3, pClient->GetPlayer()->GetLowGUID(), pMember->guid, newRank->iId); // update in the database CharacterDatabase.Execute("UPDATE guild_data SET guildRank = %u WHERE playerid = %u AND guildid = %u", newRank->iId, pMember->guid, m_guildId); // if the player is online, update his guildrank if(pMember->m_loggedInPlayer) pMember->m_loggedInPlayer->SetGuildRank(newRank->iId); // release lock m_lock.Release(); }
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::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_INFO_TEXT"); std::string GINFO = recvPacket.ReadString(recvPacket.ReadBits(12)); 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_MODIFY_GUILD_INFO)) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PERMISSIONS); return; } guild->SetGINFO(GINFO); }
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::HandleGuildDemoteOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_DEMOTE"); 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_DEMOTE)) { 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->guid == GetPlayer()->GetObjectGuid()) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_NAME_INVALID); return; } // do not allow to demote same or higher rank if (GetPlayer()->GetRank() >= slot->RankId) { SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_RANK_TOO_HIGH_S); return; } // do not allow to demote lowest rank if (slot->RankId >= guild->GetLowestRank()) { SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_RANK_TOO_LOW_S); return; } uint32 newRankId = slot->RankId + 1; // when demoting player, rank is increased slot->ChangeRank(newRankId); // Put record into guild log guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetObjectGuid(), slot->guid, newRankId); guild->BroadcastEvent(GE_DEMOTION, _player->GetName(), plName.c_str(), guild->GetRankName(slot->RankId).c_str()); }
void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) { sLog.outDebug("WORLD: Received CMSG_GUILD_LEADER"); std::string name; recvPacket >> name; Player *oldLeader = GetPlayer(); if(!normalizePlayerName(name)) return; Guild *guild = sObjectMgr.GetGuildById(oldLeader->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } if (oldLeader->GetGUID() != guild->GetLeader()) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } uint64 newLeaderGUID; MemberSlot* slot = guild->GetMemberSlot(name, newLeaderGUID); if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, name, ERR_GUILD_PLAYER_NOT_IN_GUILD_S); return; } guild->SetLeader(newLeaderGUID); guild->ChangeRank(oldLeader->GetGUID(), GR_OFFICER); guild->BroadcastEvent(GE_LEADER_CHANGED, 0, 2, oldLeader->GetName(), name, ""); }
void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_MOTD"); std::string MOTD = recvPacket.ReadString(recvPacket.ReadBits(11)); 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_SETMOTD)) { SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS); return; } guild->SetMOTD(MOTD); guild->BroadcastEvent(GE_MOTD, MOTD.c_str()); }
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 WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) { Guild *guild; std::string MOTD; //sLog.outDebug("WORLD: Received CMSG_GUILD_MOTD"); guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_SETMOTD)) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } if(!recvPacket.empty()) recvPacket >> MOTD; else
void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recv_data) { DEBUG_LOG("Received opcode MSG_PETITION_RENAME"); // ok //recv_data.hexlike(); ObjectGuid petitionGuid; std::string newname; recv_data >> petitionGuid; // guid recv_data >> newname; // new name Item* item = _player->GetItemByGuid(petitionGuid); if (!item) return; if (sGuildMgr.GetGuildByName(newname)) { SendGuildCommandResult(GUILD_CREATE_S, newname, ERR_GUILD_NAME_EXISTS_S); return; } if (sObjectMgr.IsReservedName(newname) || !ObjectMgr::IsValidCharterName(newname)) { SendGuildCommandResult(GUILD_CREATE_S, newname, ERR_GUILD_NAME_INVALID); return; } std::string db_newname = newname; CharacterDatabase.escape_string(db_newname); CharacterDatabase.PExecute("UPDATE petition SET name = '%s' WHERE petitionguid = '%u'", db_newname.c_str(), petitionGuid.GetCounter()); DEBUG_LOG("Petition %s renamed to '%s'", petitionGuid.GetString().c_str(), newname.c_str()); WorldPacket data(MSG_PETITION_RENAME, (8 + newname.size() + 1)); data << ObjectGuid(petitionGuid); data << newname; SendPacket(&data); }
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 WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { sLog.outDebug("WORLD: Received CMSG_GUILD_QUERY"); uint32 guildId; recvPacket >> guildId; if(Guild *guild = objmgr.GetGuildById(guildId)) { guild->Query(this); return; } SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); }
void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_QUERY"); uint32 guildId; recvPacket >> guildId; if (Guild* guild = sGuildMgr.GetGuildById(guildId)) { guild->Query(this); return; } SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); }
void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_QUERY"); ObjectGuid guildGuid, playerGuid; recvPacket >> guildGuid >> playerGuid; if (Guild* guild = sGuildMgr.GetGuildByGuid(guildGuid)) { if (guild->GetMemberSlot(playerGuid)) { guild->Query(this); return; } } SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); }
void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/) { DEBUG_LOG("WORLD: Received opcode CMSG_GUILD_INFO"); Guild* guild = sGuildMgr.GetGuildById(GetPlayer()->GetGuildId()); if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD); return; } WorldPacket data(SMSG_GUILD_INFO, (guild->GetName().size() + 4 + 4 + 4)); data << guild->GetName(); data << uint32(secsToTimeBitFields(guild->GetCreatedDate())); // 3.x (prev. day + month + year) data << uint32(guild->GetMemberSize()); // amount of chars data << uint32(guild->GetAccountsNumber()); // amount of accounts SendPacket(&data); }
void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket, 4); uint32 guildId; Guild *guild; //sLog.outDebug("WORLD: Received CMSG_GUILD_QUERY"); recvPacket >> guildId; guild = objmgr.GetGuildById(guildId); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } guild->Query(this); }