void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_MOTD"); uint32 motdLength = recvPacket.ReadBits(10); std::string motd = recvPacket.ReadString(motdLength); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleSetMOTD(this, motd); }
void WorldSession::HandleLfgSetCommentOpcode(WorldPacket& recvData) { uint32 length = recvData.ReadBits(9); std::string comment = recvData.ReadString(length); TC_LOG_DEBUG("lfg", "CMSG_LFG_SET_COMMENT %s comment: %s", GetPlayerInfo().c_str(), comment.c_str()); sLFGMgr->SetComment(GetPlayer()->GetGUID(), comment); }
void WorldSession::HandleChannelUnbanOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode %s (%u, 0x%X)", recvPacket.GetOpcodeName(), recvPacket.GetOpcode(), recvPacket.GetOpcode()); // recvPacket.hexlike(); uint32 channelLen, nameLen; std::string channelname, otp; nameLen = recvPacket.ReadBits(7); channelLen = recvPacket.ReadBits(8); otp = recvPacket.ReadString(nameLen); channelname = recvPacket.ReadString(channelLen); if (!normalizePlayerName(otp)) return; if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) if (Channel* chn = cMgr->GetChannel(channelname, _player)) chn->UnBan(_player->GetObjectGuid(), otp.c_str()); }
void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket) { uint32 length = recvPacket.ReadBits(12); std::string info = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), info.c_str()); if (Guild* guild = GetPlayer()->GetGuild()) guild->HandleSetInfo(this, info); }
void WorldSession::HandleChannelListOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode %s (%u, 0x%X)", recvPacket.GetOpcodeName(), recvPacket.GetOpcode(), recvPacket.GetOpcode()); // recvPacket.hexlike(); std::string channelname = recvPacket.ReadString(recvPacket.ReadBits(8)); if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) if (Channel* chn = cMgr->GetChannel(channelname, _player)) chn->List(_player); }
void WorldSession::HandleChannelList(WorldPacket& recvPacket) { uint32 channelId; recvPacket >> channelId; // flags recvPacket.ReadBit(); uint32 length = recvPacket.ReadBits(7); recvPacket.ReadBits(7); recvPacket.ReadBit(); std::string channelName = recvPacket.ReadString(length); TC_LOG_DEBUG("chat.system", "%s %s Channel: %s", recvPacket.GetOpcode() == CMSG_CHANNEL_DISPLAY_LIST ? "CMSG_CHANNEL_DISPLAY_LIST" : "CMSG_CHANNEL_LIST", GetPlayerInfo().c_str(), channelName.c_str()); if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer())) channel->List(GetPlayer()); }
void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) { uint32 nameLength = recvPacket.ReadBits(7); std::string invitedName = recvPacket.ReadString(nameLength); sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_INVITE [%s]: Invited: %s", GetPlayerInfo().c_str(), invitedName.c_str()); if (normalizePlayerName(invitedName)) if (Guild* guild = GetPlayer()->GetGuild()) guild->HandleInviteMember(this, invitedName); }
void WorldSession::HandleLfgJoinOpcode(WorldPacket& recvData) { if (!sLFGMgr->isOptionEnabled(lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER | lfg::LFG_OPTION_ENABLE_RAID_BROWSER) || (GetPlayer()->GetGroup() && GetPlayer()->GetGroup()->GetLeaderGUID() != GetPlayer()->GetGUID() && (GetPlayer()->GetGroup()->GetMembersCount() == MAXGROUPSIZE || !GetPlayer()->GetGroup()->isLFGGroup()))) { recvData.rfinish(); return; } uint32 roles; bool unk1; uint8 unk0; recvData >> unk0; for (int32 i = 0; i < 3; ++i) recvData.read_skip<uint32>(); recvData >> roles; uint32 numDungeons = recvData.ReadBits(22); uint32 commentLen = recvData.ReadBits(8); unk1 = recvData.ReadBit(); if (!numDungeons) { TC_LOG_DEBUG("lfg", "CMSG_LFG_JOIN %s no dungeons selected", GetPlayerInfo().c_str()); recvData.rfinish(); return; } std::string comment = recvData.ReadString(commentLen); lfg::LfgDungeonSet newDungeons; for (uint32 i = 0; i < numDungeons; ++i) { uint32 dungeon; recvData >> dungeon; newDungeons.insert((dungeon & 0x00FFFFFF)); // remove the type from the dungeon entry } TC_LOG_DEBUG("lfg", "CMSG_LFG_JOIN %s roles: %u, Dungeons: %u, Comment: %s", GetPlayerInfo().c_str(), roles, uint8(newDungeons.size()), comment.c_str()); sLFGMgr->JoinLfg(GetPlayer(), uint8(roles), newDungeons, comment); }
void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_INFO_TEXT"); uint32 length = recvPacket.ReadBits(11); std::string info = recvPacket.ReadString(length); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleSetInfo(this, info); }
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::HandleQueryNpcCompletitionRespOpcode(WorldPacket& recvData) { std::set<uint32> completedQuests; std::set<uint32> npcEntryIds; recvData.hexlike(); uint32 count = recvData.ReadBits(24); uint8 unk1; recvData >> unk1; for (uint8 i = 0; i < count; ++i) { uint32 questId = recvData.ReadBits(24); if (_player->GetQuestStatus(questId) == QUEST_STATUS_COMPLETE) { completedQuests.insert(questId); if (std::set<uint32> const* list = sObjectMgr->GetInvolvedNpcsForQuest(questId)) for (std::set<uint32>::const_iterator itr = list->begin(); itr != list->end(); ++itr) npcEntryIds.insert(*itr); } sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recv CMSG_QUERY_COMPLETITION_NPC_RESPONSE with count : %u and questId %u ",count,questId); } WorldPacket sendData(SMSG_QUEST_NPC_QUERY_RESPONSE, 2 + 4 + (4 * count)); sendData.WriteBits<uint8>(completedQuests.size(), 23); for (uint8 i = 0; i < completedQuests.size(); ++i) sendData.WriteBits<uint8>(completedQuests.size(), 24); for (std::set<uint32>::iterator itr = completedQuests.begin(); itr != completedQuests.end(); ++itr) { sendData << uint32(*itr); for (std::set<uint32>::iterator citr = npcEntryIds.begin(); citr != npcEntryIds.end(); ++citr) sendData << uint32(*itr); } SendPacket(&sendData); }
void WorldSession::HandleChannelList(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Opcode %u", recvPacket.GetOpcode()); uint32 length = recvPacket.ReadBits(8); std::string channelname = recvPacket.ReadString(length); if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) if (Channel* chn = cMgr->GetChannel(channelname, _player)) chn->List(_player); }
void WorldSession::HandleSetActiveVoiceChannel(WorldPacket& recvData) { TC_LOG_DEBUG("network", "WORLD: CMSG_SET_ACTIVE_VOICE_CHANNEL"); uint32 channelId; std::string channelName; recvData >> channelId; uint32 length = recvData.ReadBits(8); channelName = recvData.ReadString(length); }
void WorldSession::HandleChannelVoiceOffOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "WORLD: CMSG_CHANNEL_VOICE_OFF"); uint32 length = recvData.ReadBits(8); std::string channelName = recvData.ReadString(length); if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer())) channel->MakeVoiceOff(&recvData, GetPlayer()->GetGUID()); }
void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_INVITE"); uint32 nameLength = recvPacket.ReadBits(9); std::string invitedName = recvPacket.ReadString(nameLength); if (normalizePlayerName(invitedName)) if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleInviteMember(this, invitedName); }
void WorldSession::HandleJoinChannel(WorldPacket& recvPacket) { uint32 channelId; uint32 channelLength, passLength; std::string channelName, password; recvPacket >> channelId; uint8 unknown1 = recvPacket.ReadBit(); // unknowns uint8 unknown2 = recvPacket.ReadBit(); channelLength = recvPacket.ReadBits(8); passLength = recvPacket.ReadBits(8); channelName = recvPacket.ReadString(channelLength); password = recvPacket.ReadString(passLength); TC_LOG_DEBUG("chat.system", "CMSG_JOIN_CHANNEL %s Channel: %u, unk1: %u, unk2: %u, channel: %s, password: %s", GetPlayerInfo().c_str(), channelId, unknown1, unknown2, channelName.c_str(), password.c_str()); if (channelId) { ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(channelId); if (!channel) return; AreaTableEntry const* zone = GetAreaEntryByAreaID(GetPlayer()->GetZoneId()); if (!zone || !GetPlayer()->CanJoinConstantChannelInZone(channel, zone)) return; } if (channelName.empty()) return; if (isdigit(channelName[0])) return; if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) { cMgr->setTeam(GetPlayer()->GetTeam()); if (Channel* channel = cMgr->GetJoinChannel(channelName, channelId)) channel->JoinChannel(GetPlayer(), password); } }
void WorldSession::HandleChannelBan(WorldPacket& recvPacket) { uint32 channelLength, nameLength; std::string channelName, targetName; channelLength = recvPacket.ReadBits(8); nameLength = recvPacket.ReadBits(7); targetName = recvPacket.ReadString(nameLength); channelName = recvPacket.ReadString(channelLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_BAN %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); if (!normalizePlayerName(targetName)) return; if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer())) channel->Ban(GetPlayer(), targetName); }
void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_LEADER"); std::string name; uint32 len = recvPacket.ReadBits(9); name = recvPacket.ReadString(len); if (normalizePlayerName(name)) if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleSetLeader(this, name); }
void WorldSession::HandleChannelAnnouncements(WorldPacket& recvPacket) { uint32 length = recvPacket.ReadBits(8); std::string channelName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_ANNOUNCEMENTS %s Channel: %s", GetPlayerInfo().c_str(), channelName.c_str()); if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer())) channel->Announce(GetPlayer()); }
SuggestTicket::SuggestTicket(Player* player, WorldPacket& suggestPacket) : TicketInfo(player), _Orientation(0.0f) { _ticketId = sTicketMgr->GenerateSuggestId(); suggestPacket >> _pos.x; suggestPacket >> _pos.y; suggestPacket >> _pos.z; suggestPacket >> _Orientation; suggestPacket >> _mapId; uint8 lenNote = suggestPacket.ReadBits(10); _suggestnote = suggestPacket.ReadString(lenNote); }
void WorldSession::HandleChannelOwner(WorldPacket& recvPacket) { uint32 length = recvPacket.ReadBits(8); std::string channelName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_OWNER %s Channel: %s", GetPlayerInfo().c_str(), channelName.c_str()); if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer())) channel->SendWhoOwner(GetPlayer()->GetGUID()); }
void WorldSession::HandleActivateTaxiExpressOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ACTIVATETAXIEXPRESS"); ObjectGuid guid; uint32 node_count; guid[4] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); guid[0] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[1] = recvData.ReadBit(); guid[2] = recvData.ReadBit(); node_count = recvData.ReadBits(22); recvData.FlushBits(); recvData.ReadByteSeq(guid[7]); recvData.ReadByteSeq(guid[4]); std::vector<uint32> nodes; for (uint32 i = 0; i < node_count; ++i) { uint32 node; recvData >> node; nodes.push_back(node); } recvData.ReadByteSeq(guid[3]); recvData.ReadByteSeq(guid[1]); recvData.ReadByteSeq(guid[0]); recvData.ReadByteSeq(guid[6]); recvData.ReadByteSeq(guid[2]); recvData.ReadByteSeq(guid[5]); Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_FLIGHTMASTER); if (!npc) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleActivateTaxiExpressOpcode - Unit (GUID: %u) not found or you can't interact with it.", uint32(GUID_LOPART(guid))); return; } if (nodes.empty()) return; sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ACTIVATETAXIEXPRESS from %d to %d", nodes.front(), nodes.back()); GetPlayer()->ActivateTaxiPathTo(nodes, npc); }
BugTicket::BugTicket(Player* player, WorldPacket& bugPacket) : TicketInfo(player), _Orientation(0.0f) { _ticketId = sTicketMgr->GenerateBugId(); bugPacket >> _pos.x; bugPacket >> _pos.y; bugPacket >> _pos.z; bugPacket >> _Orientation; bugPacket >> _mapId; uint8 lenNote = bugPacket.ReadBits(10); _bugnote = bugPacket.ReadString(lenNote); }
void WorldSession::HandleChannelList(WorldPacket& recvPacket) { uint32 length = recvPacket.ReadBits(8); std::string channelName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_CHATSYS, "%s %s Channel: %s", recvPacket.GetOpcode() == CMSG_CHANNEL_DISPLAY_LIST ? "CMSG_CHANNEL_DISPLAY_LIST" : "CMSG_CHANNEL_LIST", GetPlayerInfo().c_str(), channelName.c_str()); if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer())) channel->List(GetPlayer()); }
void WorldSession::HandleChannelKick(WorldPacket& recvPacket) { time_t now = time(NULL); if (now - timeLastChannelKickCommand < 5) return; else timeLastChannelKickCommand = now; sLog->outDebug(LOG_FILTER_NETWORKIO, "Opcode %u", recvPacket.GetOpcode()); uint32 channelLength = recvPacket.ReadBits(8); uint32 nameLength = recvPacket.ReadBits(7); std::string otp = recvPacket.ReadString(nameLength); std::string channelname = recvPacket.ReadString(channelLength); if (!normalizePlayerName(otp)) return; if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) if (Channel* chn = cMgr->GetChannel(channelname, _player)) chn->Kick(_player->GetGUID(), otp.c_str()); }
void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) { uint32 rankId; recvPacket >> rankId; uint32 length = recvPacket.ReadBits(7); std::string rankName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_ADD_RANK [%s]: Rank: %s", GetPlayerInfo().c_str(), rankName.c_str()); if (Guild* guild = GetPlayer()->GetGuild()) guild->HandleAddNewRank(this, rankName); }
void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ADD_RANK"); uint32 rankId; recvPacket >> rankId; uint32 length = recvPacket.ReadBits(7); std::string rankName = recvPacket.ReadString(length); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleAddNewRank(this, rankName); //, rankId); }
void WorldSession::HandleJoinChannelOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received opcode %s (%u, 0x%X)", recvPacket.GetOpcodeName(), recvPacket.GetOpcode(), recvPacket.GetOpcode()); uint32 channel_id; std::string channelname, pass; recvPacket >> channel_id; recvPacket.ReadBit(); // has voice recvPacket.ReadBit(); // zone update uint8 channelLength = recvPacket.ReadBits(8); uint8 passwordLength = recvPacket.ReadBits(8); channelname = recvPacket.ReadString(channelLength); pass = recvPacket.ReadString(passwordLength); if (channelname.empty()) return; if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) if (Channel* chn = cMgr->GetJoinChannel(channelname, channel_id)) // channel id seems to be useless but must be checked for LFG chn->Join(_player->GetObjectGuid(), pass.c_str()); }
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::HandleGuildBankSetTabInfo(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_BANK_TAB_INFO"); uint32 textLength = 0; std::string info; uint32 tabId; recvData >> tabId; textLength = recvData.ReadBits(14); info = recvData.ReadString(textLength); if (Guild* guild = GetPlayer()->GetGuild()) guild->SetBankTabText(tabId, info); }