Exemple #1
0
        public void Load(byte[] file, VpkVersions.Versions version = VpkVersions.Versions.V1)
        {
            if (version == VpkVersions.Versions.V1)
            {
                _reader = new VpkReaderV1(file);
            }
            else if (version == VpkVersions.Versions.V2)
            {
                _reader = new V2.VpkReaderV2(file);
            }
            var hdr = _reader.ReadArchiveHeader();

            if (!hdr.Verify())
            {
                throw new ArchiveParsingException("Invalid archive header");
            }
            Directories.AddRange(_reader.ReadDirectories(this));
        }
Exemple #2
0
        /// <summary>
        /// The main Load function, the related parts need to be numbered correctly as "archivename_01.vpk" and so forth
        /// </summary>
        /// <param name="mainPartStream"></param>
        /// <param name="filename"></param>
        /// <param name="version"></param>
        /// <param name="parts"></param>
        public void Load(Stream mainPartStream, string filename = "", VpkVersions.Versions version = VpkVersions.Versions.V1, Dictionary <Stream, string> parts = null)
        {
            if (Loaded)
            {
                throw new NotSupportedException("Tried to call Load on a VpkArchive that is already loaded, dispose and create a new one instead");
            }

            if (string.IsNullOrEmpty(filename))
            {
                filename = "stream_dir.vpk";
            }

            if (version == VpkVersions.Versions.V1)
            {
                Reader = new VpkReaderV1(mainPartStream);
            }
            else if (version == VpkVersions.Versions.V2)
            {
                Reader = new VpkReaderV2(mainPartStream);
            }

            var hdr = Reader.ReadArchiveHeader();

            if (!hdr.Verify())
            {
                throw new ArchiveParsingException("Invalid archive header");
            }

            //Jvs: moved these down here as we want the header error as soon as possible
            AddMainPart(filename, mainPartStream);

            if (parts?.Count > 0)
            {
                LoadParts(parts);
            }

            InternalDirectories.AddRange(Reader.ReadDirectories(this));

            Loaded = true;
        }
Exemple #3
0
        public void Load(string filename, VpkVersions.Versions version = VpkVersions.Versions.V1)
        {
            ArchivePath = filename;
            IsMultiPart = filename.EndsWith("_dir.vpk");
            if (IsMultiPart)
            {
                LoadParts(filename);
            }
            if (version == VpkVersions.Versions.V1)
            {
                _reader = new VpkReaderV1(filename);
            }
            else if (version == VpkVersions.Versions.V2)
            {
                _reader = new V2.VpkReaderV2(filename);
            }
            var hdr = _reader.ReadArchiveHeader();

            if (!hdr.Verify())
            {
                throw new ArchiveParsingException("Invalid archive header");
            }
            Directories.AddRange(_reader.ReadDirectories(this));
        }
Exemple #4
0
        /// <summary>
        /// Loads a vpk archive by stream, the related parts need to be ordered correctly in the list
        /// </summary>
        /// <param name="mainPartStream"></param>
        /// <param name="parts"></param>
        /// <param name="filename"></param>
        /// <param name="version"></param>
        public void Load(Stream mainPartStream, List <Stream> parts, string filename = "", VpkVersions.Versions version = VpkVersions.Versions.V1)
        {
            Dictionary <Stream, string> streamParts = null;

            if (parts?.Count > 0)
            {
                streamParts = new Dictionary <Stream, string>();

                int index = 0;
                foreach (var streamPart in parts)
                {
                    streamParts.Add(streamPart, $"stream_{index}.vpk");
                    index++;
                }
            }

            Load(mainPartStream, filename, version, streamParts);
        }
Exemple #5
0
 /// <summary>
 /// Loads the specified vpk archive by filename, if it's a _dir.vpk file it'll load related numbered vpks automatically
 /// </summary>
 /// <param name="filename">A vpk archive ending in _dir.vpk</param>
 /// <param name="version"></param>
 public void Load(string filename, VpkVersions.Versions version = VpkVersions.Versions.V1)
 {
     Load(new FileStream(filename, FileMode.Open, FileAccess.Read), filename, version, LoadFileParts(filename));
 }