Ejemplo n.º 1
0
        public static void WriteMovementInfo(WorldPacket data, MovementInfo movementInfo)
        {
            bool hasTransportData = !movementInfo.transport.guid.IsEmpty();
            bool hasFallDirection = movementInfo.HasMovementFlag(MovementFlag.Falling | MovementFlag.FallingFar);
            bool hasFallData      = hasFallDirection || movementInfo.jump.fallTime != 0;
            bool hasSpline        = false; // todo 6.x send this infos

            data.WritePackedGuid(movementInfo.Guid);
            data.WriteUInt32(movementInfo.Time);
            data.WriteFloat(movementInfo.Pos.GetPositionX());
            data.WriteFloat(movementInfo.Pos.GetPositionY());
            data.WriteFloat(movementInfo.Pos.GetPositionZ());
            data.WriteFloat(movementInfo.Pos.GetOrientation());
            data.WriteFloat(movementInfo.Pitch);
            data.WriteFloat(movementInfo.SplineElevation);

            uint removeMovementForcesCount = 0;

            data.WriteUInt32(removeMovementForcesCount);

            uint int168 = 0;

            data.WriteUInt32(int168);

            /*for (public uint i = 0; i < removeMovementForcesCount; ++i)
             * {
             *  _worldPacket << ObjectGuid;
             * }*/

            data.WriteBits((uint)movementInfo.GetMovementFlags(), 30);
            data.WriteBits((uint)movementInfo.GetMovementFlags2(), 18);

            data.WriteBit(hasTransportData);
            data.WriteBit(hasFallData);
            data.WriteBit(hasSpline);
            data.WriteBit(0); // HeightChangeFailed
            data.WriteBit(0); // RemoteTimeValid
            data.FlushBits();

            if (hasTransportData)
            {
                WriteTransportInfo(data, movementInfo.transport);
            }

            if (hasFallData)
            {
                data.WriteUInt32(movementInfo.jump.fallTime);
                data.WriteFloat(movementInfo.jump.zspeed);

                data.WriteBit(hasFallDirection);
                data.FlushBits();
                if (hasFallDirection)
                {
                    data.WriteFloat(movementInfo.jump.sinAngle);
                    data.WriteFloat(movementInfo.jump.cosAngle);
                    data.WriteFloat(movementInfo.jump.xyspeed);
                }
            }
        }