/*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::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::HandleLootMethodOpcode(WorldPacket & recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_LOOT_METHOD"); uint8 lootMethod; ObjectGuid lootMaster; uint32 lootThreshold; recvData >> lootThreshold; recvData >> lootMethod; recvData.read_skip<uint32>(); uint8 bitOrder[8] = { 7, 1, 2, 0, 4, 5, 6, 3 }; recvData.ReadBitInOrder(lootMaster, bitOrder); uint8 byteOrder[8] = { 7, 1, 3, 4, 6, 5, 0, 2 }; recvData.ReadBytesSeq(lootMaster, byteOrder); Group* group = GetPlayer()->GetGroup(); if (!group) return; /** error handling **/ if (!group->IsLeader(GetPlayer()->GetGUID())) return; /********************/ // everything's fine, do it group->SetLootMethod((LootMethod)lootMethod); group->SetLooterGuid(lootMaster); group->SetLootThreshold((ItemQualities)lootThreshold); group->SendUpdate(); }
void WorldSession::HandleLootRoll(WorldPacket& recvData) { ObjectGuid guid; uint8 itemSlot; uint8 rollType; recvData >> itemSlot; //always 0 recvData >> rollType; // 0: pass, 1: need, 2: greed uint8 bitOrder[8] = {4, 5, 3, 2, 6, 1, 0, 7}; recvData.ReadBitInOrder(guid, bitOrder); uint8 byteOrder[8] = {5, 6, 1, 3, 2, 4, 7, 0}; 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; } }
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::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); }
//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()); }
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::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); }
void WorldSession::HandleMoveTeleportAck(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "MSG_MOVE_TELEPORT_ACK"); ObjectGuid guid; uint32 flags, time; recvPacket >> flags >> time; uint8 bitOrder[8] = {0, 7, 6, 2, 5, 1, 4, 3}; recvPacket.ReadBitInOrder(guid, bitOrder); uint8 byteOrder[8] = {5, 4, 0, 1, 3, 7, 6, 2}; recvPacket.ReadBytesSeq(guid, byteOrder); sLog->outDebug(LOG_FILTER_NETWORKIO, "Guid " UI64FMTD, uint64(guid)); sLog->outDebug(LOG_FILTER_NETWORKIO, "Flags %u, time %u", flags, time/IN_MILLISECONDS); Player* plMover = _player->m_mover->ToPlayer(); if (!plMover || !plMover->IsBeingTeleportedNear()) return; if (guid != plMover->GetGUID()) return; plMover->SetSemaphoreTeleportNear(false); plMover->SetIgnoreMovementCount(5); uint32 old_zone = plMover->GetZoneId(); WorldLocation const& dest = plMover->GetTeleportDest(); plMover->UpdatePosition(dest, true); uint32 newzone, newarea; plMover->GetZoneAndAreaId(newzone, newarea); plMover->UpdateZone(newzone, newarea); // new zone if (old_zone != newzone) { // honorless target if (plMover->pvpInfo.inHostileArea) plMover->CastSpell(plMover, 2479, true); // in friendly area else if (plMover->IsPvP() && !plMover->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP)) plMover->UpdatePvP(false, false); } // resummon pet plMover->ResummonPetTemporaryUnSummonedIfAny(); //lets process all delayed operations on successful teleport plMover->ProcessDelayedOperations(); }
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::HandleLootMasterAskForRoll(WorldPacket& recvData) { ObjectGuid guid = 0; uint8 slot = 0; recvData >> slot; uint8 bitOrder[8] = {4, 3, 7, 6, 5, 1, 0, 2}; recvData.ReadBitInOrder(guid, bitOrder); uint8 byteOrder[8] = {4, 1, 0, 2, 5, 6, 7, 3}; recvData.ReadBytesSeq(guid, byteOrder); if (!_player->GetGroup() || _player->GetGroup()->GetLooterGuid() != _player->GetGUID()) { _player->SendLootRelease(GetPlayer()->GetLootGUID()); return; } Loot* loot = NULL; if (IS_CRE_OR_VEH_GUID(GetPlayer()->GetLootGUID())) { Creature* creature = GetPlayer()->GetMap()->GetCreature(guid); if (!creature) return; loot = &creature->loot; } else if (IS_GAMEOBJECT_GUID(GetPlayer()->GetLootGUID())) { GameObject* pGO = GetPlayer()->GetMap()->GetGameObject(guid); if (!pGO) return; loot = &pGO->loot; } if (!loot || loot->alreadyAskedForRoll) return; if (slot >= loot->items.size() + loot->quest_items.size()) { sLog->outDebug(LOG_FILTER_LOOT, "MasterLootItem: Player %s might be using a hack! (slot %d, size %lu)", GetPlayer()->GetName(), slot, (unsigned long)loot->items.size()); return; } LootItem& item = slot >= loot->items.size() ? loot->quest_items[slot - loot->items.size()] : loot->items[slot]; loot->alreadyAskedForRoll = true; _player->GetGroup()->DoRollForAllMembers(guid, slot, _player->GetMapId(), loot, item, _player); }
void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_REMOVE"); ObjectGuid playerGuid; uint8 bitOrder[8] = {5, 0, 7, 2, 6, 3, 4, 1}; recvPacket.ReadBitInOrder(playerGuid, bitOrder); uint8 byteOrder[8] = {1, 4, 2, 5, 0, 7, 6, 3}; recvPacket.ReadBytesSeq(playerGuid, byteOrder); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleRemoveMember(this, playerGuid); }
void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_DEMOTE"); ObjectGuid targetGuid; uint8 bitOrder[8] = {7, 1, 5, 6, 2, 3, 0, 4}; recvPacket.ReadBitInOrder(targetGuid, bitOrder); uint8 byteOrder[8] = {1, 2, 7, 5, 6, 0, 4, 3}; recvPacket.ReadBytesSeq(targetGuid, byteOrder); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleUpdateMemberRank(this, targetGuid, 0); }
void WorldSession::HandleGuildQueryRanksOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_QUERY_RANKS"); ObjectGuid guildGuid; uint8 bitOrder[8] = {2, 1, 7, 3, 4, 6, 0, 5}; recvData.ReadBitInOrder(guildGuid, bitOrder); uint8 byteOrder[8] = {5, 3, 4, 1, 2, 0, 6, 7}; recvData.ReadBytesSeq(guildGuid, byteOrder); if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) if (guild->IsMember(_player->GetGUID())) guild->HandleGuildRanks(this); }
void WorldSession::HandleGuildFinderDeclineRecruit(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_LF_GUILD_DECLINE_RECRUIT"); ObjectGuid playerGuid; uint8 bitOrder[8] = {5, 1, 3, 7, 6, 2, 0, 4}; recvPacket.ReadBitInOrder(playerGuid, bitOrder); uint8 byteOrder[8] = {4, 2, 3, 7, 6, 0, 1, 5}; recvPacket.ReadBytesSeq(playerGuid, byteOrder); if (!IS_PLAYER_GUID(playerGuid)) return; sGuildFinderMgr->RemoveMembershipRequest(GUID_LOPART(playerGuid), GetPlayer()->GetGuildId()); }
//Deprecated Handler void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_PROMOTE"); ObjectGuid targetGuid; uint32 rank = 0; recvPacket >> rank; uint8 bitOrder[8] = {3, 5, 7, 4, 6, 0, 1, 2}; recvPacket.ReadBitInOrder(targetGuid, bitOrder); uint8 byteOrder[8] = {2, 6, 7, 4, 0, 3, 5, 1}; recvPacket.ReadBytesSeq(targetGuid, byteOrder); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleUpdateMemberRank(this, targetGuid, rank); }
void WorldSession::HandleGuildFinderRemoveRecruit(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_LF_GUILD_REMOVE_RECRUIT"); ObjectGuid guildGuid; uint8 bitOrder[8] = {3, 7, 4, 2, 6, 1, 0, 5}; recvPacket.ReadBitInOrder(guildGuid, bitOrder); uint8 byteOrder[8] = {6, 2, 7, 1, 5, 4, 0, 3}; recvPacket.ReadBytesSeq(guildGuid, byteOrder); if (!IS_GUILD_GUID(guildGuid)) return; sGuildFinderMgr->RemoveMembershipRequest(GetPlayer()->GetGUIDLow(), GUID_LOPART(guildGuid)); }
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::HandleRaidTargetUpdateOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_RAID_TARGET_UPDATE"); Group* group = GetPlayer()->GetGroup(); if (!group) return; uint8 x, unk; recvData >> unk; recvData >> x; /** error handling **/ /********************/ // everything's fine, do it if (x == 0xFF) // target icon request group->SendTargetIconList(this); else // target icon update { if (group->isRaidGroup() && !group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID()) && !(group->GetGroupType() & GROUPTYPE_EVERYONE_IS_ASSISTANT)) return; ObjectGuid guid; uint8 bitOrder[8] = { 6, 3, 2, 5, 4, 1, 0, 7 }; recvData.ReadBitInOrder(guid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = { 0, 3, 4, 2, 5, 1, 7, 6 }; recvData.ReadBytesSeq(guid, byteOrder); if (IS_PLAYER_GUID(guid)) { Player* target = ObjectAccessor::FindPlayer(guid); if (!target || target->IsHostileTo(GetPlayer())) return; } group->SetTargetIcon(x, _player->GetGUID(), guid); } }
void WorldSession::HandleGuildAssignRankOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ASSIGN_MEMBER_RANK"); ObjectGuid targetGuid; ObjectGuid setterGuid; uint32 rankId; recvPacket >> rankId; uint8 bitOrder[8] = {3, 5, 7, 4, 6, 0, 1, 2}; recvPacket.ReadBitInOrder(targetGuid, bitOrder); uint8 byteOrder[8] = {2, 6, 7, 4, 0, 3, 5, 1}; recvPacket.ReadBytesSeq(targetGuid, byteOrder); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleSetMemberRank(this, targetGuid, GetPlayer()->GetGUID(), rankId); }
void WorldSession::HandleBfExitQueueRequest(WorldPacket& recvData) { ObjectGuid guid; uint8 bitOrder[8] = {4, 0, 1, 5, 3, 7, 6, 2}; recvData.ReadBitInOrder(guid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = {0, 6, 2, 5, 4, 1, 7, 3}; recvData.ReadBytesSeq(guid, byteOrder); sLog->outError(LOG_FILTER_GENERAL, "HandleBfExitQueueRequest: GUID:" UI64FMTD " ", (uint64)guid); SendBfLeaveMessage(guid); if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldByGUID(guid)) bf->AskToLeaveQueue(_player); }
void WorldSession::HandleLootReleaseOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_LOOT_RELEASE"); // cheaters can modify lguid to prevent correct apply loot release code and re-loot // use internal stored guid ObjectGuid guid; uint8 bitOrder[8] = { 7, 5, 1, 3, 4, 0, 2, 6 }; recvData.ReadBitInOrder(guid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = { 5, 6, 3, 1, 7, 0, 2, 4 }; recvData.ReadBytesSeq(guid, byteOrder); if (uint64 lguid = GetPlayer()->GetLootGUID()) if (lguid == guid) DoLootRelease(lguid); }
void WorldSession::HandleGroupChangeSubGroupOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_CHANGE_SUB_GROUP"); // we will get correct pointer for group here, so we don't have to check if group is BG raid Group* group = GetPlayer()->GetGroup(); if (!group) return; time_t now = time(NULL); if (now - timeLastChangeSubGroupCommand < 2) return; else timeLastChangeSubGroupCommand = now; ObjectGuid guid; uint8 groupNr, unk; recvData >> unk >> groupNr; uint8 bitsOrder[8] = { 1, 3, 7, 2, 0, 5, 4, 6 }; recvData.ReadBitInOrder(guid, bitsOrder); recvData.FlushBits(); uint8 bytesOrder[8] = { 7, 0, 2, 4, 5, 3, 6, 1 }; recvData.ReadBytesSeq(guid, bytesOrder); if (groupNr >= MAX_RAID_SUBGROUPS) return; uint64 senderGuid = GetPlayer()->GetGUID(); if (!group->IsLeader(senderGuid) && !group->IsAssistant(senderGuid) && !(group->GetGroupType() & GROUPTYPE_EVERYONE_IS_ASSISTANT)) return; if (!group->HasFreeSlotSubGroup(groupNr)) return; if (Player* movedPlayer = sObjectAccessor->FindPlayer(guid)) group->ChangeMembersGroup(guid, groupNr); }
//this void sends player info about his auctions void WorldSession::HandleAuctionListOwnerItems(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_LIST_OWNER_ITEMS"); uint32 listfrom; ObjectGuid guid; recvData >> listfrom; // not used in fact (this list not have page control in client) uint8 bitOrder[8] = { 6, 0, 7, 2, 3, 1, 5, 4 }; recvData.ReadBitInOrder(guid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = { 2, 5, 6, 4, 3, 7, 1, 0 }; recvData.ReadBytesSeq(guid, byteOrder); Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_AUCTIONEER); if (!creature) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleAuctionListOwnerItems - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid))); return; } // remove fake death if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction()); WorldPacket data(SMSG_AUCTION_OWNER_LIST_RESULT, (4 + 4 + 4)); data << uint32(0); // amount place holder uint32 count = 0; uint32 totalcount = 0; auctionHouse->BuildListOwnerItems(data, _player, count, totalcount); data.put<uint32>(0, count); data << uint32(totalcount); data << uint32(0); SendPacket(&data); }
void WorldSession::HandlePetitionQueryOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_PETITION_QUERY"); // ok uint32 guildId; ObjectGuid petitionGuid; recvData >> guildId; uint8 bitsOrder[8] = { 1, 3, 4, 7, 5, 0, 2, 6 }; recvData.ReadBitInOrder(petitionGuid, bitsOrder); recvData.FlushBits(); uint8 bytesOrder[8] = { 6, 5, 1, 7, 4, 3, 2, 0 }; recvData.ReadBytesSeq(petitionGuid, bytesOrder); sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_PETITION_QUERY Petition GUID %u Guild GUID %u", GUID_LOPART(petitionGuid), guildId); SendPetitionQueryOpcode(uint64(guildId)); }
void WorldSession::HandleSetActiveMoverOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_SET_ACTIVE_MOVER"); ObjectGuid guid; recvPacket.ReadBit(); //unk uint8 bitsOrder[8] = { 1, 3, 2, 6, 7, 5, 4, 0 }; recvPacket.ReadBitInOrder(guid, bitsOrder); recvPacket.FlushBits(); uint8 bytesOrder[8] = { 5, 1, 7, 2, 6, 3, 4, 0 }; recvPacket.ReadBytesSeq(guid, bytesOrder); /*if (GetPlayer()->IsInWorld()) { if (_player->m_mover->GetGUID() != guid) sLog->outError(LOG_FILTER_NETWORKIO, "HandleSetActiveMoverOpcode: incorrect mover guid: mover is " UI64FMTD " (%s - Entry: %u) and should be " UI64FMTD, uint64(guid), GetLogNameForGuid(guid), GUID_ENPART(guid), _player->m_mover->GetGUID()); }*/ }
//void called when player click on auctioneer npc void WorldSession::HandleAuctionHelloOpcode(WorldPacket& recvData) { ObjectGuid guid; uint8 bitOrder[8] = { 7, 4, 6, 2, 0, 1, 3, 5 }; recvData.ReadBitInOrder(guid, bitOrder); uint8 byteOrder[8] = { 4, 2, 6, 0, 5, 3, 7, 1 }; recvData.ReadBytesSeq(guid, byteOrder); Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_AUCTIONEER); if (!unit) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleAuctionHelloOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid))); return; } // remove fake death if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); SendAuctionHello((ObjectGuid)guid, unit); }
void WorldSession::HandleGuildSetNoteOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_NOTE"); ObjectGuid playerGuid; playerGuid[0] = recvPacket.ReadBit(); playerGuid[2] = recvPacket.ReadBit(); playerGuid[7] = recvPacket.ReadBit(); playerGuid[3] = recvPacket.ReadBit(); bool type = recvPacket.ReadBit(); // 0 == Officer, 1 == Public uint32 noteLength = recvPacket.ReadBits(8); recvPacket.ReadBit(); //noteLength & 0x1F playerGuid[4] = recvPacket.ReadBit(); playerGuid[6] = recvPacket.ReadBit(); playerGuid[5] = recvPacket.ReadBit(); playerGuid[1] = recvPacket.ReadBit(); recvPacket.FlushBits(); /*playerGuid[1] = recvPacket.ReadBit(); playerGuid[4] = recvPacket.ReadBit(); playerGuid[5] = recvPacket.ReadBit(); playerGuid[3] = recvPacket.ReadBit(); playerGuid[0] = recvPacket.ReadBit(); playerGuid[7] = recvPacket.ReadBit(); bool type = recvPacket.ReadBit(); // 0 == Officer, 1 == Public playerGuid[6] = recvPacket.ReadBit(); uint32 noteLength = recvPacket.ReadBits(8); playerGuid[2] = recvPacket.ReadBit(); */ std::string note = recvPacket.ReadString(noteLength); uint8 byteOrder[8] = {2, 5, 0, 3, 7, 4, 6, 1}; recvPacket.ReadBytesSeq(playerGuid, byteOrder); if (Guild* guild = _GetPlayerGuild(this, true)) guild->HandleSetMemberNote(this, note, playerGuid, type); }