Example #1
0
            private void _read()
            {
                _code = m_io.ReadU1();
                _size = m_io.ReadU4le();
                switch (Code)
                {
                case 17: {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new ChunkMeta(io___raw_body, this, m_root);
                    break;
                }

                case 34: {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new ChunkDir(io___raw_body, this, m_root);
                    break;
                }

                default: {
                    __raw_body = m_io.ReadBytes(Size);
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new Dummy(io___raw_body, this, m_root);
                    break;
                }
                }
            }
Example #2
0
            private void _read()
            {
                switch (M_Parent.Code)
                {
                case 17: {
                    __raw_body = m_io.ReadBytesFull();
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new ChunkMeta(io___raw_body, this, m_root);
                    break;
                }

                case 34: {
                    __raw_body = m_io.ReadBytesFull();
                    var io___raw_body = new KaitaiStream(__raw_body);
                    _body = new ChunkDir(io___raw_body, this, m_root);
                    break;
                }

                default: {
                    _body = m_io.ReadBytesFull();
                    break;
                }
                }
            }
Example #3
0
        internal void Install(Progress Progress, ProgressBar ProgressBar)
        {
            List <string> Names = new List <string>();

            using (FileStream Stream = OpenRead($@"{Path}\mod.info"))
            {
                ReadString(Stream);
                byte[] Buffer = new byte[4];
                Stream.Read(Buffer, 0, 4);
                int ItemsCount = ToInt32(Buffer, 0);
                for (int Iterator = 0; Iterator < ItemsCount; Iterator++)
                {
                    Names.Add(ReadString(Stream));
                }
            }
            Dictionary <string, string> Meta = new Dictionary <string, string>();

            using (FileStream Stream = OpenRead($@"{Path}\modmeta.info"))
            {
                byte[] Buffer = new byte[4];
                Stream.Read(Buffer, 0, 4);
                int ItemsCount = ToInt32(Buffer, 0);
                for (int Iterator = 0; Iterator < ItemsCount; Iterator++)
                {
                    Meta[ReadString(Stream)] = ReadString(Stream);
                }
            }
            DeletePath(ModsPath);
            DeletePath(ModFilePath);
            string FilesPath           = $@"{Path}\WindowsNoEditor";
            IEnumerable <string> Files = Directory.EnumerateFiles(FilesPath, "*", SearchOption.AllDirectories);

            if (!(Progress is null))
            {
                Progress.Total = Files.Count();
                Current.Dispatcher.Invoke(ProgressBar.SetNumericMode);
            }
            foreach (string SourceFile in Files)
            {
                string DestinationFile = SourceFile.Replace(FilesPath, ModsPath);
                Directory.CreateDirectory(System.IO.Path.GetDirectoryName(DestinationFile));
                if (SourceFile.EndsWith(".z"))
                {
                    using (FileStream Reader = OpenRead(SourceFile), Writer = Create(DestinationFile.Substring(0, DestinationFile.Length - 2)))
                    {
                        long Size = new ChunkMeta(Reader).UncompressedSize;
                        if (Size == 1641380927L)
                        {
                            Size = 131072L;
                        }
                        else if (Size == 0L)
                        {
                            Size = 1L;
                        }
                        int         ChunksCount = (int)((new ChunkMeta(Reader).UncompressedSize + Size - 1L) / Size);
                        ChunkMeta[] ChunkSizes  = new ChunkMeta[ChunksCount];
                        for (int Iterator = 0; Iterator < ChunksCount; Iterator++)
                        {
                            ChunkSizes[Iterator] = new ChunkMeta(Reader);
                        }
                        foreach (ChunkMeta ChunkSize in ChunkSizes)
                        {
                            new ZlibDecompressor(Reader, Writer, ChunkSize.CompressedSize, ChunkSize.UncompressedSize).DecompressChunk();
                        }
                    }
                }
                else if (!SourceFile.EndsWith(".uncompressed_size"))
                {
                    Copy(SourceFile, DestinationFile, true);
                }
                if (!(Progress is null))
                {
                    Progress.Increase();
                }
            }
            using (FileStream Stream = Create(ModFilePath))
            {
                Stream.Write(GetBytes(ID), 0, 8);
                WriteString(Stream, Details.Status == 1 ? Details.Name : "ModName");
                WriteString(Stream, $"../../../ShooterGame/Content/Mods/{ID}");
                Stream.Write(GetBytes(Names.Count), 0, 4);
                foreach (string Name in Names)
                {
                    WriteString(Stream, Name);
                }
                Stream.Write(GetBytes(4280483635U), 0, 4);
                Stream.Write(GetBytes(2), 0, 4);
                Stream.WriteByte((byte)(Meta.ContainsKey("ModType") ? int.Parse(Meta["ModType"]) : 0));
                Stream.Write(GetBytes(Meta.Count), 0, 4);
                foreach (KeyValuePair <string, string> Item in Meta)
                {
                    WriteString(Stream, Item.Key);
                    WriteString(Stream, Item.Value);
                }
            }
            IsInstalled = true;
        }