diff options
author | Nay <dnpd.dd@gmail.com> | 2011-11-27 15:18:29 +0000 |
---|---|---|
committer | Nay <dnpd.dd@gmail.com> | 2011-11-27 15:18:29 +0000 |
commit | 07740f84b53a54f5e6224c12d5521579a180151c (patch) | |
tree | eaa932fd9648c0254bef48f614fc5942c4e53c53 /src | |
parent | 7fdefceb4389eaf7ee6a4ae34a73b861bbcdea5c (diff) |
Core/Packets: Refactor BuildMovementPacket
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a2bf6947734..cd21ccabb24 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -17139,40 +17139,50 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const break; } - (*data).writeBits(GetUnitMovementFlags(), 30); - (*data).writeBits(m_movementInfo.flags2, 12); + bool onTransport = GetUnitMovementFlags() & MOVEMENTFLAG_ONTRANSPORT; + bool hasInterpolatedMovement = m_movementInfo.flags2 & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT; + bool time3 = false; + bool swimming = ((GetUnitMovementFlags() & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) + || (m_movementInfo.flags2 & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)); + bool interPolatedTurning = m_movementInfo.flags2 & MOVEMENTFLAG2_INTERPOLATED_TURNING; + bool jumping = GetUnitMovementFlags() & MOVEMENTFLAG_JUMPING; + bool splineElevation = GetUnitMovementFlags() & MOVEMENTFLAG_SPLINE_ELEVATION; + bool splineData = false; - if (data->writeBit(GetUnitMovementFlags() & MOVEMENTFLAG_ONTRANSPORT)) + data->writeBits(GetUnitMovementFlags(), 30); + data->writeBits(m_movementInfo.flags2, 12); + data->writeBit(onTransport); + if (onTransport) { - data->writeBit(m_movementInfo.flags2 & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT); - data->writeBit(0); // Flag for time3 + data->writeBit(hasInterpolatedMovement); + data->writeBit(time3); } - data->writeBit((GetUnitMovementFlags() & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (m_movementInfo.flags2 & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)); + data->writeBit(swimming); + data->writeBit(interPolatedTurning); + if (interPolatedTurning) + data->writeBit(jumping); - if (data->writeBit(m_movementInfo.flags2 & MOVEMENTFLAG2_INTERPOLATED_TURNING)) - data->writeBit(GetUnitMovementFlags() & MOVEMENTFLAG_JUMPING); + data->writeBit(splineElevation); + data->writeBit(splineData); - data->writeBit(GetUnitMovementFlags() & MOVEMENTFLAG_SPLINE_ELEVATION); + data->flushBits(); // reset bit stream - // has spline data - data->writeBit(0); + *data << uint64(GetGUID()); + *data << uint32(getMSTime()); + *data << float(GetPositionX()); + *data << float(GetPositionY()); + *data << float(GetPositionZ()); + *data << float(GetOrientation()); - *data << uint64(GetGUID()); // added in 4.2.0 - *data << uint32(getMSTime()); // time - *data << GetPositionX(); - *data << GetPositionY(); - *data << GetPositionZ(); - *data << GetOrientation(); - - if (GetUnitMovementFlags() & MOVEMENTFLAG_ONTRANSPORT) + if (onTransport) { if (m_vehicle) - data->append(m_vehicle->GetBase()->GetPackGUID()); + *data << uint64(m_vehicle->GetBase()->GetGUID()); else if (GetTransport()) - data->append(GetTransport()->GetPackGUID()); - else - *data << (uint8)0; + *data << uint64(GetTransport()->GetGUID()); + else // probably should never happen + *data << (uint64)0; *data << float (GetTransOffsetX()); *data << float (GetTransOffsetY()); @@ -17180,20 +17190,20 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const *data << float (GetTransOffsetO()); *data << uint8 (GetTransSeat()); *data << uint32(GetTransTime()); - - if (m_movementInfo.flags2 & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT) - *data << uint32(m_movementInfo.t_time2); + if (hasInterpolatedMovement) + *data << int32(0); // Transport Time 2 + if (time3) + *data << int32(0); // Transport Time 3 } - if ((GetUnitMovementFlags() & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (m_movementInfo.flags2 & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)) + if (swimming) *data << (float)m_movementInfo.pitch; - if (m_movementInfo.flags2 & MOVEMENTFLAG2_INTERPOLATED_TURNING) + if (interPolatedTurning) { *data << (uint32)m_movementInfo.fallTime; *data << (float)m_movementInfo.j_zspeed; - - if (GetUnitMovementFlags() & MOVEMENTFLAG_JUMPING) + if (jumping) { *data << (float)m_movementInfo.j_sinAngle; *data << (float)m_movementInfo.j_cosAngle; @@ -17201,7 +17211,7 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const } } - if (GetUnitMovementFlags() & MOVEMENTFLAG_SPLINE_ELEVATION) + if (splineElevation) *data << (float)m_movementInfo.splineElevation; } |