diff options
author | Shauren <shauren.trinity@gmail.com> | 2013-07-27 11:47:35 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2013-07-27 11:47:35 +0200 |
commit | 1be55d53118a6ca291486d08a8cd2e52d770ff1d (patch) | |
tree | 77e92839586dd200542073c4ccf65804ab77ad42 /src/server/game/Handlers/GroupHandler.cpp | |
parent | 7cdaf175385a84ec099c02c78ef7311801b611ec (diff) |
Core/PacketIO: Implemented phase notifications for group update packets
Diffstat (limited to 'src/server/game/Handlers/GroupHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/GroupHandler.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index be91a04061e..74975e48255 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -928,6 +928,9 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask == GROUP_UPDATE_FLAG_NONE) return; + std::set<uint32> phases; + player->GetPhaseMgr().GetActivePhases(phases); + if (mask & GROUP_UPDATE_FLAG_POWER_TYPE) // if update power type, update current/max power also mask |= (GROUP_UPDATE_FLAG_CUR_POWER | GROUP_UPDATE_FLAG_MAX_POWER); @@ -1155,9 +1158,10 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_PHASE) { - *data << uint32(8); // either 0 or 8, same unk found in SMSG_PHASESHIFT - *data << uint32(0); // byte count in next block - // for (count) *data << uint16(phaseId) + data << uint32(phases.empty() ? 8 : 0); + data << uint32(phases.size()); + for (std::set<uint32>::const_iterator itr = phases.begin(); itr != phases.end(); ++itr) + data << uint16(*itr); } } @@ -1182,6 +1186,8 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData) Pet* pet = player->GetPet(); Powers powerType = player->getPowerType(); + std::set<uint32> phases; + player->GetPhaseMgr().GetActivePhases(phases); WorldPacket data(SMSG_PARTY_MEMBER_STATS_FULL, 4+2+2+2+1+2*6+8+1+8); data << uint8(0); // only for SMSG_PARTY_MEMBER_STATS_FULL, probably arena/bg related @@ -1202,6 +1208,9 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData) if (player->GetVehicle()) updateFlags |= GROUP_UPDATE_FLAG_VEHICLE_SEAT; + if (!phases.empty()) + updateFlags |= GROUP_UPDATE_FLAG_PHASE; + uint16 playerStatus = MEMBER_STATUS_ONLINE; if (player->IsPvP()) playerStatus |= MEMBER_STATUS_PVP; @@ -1292,8 +1301,8 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData) // GROUP_UPDATE_FLAG_PET_AURAS uint64 petAuraMask = 0; - maskPos = data.wpos(); data << uint8(1); + maskPos = data.wpos(); data << uint64(petAuraMask); // placeholder data << uint32(MAX_AURAS); // count if (pet) @@ -1328,9 +1337,10 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData) if (updateFlags & GROUP_UPDATE_FLAG_PHASE) { - data << uint32(8); // either 0 or 8, same unk found in SMSG_PHASESHIFT - data << uint32(0); // byte count in next block - // for (count) *data << uint16(phaseId) + data << uint32(phases.empty() ? 8 : 0); + data << uint32(phases.size()); + for (std::set<uint32>::const_iterator itr = phases.begin(); itr != phases.end(); ++itr) + data << uint16(*itr); } SendPacket(&data); |