mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 17:54:48 +01:00
Core/Groups: defined some unknown group update flags seen in sniff packets and send pet group update packets only if the player actually has a pet
* corrected some data types for group update packets to reflect wpp fields
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user