diff options
Diffstat (limited to 'src/game/Unit.cpp')
-rw-r--r-- | src/game/Unit.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 365e55cd22d..fbbfa3a2638 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -52,6 +52,7 @@ #include "Traveller.h" #include "TemporarySummon.h" #include "Vehicle.h" +#include "Transports.h" #include <math.h> @@ -13535,6 +13536,46 @@ void Unit::ExitVehicle() m_Vehicle = NULL; } +void Unit::BuildMovementPacket(ByteBuffer *data) const +{ + // 0x00000200 + if(GetUnitMovementFlags() & MOVEMENTFLAG_ONTRANSPORT) + { + if(m_Vehicle) + *data << (uint64)m_Vehicle->GetGUID(); + else if(GetTransport()) + *data << (uint64)GetTransport()->GetGUID(); + else + *data << (uint64)0; + *data << float (GetTransOffsetX()); + *data << float (GetTransOffsetY()); + *data << float (GetTransOffsetZ()); + *data << float (GetTransOffsetO()); + *data << uint32(GetTransTime()); + *data << uint8 (GetTransSeat()); + } + + // 0x02200000 + if((GetUnitMovementFlags() & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING2)) + || (m_movementInfo.unk1 & 0x20)) + *data << (float)m_movementInfo.s_pitch; + + *data << (uint32)m_movementInfo.fallTime; + + // 0x00001000 + if(GetUnitMovementFlags() & MOVEMENTFLAG_JUMPING) + { + *data << (float)m_movementInfo.j_unk; + *data << (float)m_movementInfo.j_sinAngle; + *data << (float)m_movementInfo.j_cosAngle; + *data << (float)m_movementInfo.j_xyspeed; + } + + // 0x04000000 + if(GetUnitMovementFlags() & MOVEMENTFLAG_SPLINE) + *data << (float)m_movementInfo.u_unk1; +} + void Unit::NearTeleportTo( float x, float y, float z, float orientation, bool casting /*= false*/ ) { if(GetTypeId() == TYPEID_PLAYER) |