Ejemplo n.º 1
0
        public static MovementInfo ReadMovementInfo(WorldPacket data)
        {
            var movementInfo = new MovementInfo();

            movementInfo.Guid = data.ReadPackedGuid();
            movementInfo.Time = data.ReadUInt32();
            float x = data.ReadFloat();
            float y = data.ReadFloat();
            float z = data.ReadFloat();
            float o = data.ReadFloat();

            movementInfo.Pos.Relocate(x, y, z, o);
            movementInfo.Pitch           = data.ReadFloat();
            movementInfo.SplineElevation = data.ReadFloat();

            uint removeMovementForcesCount = data.ReadUInt32();

            uint moveIndex = data.ReadUInt32();

            for (uint i = 0; i < removeMovementForcesCount; ++i)
            {
                data.ReadPackedGuid();
            }

            // ResetBitReader

            movementInfo.SetMovementFlags((MovementFlag)data.ReadBits <uint>(30));
            movementInfo.SetMovementFlags2((MovementFlag2)data.ReadBits <uint>(18));

            bool hasTransport = data.HasBit();
            bool hasFall      = data.HasBit();
            bool hasSpline    = data.HasBit(); // todo 6.x read this infos

            data.ReadBit();                    // HeightChangeFailed
            data.ReadBit();                    // RemoteTimeValid

            if (hasTransport)
            {
                ReadTransportInfo(data, ref movementInfo.transport);
            }

            if (hasFall)
            {
                movementInfo.jump.fallTime = data.ReadUInt32();
                movementInfo.jump.zspeed   = data.ReadFloat();

                // ResetBitReader

                bool hasFallDirection = data.HasBit();
                if (hasFallDirection)
                {
                    movementInfo.jump.sinAngle = data.ReadFloat();
                    movementInfo.jump.cosAngle = data.ReadFloat();
                    movementInfo.jump.xyspeed  = data.ReadFloat();
                }
            }

            return(movementInfo);
        }