예제 #1
0
    // Move the stream forward upon finding unknown chunks //
    public static void SkipUnknownChunk(Stream stream, WDTChunkId chunkID, uint chunkSize)
    {
        if (Enum.IsDefined(typeof(WDTChunkId), chunkID))
        {
            Debug.Log($"Missing chunk ID : {chunkID}");
        }

        stream.Seek(chunkSize, SeekOrigin.Current);
    }
예제 #2
0
    public static bool ParseWDT(uint FileDataId)
    {
        long streamPos = 0;

        CASC = GameObject.Find("[CASC]").GetComponent <CascHandler>().cascHandler;

        if (CASC.FileExists(FileDataId))
        {
            using (var stream = CASC.OpenFile(FileDataId))
                using (var reader = new BinaryReader(stream))
                {
                    WDTflagsdata WDTFlags = new WDTflagsdata();
                    while (streamPos < stream.Length)
                    {
                        stream.Position = streamPos;
                        WDTChunkId ChunkId   = (WDTChunkId)reader.ReadUInt32();
                        uint       ChunkSize = reader.ReadUInt32();

                        streamPos = stream.Position + ChunkSize;

                        switch (ChunkId)
                        {
                        case WDTChunkId.MVER:
                            ReadMVER(reader);
                            break;

                        case WDTChunkId.MPHD:
                            ReadMPHD(reader, WDTFlags);
                            break;

                        case WDTChunkId.MAIN:
                            ReadMAIN(reader, WDTFlags);
                            break;

                        case WDTChunkId.MAID:
                            ReadMAID(reader, FileDataId);
                            break;

                        default:
                            SkipUnknownChunk(stream, ChunkId, ChunkSize);
                            break;
                        }
                    }

                    if (!Flags.ContainsKey(FileDataId))
                    {
                        Flags.Add(FileDataId, WDTFlags);
                    }
                }
            return(true);
        }
        else
        {
            return(false);
        }
    }