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; } } }
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; } } }
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; }