Example #1
0
        public override PositionUpdate Decode_OP_NPCMoveUpdate(byte[] updatePacket)
        {
            PositionUpdate PosUpdate = new PositionUpdate();

            BitStream bs = new BitStream(updatePacket, (uint)updatePacket.Length);

            PosUpdate.SpawnID = bs.readUInt(16);

            UInt32 Unknown = bs.readUInt(16);

            UInt32 VFlags = bs.readUInt(6);

            PosUpdate.p.y = (float)bs.readInt(19) / (float)(1 << 3);

            PosUpdate.p.x = (float)bs.readInt(19) / (float)(1 << 3);

            PosUpdate.p.z = (float)bs.readInt(19) / (float)(1 << 3);

            PosUpdate.p.heading = (float)bs.readInt(12) / (float)(1 << 3);

            PosUpdate.HighRes = true;

            return PosUpdate;
        }
Example #2
0
        public override void ExploreNPCMoveUpdate(StreamWriter outputStream, ByteStream buffer, PacketDirection direction)
        {
            BitStream bs = new BitStream(buffer.Buffer, buffer.Length());

            UInt32 SpawnID = bs.readUInt(16);

            UInt32 Unknown = bs.readUInt(16);

            UInt32 VFlags = bs.readUInt(6);

            float y = (float)bs.readInt(19) / (float)(1 << 3);

            float x = (float)bs.readInt(19) / (float)(1 << 3);

            float z = (float)bs.readInt(19) / (float)(1 << 3);

            float heading = (float)bs.readInt(12) / (float)(1 << 3);

            outputStream.WriteLine("Spawn: {0} Flags: {1}, XYZ: {2}, {3}, {4}, Heading: {5}", SpawnID, VFlags, x, y, z, heading);
        }
Example #3
0
        public override List<PositionUpdate> GetHighResolutionMovementUpdates()
        {
            List<PositionUpdate> Updates = new List<PositionUpdate>();

            List<byte[]> UpdatePackets = GetPacketsOfType("OP_NPCMoveUpdate", PacketDirection.ServerToClient);

            foreach (byte[] UpdatePacket in UpdatePackets)
            {
                PositionUpdate PosUpdate = new PositionUpdate();

                BitStream bs = new BitStream(UpdatePacket, 13);

                PosUpdate.SpawnID = bs.readUInt(16);

                UInt32 VFlags = bs.readUInt(6);

                PosUpdate.p.y = (float)bs.readInt(19) / (float)(1 << 3);

                PosUpdate.p.x = (float)bs.readInt(19) / (float)(1 << 3);

                PosUpdate.p.z = (float)bs.readInt(19) / (float)(1 << 3);

                PosUpdate.p.heading = (float)bs.readInt(12) / (float)(1 << 3);

                Updates.Add(PosUpdate);
            }

            return Updates;
        }