//this function inserts to WorldPacket auction's data bool AuctionEntry::BuildAuctionInfo(WorldPacket& data) const { Item* item = sAuctionMgr->GetAItem(itemGUIDLow); if (!item) { TC_LOG_ERROR("misc", "AuctionEntry::BuildAuctionInfo: Auction %u has a non-existent item: %u", autcionId, itemGUIDLow); return false; } ObjectGuid ownerGUID = MAKE_NEW_GUID(owner, 0, HIGHGUID_PLAYER); ObjectGuid bidderGUID = MAKE_NEW_GUID(bidder, 0, HIGHGUID_PLAYER); ObjectGuid itemGUID = MAKE_NEW_GUID(itemGUIDLow, 0, HIGHGUID_ITEM); ObjectGuid ownerAccountID = 0; // Owner Account ID -- Added in WoD // Write Item Instances data << uint32(item->GetEntry()); data << uint32(item->GetItemSuffixFactor()); data << uint32(item->GetItemRandomPropertyId()); data.FlushBits(); data.WriteBit(0); // HasItemBonus -- Added in WoD data.WriteBit(0); // HasModifications -- Added in WoD data << int32(item->GetCount()); data << int32(item->GetSpellCharges()); data << int32(PROP_ENCHANTMENT_SLOT_0); data << int32(0); // flags -- Added in WoD??? data << int32(autcionId); data << ownerGUID; data << uint64(startbid); data << uint64(bid ? GetAuctionOutBid() : 0); data << uint64(buyout); data << int32((expire_time - time(NULL)) * IN_MILLISECONDS); data << uint8(0); // Delete Reason -- Added in WoD for (uint8 i = 0; i < PROP_ENCHANTMENT_SLOT_0; ++i) { data << int32(item->GetEnchantmentId(EnchantmentSlot(i))); data << uint32(item->GetEnchantmentDuration(EnchantmentSlot(i))); data << int32(item->GetEnchantmentCharges(EnchantmentSlot(i))); data << uint8(0); // Slot } data.FlushBits(); data.WriteBit(1); // ServerSideInfo -- Disable for more check data.WriteBit(0); // BidInfo /* ServerSideInfo Added In WoD data << _itemGUID; data << _ownerAccountID; data << uint32((expire_time) * IN_MILLISECONDS); */ data << bidderGUID; data << int64(bid); return true; }
void WorldSession::HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvData) { ObjectGuid guid; guid[0] = recvData.ReadBit(); guid[1] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); guid[4] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[2] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); recvData.FlushBits(); recvData.ReadByteSeq(guid[4]); recvData.ReadByteSeq(guid[1]); recvData.ReadByteSeq(guid[5]); recvData.ReadByteSeq(guid[0]); recvData.ReadByteSeq(guid[2]); recvData.ReadByteSeq(guid[7]); recvData.ReadByteSeq(guid[6]); recvData.ReadByteSeq(guid[3]); SendTaxiStatus(guid); }
void WorldSession::HandleLootRoll(WorldPacket& recvData) { ObjectGuid guid; uint8 itemSlot; uint8 rollType; recvData >> rollType; // 0: pass, 1: need, 2: greed recvData >> itemSlot; uint8 bitOrder[8] = {5, 4, 2, 1, 7, 0, 3, 6}; recvData.ReadBitInOrder(guid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = {3, 7, 0, 4, 2, 1, 5, 6}; recvData.ReadBytesSeq(guid, byteOrder); Group* group = GetPlayer()->GetGroup(); if (!group) return; group->CountRollVote(GetPlayer()->GetGUID(), itemSlot, rollType); switch (rollType) { case ROLL_NEED: GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED, 1); break; case ROLL_GREED: GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED, 1); break; } }
//called when mail is read void WorldSession::HandleMailMarkAsRead(WorldPacket& recvData) { ObjectGuid mailbox; uint32 mailId; recvData >> mailId; recvData.ReadGuidMask(mailbox, 0, 2, 3); recvData.ReadBit(); recvData.ReadGuidMask(mailbox, 4, 6, 7, 1, 5); recvData.FlushBits(); recvData.ReadGuidBytes(mailbox, 1, 7, 2, 5, 6, 3, 4, 0); if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) return; if (Mail* mail = _player->GetMail(mailId)) { if (_player->unReadMails) --_player->unReadMails; mail->checked |= MAIL_CHECK_MASK_READ; mail->state = MAIL_STATE_CHANGED; _player->m_mailsUpdated = true; } }
void WorldSession::HandleActivateTaxiOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ACTIVATETAXI"); ObjectGuid guid; std::vector<uint32> nodes; nodes.resize(2); recvData >> nodes[0] >> nodes[1]; uint8 bitsOrder[8] = { 3, 6, 0, 7, 4, 1, 5, 2 }; recvData.ReadBitInOrder(guid, bitsOrder); recvData.FlushBits(); uint8 bytesOrder[8] = { 3, 0, 4, 5, 7, 1, 6, 2 }; recvData.ReadBytesSeq(guid, bytesOrder); sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ACTIVATETAXI from %d to %d", nodes[0], nodes[1]); Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_FLIGHTMASTER); if (!npc) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleActivateTaxiOpcode - Unit (GUID: %u) not found or you can't interact with it.", uint32(GUID_LOPART(guid))); return; } GetPlayer()->ActivateTaxiPathTo(nodes, npc); }
//Send by client when he click on accept for queue void WorldSession::HandleBfQueueInviteResponse(WorldPacket& recvData) { uint8 accepted; ObjectGuid guid; uint8 bitOrder[8] = {4, 7, 6, 1, 2, 5, 0, 3}; recvData.ReadBitInOrder(guid, bitOrder); accepted = recvData.ReadBit(); recvData.FlushBits(); uint8 byteOrder[8] = {6, 4, 0, 1, 5, 7, 3, 2}; recvData.ReadBytesSeq(guid, byteOrder); sLog->outError(LOG_FILTER_GENERAL, "HandleQueueInviteResponse: GUID:" UI64FMTD " Accepted:%u", (uint64)guid, accepted); if (!accepted) return; Battlefield* bf = sBattlefieldMgr->GetBattlefieldByGUID(guid); if (!bf) return; bf->PlayerAcceptInviteToQueue(_player); }
void WorldSession::HandleSummonResponseOpcode(WorldPacket& recvData) { if (!_player->isAlive() || _player->isInCombat()) return; ObjectGuid summonerGuid; bool agree; summonerGuid[4] = recvData.ReadBit(); summonerGuid[1] = recvData.ReadBit(); summonerGuid[5] = recvData.ReadBit(); summonerGuid[6] = recvData.ReadBit(); summonerGuid[2] = recvData.ReadBit(); agree = recvData.ReadBit(); summonerGuid[0] = recvData.ReadBit(); summonerGuid[3] = recvData.ReadBit(); summonerGuid[7] = recvData.ReadBit(); recvData.FlushBits(); uint8 bytesOrder[8] = { 3, 7, 1, 2, 0, 5, 4, 6 }; recvData.ReadBytesSeq(summonerGuid, bytesOrder); _player->SummonIfPossible(agree); }
//Send by client on clicking in accept or refuse of invitation windows for join game void WorldSession::HandleBfEntryInviteResponse(WorldPacket& recvData) { uint8 accepted; ObjectGuid guid; guid[1] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); guid[4] = recvData.ReadBit(); guid[2] = recvData.ReadBit(); accepted = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[0] = recvData.ReadBit(); recvData.FlushBits(); uint8 byteOrder[8] = {3, 2, 4, 0, 5, 7, 6, 1}; recvData.ReadBytesSeq(guid, byteOrder); sLog->outError(LOG_FILTER_GENERAL, "HandleBattlefieldInviteResponse: GUID:" UI64FMTD " Accepted:%u", uint64(guid), accepted); Battlefield* bf = sBattlefieldMgr->GetBattlefieldByGUID(guid); if (!bf) return; if (accepted) bf->PlayerAcceptInviteToWar(_player); else if (_player->GetZoneId() == bf->GetZoneId()) bf->KickPlayerFromBattlefield(_player->GetGUID()); }
/*this procedure handles clients CMSG_REQUEST_PARTY_MEMBER_STATS request*/ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_REQUEST_PARTY_MEMBER_STATS"); ObjectGuid Guid; auto isFull = recvData.read<uint8>(); uint8 bitOrder[8] = { 5, 3, 4, 1, 6, 0, 2, 7 }; recvData.ReadBitInOrder(Guid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = { 0, 3, 1, 2, 7, 5, 4, 6 }; recvData.ReadBytesSeq(Guid, byteOrder); Player* player = HashMapHolder<Player>::Find(Guid); if (player && player->GetGroup() != GetPlayer()->GetGroup()) return; uint32 mask = GROUP_UPDATE_FLAG_STATUS; if (player) { mask |= GROUP_UPDATE_PLAYER; if (player->GetPet()) mask |= GROUP_UPDATE_PET; } WorldPacket data; BuildPartyMemberStatsChangedPacket(player, &data, mask, Guid, true); SendPacket(&data); }
void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_PETITION_DECLINE"); ObjectGuid petitionGuid; uint8 bitsOrder[8] = { 1, 4, 6, 7, 3, 2, 0, 5 }; recvData.ReadBitInOrder(petitionGuid, bitsOrder); recvData.FlushBits(); uint8 bytesOrder[8] = { 5, 3, 4, 6, 0, 7, 2, 1 }; recvData.ReadBytesSeq(petitionGuid, bytesOrder); sLog->outDebug(LOG_FILTER_NETWORKIO, "Petition %u declined by %u", GUID_LOPART(petitionGuid), _player->GetGUIDLow()); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION); stmt->setUInt32(0, GUID_LOPART(petitionGuid)); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (!result) return; Field* fields = result->Fetch(); ObjectGuid ownerGuid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER); Player* owner = ObjectAccessor::FindPlayer(ownerGuid); if (owner) owner->GetSession()->SendPetitionSignResult(ownerGuid, petitionGuid, PETITION_SIGN_DECLINED); }
void WorldSession::HandlePetitionShowListOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Received CMSG_PETITION_SHOWLIST"); ObjectGuid PetitionGuid; PetitionGuid[4] = recvData.ReadBit(); PetitionGuid[3] = recvData.ReadBit(); PetitionGuid[2] = recvData.ReadBit(); PetitionGuid[7] = recvData.ReadBit(); PetitionGuid[6] = recvData.ReadBit(); PetitionGuid[1] = recvData.ReadBit(); PetitionGuid[0] = recvData.ReadBit(); PetitionGuid[5] = recvData.ReadBit(); recvData.FlushBits(); recvData.ReadByteSeq(PetitionGuid[5]); recvData.ReadByteSeq(PetitionGuid[0]); recvData.ReadByteSeq(PetitionGuid[6]); recvData.ReadByteSeq(PetitionGuid[2]); recvData.ReadByteSeq(PetitionGuid[1]); recvData.ReadByteSeq(PetitionGuid[7]); recvData.ReadByteSeq(PetitionGuid[3]); recvData.ReadByteSeq(PetitionGuid[4]); SendPetitionShowList(PetitionGuid); }
void WorldSession::HandleGroupAssistantLeaderOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_ASSISTANT_LEADER"); Group* group = GetPlayer()->GetGroup(); if (!group) return; if (!group->IsLeader(GetPlayer()->GetGUID())) return; ObjectGuid guid; bool apply; uint8 unk = 0; recvData >> unk; guid[0] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[2] = recvData.ReadBit(); apply = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); guid[4] = recvData.ReadBit(); guid[1] = recvData.ReadBit(); recvData.FlushBits(); uint8 byteOrder[8] = { 6, 3, 2, 5, 7, 1, 0, 4 }; recvData.ReadBytesSeq(guid, byteOrder); group->SetGroupMemberFlag(guid, apply, MEMBER_FLAG_ASSISTANT); group->SendUpdate(); }
void WorldSession::HandleBfQueueRequest(WorldPacket& recvData) { ObjectGuid guid; uint8 bitOrder[8] = {3, 5, 7, 0, 6, 2, 1, 4}; recvData.ReadBitInOrder(guid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = {1, 0, 3, 2, 4, 7, 5, 6}; recvData.ReadBytesSeq(guid, byteOrder); sLog->outError(LOG_FILTER_GENERAL, "HandleBfQueueRequest: GUID:" UI64FMTD " ", (uint64)guid); if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldByGUID(guid)) { if (bf->IsWarTime()) bf->InvitePlayerToWar(_player); else { uint32 timer = bf->GetTimer() / 1000; if (timer < 15 * MINUTE) bf->InvitePlayerToQueue(_player); } } }
void WorldSession::HandleLeaveChannel(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Opcode %u", recvPacket.GetOpcode()); uint32 channelId; std::string channelname; recvPacket >> channelId; uint32 length = recvPacket.ReadBits(7); recvPacket.FlushBits(); channelname = recvPacket.ReadString(length); if (channelname.empty()) return; if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) { if (Channel* chn = cMgr->GetChannel(channelname, _player)) chn->Leave(_player->GetGUID(), true); cMgr->LeftChannel(channelname); } }
//Checked void WorldSession::HandleChannelUnban(WorldPacket& recvPacket) { time_t now = time(NULL); if (now - timeLastChannelUnbanCommand < 5) return; else timeLastChannelUnbanCommand = now; sLog->outDebug(LOG_FILTER_NETWORKIO, "Opcode %u", recvPacket.GetOpcode()); size_t nameLength = recvPacket.ReadBits(9); size_t channelLength = recvPacket.ReadBits(7); recvPacket.FlushBits(); 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->UnBan(_player->GetGUID(), otp.c_str()); }
void WorldSession::HandleGuildSetNoteOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_NOTE"); ObjectGuid playerGuid; playerGuid[1] = recvPacket.ReadBit(); uint32 noteLength = recvPacket.ReadBits(8); playerGuid[4] = recvPacket.ReadBit(); playerGuid[2] = recvPacket.ReadBit(); bool type = recvPacket.ReadBit(); // 0 == Officer, 1 == Public playerGuid[3] = recvPacket.ReadBit(); playerGuid[5] = recvPacket.ReadBit(); playerGuid[0] = recvPacket.ReadBit(); playerGuid[6] = recvPacket.ReadBit(); playerGuid[7] = recvPacket.ReadBit(); recvPacket.FlushBits(); /* recvPacket.ReadBit(); //noteLength & 0x1F */ recvPacket.ReadByteSeq(playerGuid[5]); recvPacket.ReadByteSeq(playerGuid[1]); recvPacket.ReadByteSeq(playerGuid[6]); std::string note = recvPacket.ReadString(noteLength); recvPacket.ReadByteSeq(playerGuid[0]); recvPacket.ReadByteSeq(playerGuid[7]); recvPacket.ReadByteSeq(playerGuid[4]); recvPacket.ReadByteSeq(playerGuid[3]); recvPacket.ReadByteSeq(playerGuid[2]); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleSetMemberNote(this, note, playerGuid, type); }
void WorldSession::HandleJoinChannel(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Opcode %u", recvPacket.GetOpcode()); uint32 channelId; uint32 channelLength = 0; uint32 passLength = 0; uint8 hasVoice; uint8 joinedByZoneUpdate; std::string channelName, pass; recvPacket >> channelId; passLength = recvPacket.ReadBits(7); joinedByZoneUpdate = recvPacket.ReadBit(); channelLength = recvPacket.ReadBits(7); hasVoice = recvPacket.ReadBit(); recvPacket.FlushBits(); pass = recvPacket.ReadString(passLength); channelName = recvPacket.ReadString(channelLength); if (channelId) { ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(channelId); if (!channel) return; AreaTableEntry const* current_zone = GetAreaEntryByAreaID(_player->GetZoneId()); if (!current_zone) return; if (!_player->CanJoinConstantChannelInZone(channel, current_zone)) return; } if (channelName.empty()) return; if (!ChatHandler(this).isValidChatMessage(channelName.c_str())) return; if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) { cMgr->team = _player->GetTeam(); if (Channel* chn = cMgr->GetJoinChannel(channelName, channelId)) chn->Join(_player->GetGUID(), pass.c_str()); } }
void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_MOTD"); uint32 motdLength = recvPacket.ReadBits(10); recvPacket.FlushBits(); std::string motd = recvPacket.ReadString(motdLength); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleSetMOTD(this, motd); }
void WorldSession::HandleGroupSwapSubGroupOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_SWAP_SUB_GROUP"); ObjectGuid guid1; ObjectGuid guid2; uint8 originalGroup; uint8 targetGroup; recvData >> originalGroup; guid1[4] = recvData.ReadBit(); guid1[6] = recvData.ReadBit(); guid1[5] = recvData.ReadBit(); guid1[0] = recvData.ReadBit(); guid2[3] = recvData.ReadBit(); guid2[4] = recvData.ReadBit(); guid1[7] = recvData.ReadBit(); guid1[2] = recvData.ReadBit(); guid2[7] = recvData.ReadBit(); guid2[1] = recvData.ReadBit(); guid2[5] = recvData.ReadBit(); guid2[6] = recvData.ReadBit(); guid2[0] = recvData.ReadBit(); guid1[3] = recvData.ReadBit(); guid2[2] = recvData.ReadBit(); guid1[1] = recvData.ReadBit(); recvData.FlushBits(); recvData.ReadByteSeq(guid2[0]); recvData.ReadByteSeq(guid1[5]); recvData.ReadByteSeq(guid1[0]); recvData.ReadByteSeq(guid2[7]); recvData.ReadByteSeq(guid1[6]); recvData.ReadByteSeq(guid2[1]); recvData.ReadByteSeq(guid2[5]); recvData.ReadByteSeq(guid1[7]); recvData.ReadByteSeq(guid1[4]); recvData.ReadByteSeq(guid1[3]); recvData.ReadByteSeq(guid2[3]); recvData.ReadByteSeq(guid1[1]); recvData.ReadByteSeq(guid1[4]); recvData.ReadByteSeq(guid2[6]); recvData.ReadByteSeq(guid2[2]); recvData.ReadByteSeq(guid2[2]); recvData >> targetGroup; // The move should be made here! }
void WorldSession::HandlePartyAssignmentOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_ASSIGNMENT"); Group* group = GetPlayer()->GetGroup(); if (!group) return; uint64 senderGuid = GetPlayer()->GetGUID(); if (!group->IsLeader(senderGuid) && !group->IsAssistant(senderGuid) && !(group->GetGroupType() & GROUPTYPE_EVERYONE_IS_ASSISTANT)) return; uint8 assignment; bool apply; ObjectGuid guid; recvData >> assignment; recvData.read_skip<uint8>(); // Unknown. guid[0] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[1] = recvData.ReadBit(); guid[2] = recvData.ReadBit(); apply = recvData.ReadBit(); guid[4] = recvData.ReadBit(); recvData.FlushBits(); uint8 byteOrder[8] = { 4, 3, 1, 5, 2, 6, 7, 0 }; recvData.ReadBytesSeq(guid, byteOrder); switch (assignment) { case GROUP_ASSIGN_MAINASSIST: group->RemoveUniqueGroupMemberFlag(MEMBER_FLAG_MAINASSIST); group->SetGroupMemberFlag(guid, apply, MEMBER_FLAG_MAINASSIST); break; case GROUP_ASSIGN_MAINTANK: group->RemoveUniqueGroupMemberFlag(MEMBER_FLAG_MAINTANK); // Remove main assist flag from current if any. group->SetGroupMemberFlag(guid, apply, MEMBER_FLAG_MAINTANK); break; default: break; } group->SendUpdate(); }
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); }
void WorldSession::HandleGroupEveryoneIsAssistantOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_SET_EVERYONE_IS_ASSISTANT"); Group* group = GetPlayer()->GetGroup(); if (!group) return; if (!group->IsLeader(GetPlayer()->GetGUID())) return; recvData.read_skip<uint8>(); bool apply = recvData.ReadBit(); recvData.FlushBits(); group->ChangeFlagEveryoneAssistant(apply); }
void WorldSession::HandleOptOutOfLootOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_OPT_OUT_OF_LOOT"); bool passOnLoot = recvData.ReadBit(); recvData.FlushBits(); // ignore if player not loaded if (!GetPlayer()) // needed because STATUS_AUTHED { if (passOnLoot) sLog->outError(LOG_FILTER_NETWORKIO, "CMSG_OPT_OUT_OF_LOOT value<>0 for not-loaded character!"); return; } GetPlayer()->SetPassOnGroupLoot(passOnLoot); }
void WorldSession::HandleChannelList(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Opcode %u", recvPacket.GetOpcode()); uint32 length = recvPacket.ReadBits(7); recvPacket.FlushBits(); std::string channelname = recvPacket.ReadString(length); if (!ChatHandler(this).isValidChatMessage(channelname.c_str())) return; if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) if (Channel* chn = cMgr->GetChannel(channelname, _player)) chn->List(_player); }
void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) { time_t now = time(NULL); if (now - timeLastGuildInviteCommand < 5) return; else timeLastGuildInviteCommand = now; sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_INVITE"); uint32 nameLength = recvPacket.ReadBits(7); recvPacket.FlushBits(); std::string invitedName = recvPacket.ReadString(nameLength); if (normalizePlayerName(invitedName)) if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleInviteMember(this, invitedName); }
void BlackMarketMgr::BuildBlackMarketAuctionsPacket(WorldPacket& data, uint32 guidLow) { uint32 count = 0; data << uint32(time(NULL)); for (auto const &kvPair : m_bmAuctionsMap) if (kvPair.second->IsActive()) ++count; data.WriteBits(count, 18); ByteBuffer datas; for (auto const &kvPair : m_bmAuctionsMap) { auto const auction = kvPair.second; if (!auction->IsActive()) continue; // Is owner data.WriteBit(guidLow == auction->bidder); uint64 currentBid = auction->bidder ? auction->bid : 0; uint64 nextBidPrice = auction->bidder ? auction->bid + GetAuctionOutBid(auction->bid) : auction->bid; uint64 upPrice = auction->bidder ? nextBidPrice - currentBid : 1; datas << uint32(auction->bmTemplate->itemEntry); datas << uint32(auction->bmTemplate->seller); datas << uint32(auction->id); datas << uint32(auction->bidderCount); datas << uint32(auction->TimeLeft()); datas << uint64(currentBid); datas << uint32(auction->bmTemplate->itemCount); datas << uint32(0); // Unk datas << uint64(nextBidPrice); datas << uint64(upPrice); } data.FlushBits(); if (datas.size()) data.append(datas); TC_LOG_DEBUG("network", ">> Sent %u BlackMarket Auctions", count); }
void WorldSession::HandleLootMethodOpcode(WorldPacket & recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_LOOT_METHOD"); uint8 lootMethod; ObjectGuid lootMaster; uint32 lootThreshold; recvData >> lootMethod; recvData.read_skip<uint8>(); recvData >> lootThreshold; uint8 bitOrder[8] = { 3, 5, 0, 6, 2, 1, 7, 4 }; recvData.ReadBitInOrder(lootMaster, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = { 6, 0, 3, 5, 2, 7, 4, 1 }; recvData.ReadBytesSeq(lootMaster, byteOrder); Group* group = GetPlayer()->GetGroup(); if (!group) return; /** error handling **/ if (!group->IsLeader(GetPlayer()->GetGUID())) return; if (lootMethod > NEED_BEFORE_GREED) return; if (lootThreshold < ITEM_QUALITY_UNCOMMON || lootThreshold > ITEM_QUALITY_ARTIFACT) return; if (lootMethod == MASTER_LOOT && !group->IsMember(lootMaster)) return; /********************/ // everything's fine, do it group->SetLootMethod((LootMethod)lootMethod); group->SetLooterGuid(lootMaster); group->SetLootThreshold((ItemQualities)lootThreshold); group->SendUpdate(); }
void WorldSession::HandleGuildQueryRanksOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_QUERY_RANKS"); ObjectGuid guildGuid; uint8 bitOrder[8] = { 4, 1, 6, 7, 5, 3, 0, 2 }; recvData.ReadBitInOrder(guildGuid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = { 0, 3, 4, 5, 6, 1, 2, 7 }; recvData.ReadBytesSeq(guildGuid, byteOrder); if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) if (guild->IsMember(_player->GetGUID())) guild->HandleGuildRanks(this); }
void WorldSession::HandleJoinChannel(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Opcode %u", recvPacket.GetOpcode()); uint32 channelId; uint32 channelLength, passLength; std::string channelName, pass; recvPacket >> channelId; recvPacket.ReadBit(); // unknowns channelLength = recvPacket.ReadBits(7); channelLength <<= 1; channelLength += recvPacket.ReadBit(); //If it's an odd length. passLength = recvPacket.ReadBits(7); passLength <<= 1; passLength += recvPacket.ReadBit(); recvPacket.FlushBits(); channelName = recvPacket.ReadString(channelLength); pass = recvPacket.ReadString(passLength); if (channelId) { ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(channelId); if (!channel) return; AreaTableEntry const* current_zone = GetAreaEntryByAreaID(_player->GetZoneId()); if (!current_zone) return; if (!_player->CanJoinConstantChannelInZone(channel, current_zone)) return; } if (channelName.empty()) return; if (ChannelMgr* cMgr = channelMgr(_player->GetTeam())) { cMgr->team = _player->GetTeam(); if (Channel* chn = cMgr->GetJoinChannel(channelName, channelId)) chn->Join(_player->GetGUID(), pass.c_str()); } }
void BlackMarketMgr::BuildBlackMarketAuctionsPacket(WorldPacket& data, uint32 guidLow) { uint32 count = 0; ByteBuffer datas; data << uint32(time(NULL)); for (BMAuctionEntryMap::const_iterator itr = GetAuctionsBegin(); itr != GetAuctionsEnd(); ++itr) if (itr->second->IsActive()) ++count; data.WriteBits(count, 18); for (BMAuctionEntryMap::const_iterator itr = GetAuctionsBegin(); itr != GetAuctionsEnd(); ++itr) { BMAuctionEntry* auction = itr->second; if (!auction->IsActive()) continue; data.WriteBit(guidLow == auction->bidder); // Is owner uint64 currentBid = auction->bidder ? auction->bid : 0; uint64 nextBidPrice = auction->bidder ? auction->bid + GetAuctionOutBid(auction->bid) : auction->bid; uint64 upPrice = auction->bidder ? nextBidPrice - currentBid : 1; datas << uint32(auction->bm_template->itemEntry); datas << uint64(nextBidPrice); datas << uint64(currentBid); datas << uint32(0); // Unk datas << uint32(auction->id); datas << uint32(auction->bm_template->seller); datas << uint64(upPrice); datas << uint32(auction->TimeLeft()); datas << uint32(auction->bidderCount); datas << uint32(auction->bm_template->itemCount); } data.FlushBits(); if (datas.size()) data.append(datas); sLog->outInfo(LOG_FILTER_NETWORKIO, ">> Sent %u BlackMarket Auctions", count); }