diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index d57fdfdd250..a612cd57d4d 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -485,6 +485,9 @@ bool Group::AddMember(Player* player) } } player->SetGroupUpdateFlag(GROUP_UPDATE_FULL); + if (player->GetPet()) + player->SetGroupUpdateFlag(GROUP_UPDATE_PET); + UpdatePlayerOutOfRange(player); // quest related GO state dependent from raid membership diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index fc086159b02..1b492da8f44 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -120,14 +120,26 @@ enum GroupUpdateFlags GROUP_UPDATE_FLAG_PET_AURAS = 0x00080000, // [see GROUP_UPDATE_FLAG_AURAS] GROUP_UPDATE_FLAG_VEHICLE_SEAT = 0x00100000, // int32 (vehicle seat id) GROUP_UPDATE_FLAG_PHASE = 0x00200000, // int32 (unk), uint32 (phase count), for (count) uint16(phaseId) + GROUP_UPDATE_FLAG_UNK400000 = 0x00400000, + GROUP_UPDATE_FLAG_UNK800000 = 0x00800000, + GROUP_UPDATE_FLAG_UNK1000000 = 0x01000000, + GROUP_UPDATE_FLAG_UNK2000000 = 0x02000000, + GROUP_UPDATE_FLAG_UNK4000000 = 0x04000000, + GROUP_UPDATE_FLAG_UNK8000000 = 0x08000000, + GROUP_UPDATE_FLAG_UNK10000000 = 0x10000000, + GROUP_UPDATE_FLAG_UNK20000000 = 0x20000000, + GROUP_UPDATE_FLAG_UNK40000000 = 0x40000000, + GROUP_UPDATE_FLAG_UNK80000000 = 0x80000000, GROUP_UPDATE_PET = GROUP_UPDATE_FLAG_PET_GUID | GROUP_UPDATE_FLAG_PET_NAME | GROUP_UPDATE_FLAG_PET_MODEL_ID | GROUP_UPDATE_FLAG_PET_CUR_HP | GROUP_UPDATE_FLAG_PET_MAX_HP | GROUP_UPDATE_FLAG_PET_POWER_TYPE | GROUP_UPDATE_FLAG_PET_CUR_POWER | GROUP_UPDATE_FLAG_PET_MAX_POWER | GROUP_UPDATE_FLAG_PET_AURAS, // all pet flags GROUP_UPDATE_FULL = GROUP_UPDATE_FLAG_STATUS | GROUP_UPDATE_FLAG_CUR_HP | GROUP_UPDATE_FLAG_MAX_HP | GROUP_UPDATE_FLAG_POWER_TYPE | GROUP_UPDATE_FLAG_CUR_POWER | GROUP_UPDATE_FLAG_MAX_POWER | - GROUP_UPDATE_FLAG_LEVEL | GROUP_UPDATE_FLAG_ZONE | GROUP_UPDATE_FLAG_POSITION | - GROUP_UPDATE_FLAG_AURAS | GROUP_UPDATE_PET | GROUP_UPDATE_FLAG_PHASE // all known flags, except UNK100 and VEHICLE_SEAT + GROUP_UPDATE_FLAG_LEVEL | GROUP_UPDATE_FLAG_ZONE | GROUP_UPDATE_FLAG_UNK100 |GROUP_UPDATE_FLAG_POSITION | + GROUP_UPDATE_FLAG_AURAS | GROUP_UPDATE_FLAG_PHASE | GROUP_UPDATE_FLAG_UNK400000 | GROUP_UPDATE_FLAG_UNK800000 | + GROUP_UPDATE_FLAG_UNK1000000 | GROUP_UPDATE_FLAG_UNK2000000 | GROUP_UPDATE_FLAG_UNK4000000 | + GROUP_UPDATE_FLAG_UNK8000000 | GROUP_UPDATE_FLAG_UNK10000000 | GROUP_UPDATE_FLAG_UNK20000000 | GROUP_UPDATE_FLAG_UNK40000000 }; class Roll : public LootValidatorRef diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 39f5d1ebf93..f522fef5c47 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -1026,26 +1026,26 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke } if (mask & GROUP_UPDATE_FLAG_CUR_HP) - *data << uint32(player->GetHealth()); + *data << int32(player->GetHealth()); if (mask & GROUP_UPDATE_FLAG_MAX_HP) - *data << uint32(player->GetMaxHealth()); + *data << int32(player->GetMaxHealth()); Powers powerType = player->getPowerType(); if (mask & GROUP_UPDATE_FLAG_POWER_TYPE) *data << uint8(powerType); if (mask & GROUP_UPDATE_FLAG_CUR_POWER) - *data << uint16(player->GetPower(powerType)); + *data << int16(player->GetPower(powerType)); if (mask & GROUP_UPDATE_FLAG_MAX_POWER) - *data << uint16(player->GetMaxPower(powerType)); + *data << int16(player->GetMaxPower(powerType)); if (mask & GROUP_UPDATE_FLAG_LEVEL) - *data << uint16(player->getLevel()); + *data << int16(player->getLevel()); if (mask & GROUP_UPDATE_FLAG_ZONE) - *data << uint16(player->GetZoneId()); + *data << int16(player->GetZoneId()); if (mask & GROUP_UPDATE_FLAG_UNK100) *data << uint16(0); @@ -1112,7 +1112,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_PET_MODEL_ID) { if (pet) - *data << uint16(pet->GetDisplayId()); + *data << int16(pet->GetDisplayId()); else *data << uint16(0); } @@ -1120,17 +1120,17 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_PET_CUR_HP) { if (pet) - *data << uint32(pet->GetHealth()); + *data << int32(pet->GetHealth()); else - *data << uint32(0); + *data << int32(0); } if (mask & GROUP_UPDATE_FLAG_PET_MAX_HP) { if (pet) - *data << uint32(pet->GetMaxHealth()); + *data << int32(pet->GetMaxHealth()); else - *data << uint32(0); + *data << int32(0); } if (mask & GROUP_UPDATE_FLAG_PET_POWER_TYPE) @@ -1144,17 +1144,17 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_PET_CUR_POWER) { if (pet) - *data << uint16(pet->GetPower(pet->getPowerType())); + *data << int16(pet->GetPower(pet->getPowerType())); else - *data << uint16(0); + *data << int16(0); } if (mask & GROUP_UPDATE_FLAG_PET_MAX_POWER) { if (pet) - *data << uint16(pet->GetMaxPower(pet->getPowerType())); + *data << int16(pet->GetMaxPower(pet->getPowerType())); else - *data << uint16(0); + *data << int16(0); } if (mask & GROUP_UPDATE_FLAG_PET_AURAS) @@ -1204,10 +1204,9 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_VEHICLE_SEAT) { if (Vehicle* veh = player->GetVehicle()) - *data << uint32(veh->GetVehicleInfo()->m_seatID[player->m_movementInfo.transport.seat]); + *data << int32(veh->GetVehicleInfo()->m_seatID[player->m_movementInfo.transport.seat]); else - *data << uint32(0); - + *data << int32(0); } if (mask & GROUP_UPDATE_FLAG_PHASE) diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp index b984f705e0c..5742ecb0fe0 100644 --- a/src/server/game/Phasing/PhasingHandler.cpp +++ b/src/server/game/Phasing/PhasingHandler.cpp @@ -447,10 +447,10 @@ void PhasingHandler::SendToPlayer(Player const* player) void PhasingHandler::FillPartyMemberPhase(WorldPacket* data, PhaseShift const& phaseShift) { - *data << uint32(phaseShift.Flags.AsUnderlyingType()); - *data << uint32(phaseShift.Phases.size()); + *data << int32(phaseShift.Flags.AsUnderlyingType()); + *data << int32(phaseShift.Phases.size()); for (auto itr = phaseShift.Phases.begin(); itr != phaseShift.Phases.end(); ++itr) - *data << uint16(itr->Id); + *data << int16(itr->Id); } PhaseShift const& PhasingHandler::GetEmptyPhaseShift()