Esempio n. 1
0
        public static BlockTable Load(WildstarFile file, int directoryCountOffset = 544, int directoryStartOffset = 536)
        {
            List <BlockTableEntry> tableEntries = new List <BlockTableEntry>();
            var  startPos = Math.Min(directoryCountOffset, directoryStartOffset);
            var  endPos   = Math.Max(directoryCountOffset + 4, directoryStartOffset + 8);
            int  directoryCount;
            long directoryStart;
            var  countOffset = directoryCountOffset - startPos;
            var  startOffset = directoryStartOffset - startPos;

            using (var blockTableDataStream = file.File.CreateViewStream(startPos, endPos - startPos + 1, MemoryMappedFileAccess.Read))
                using (var binaryReader = new BinaryReader(blockTableDataStream))
                {
                    binaryReader.BaseStream.Seek(startOffset, SeekOrigin.Begin);
                    directoryStart = binaryReader.ReadInt64();
                    binaryReader.BaseStream.Seek(countOffset, SeekOrigin.Begin);
                    directoryCount = binaryReader.ReadInt32();
                }
            using (var directoryEntryStream = file.File.CreateViewStream(directoryStart, directoryCount * BlockTableEntry.Size, MemoryMappedFileAccess.Read))
                using (var binaryReader = new BinaryReader(directoryEntryStream))
                    for (var x = 0; x < directoryCount; x++)
                    {
                        tableEntries.Add(BlockTableEntry.FromReader(binaryReader));
                    }

            return(new BlockTable(tableEntries));
        }
 public ArchiveFileEntry(WildstarFile indexFile, WildstarAssets assets, IArchiveDirectoryEntry parent, int blockNumber, string name, BinaryReader reader) : base(indexFile, assets, parent, blockNumber, name)
 {
     Flags            = reader.ReadInt32();
     Reserved1        = reader.ReadInt64();
     UncompressedSize = reader.ReadInt64();
     CompressedSize   = reader.ReadInt64();
     Hash             = BitConverter.ToString(reader.ReadBytes(20)).Replace("-", "").ToLower();
     Reserved2        = reader.ReadInt32();
     _lazyArchiveFile = new Lazy <WildstarFile>(() => Assets.LocateArchiveWithAsset(Hash));
 }
        public WildstarAssets(DirectoryInfo baseDirectoryInfo)
        {
            BaseDirectory  = baseDirectoryInfo;
            PatchDirectory = new DirectoryInfo(Path.Combine(baseDirectoryInfo.FullName, "Patch"));
            var patchFileName = Path.Combine(PatchDirectory.FullName, "Patch.index");

            var patchFile = new WildstarFile(new FileInfo(patchFileName));

            var directory   = new ArchiveDirectoryEntry(patchFile, this, null, (int)patchFile.AssetIndexEntry.RootBlock, null);
            var filesToLoad = directory.Children.OfType <ArchiveFileEntry>().ToList();

            foreach (var fileName in filesToLoad)
            {
                var file = GetFile(fileName);
                if (file != null)
                {
                    _fileList.Add(file);
                }
            }
            IndexCount = _fileList.Count;
            var      coreDataFileName = Path.Combine(PatchDirectory.FullName, "CoreData.archive");
            FileInfo coreDataFileInfo = new FileInfo(coreDataFileName);

            if (coreDataFileInfo.Exists)
            {
                var coreDataFile = new WildstarFile(new FileInfo(coreDataFileName));
                _fileList.Add(coreDataFile);
            }
            foreach (var fileName in filesToLoad.Select(i => Path.ChangeExtension(i.Name, ".archive")))
            {
                var file = GetFile(fileName);
                if (file != null)
                {
                    _fileList.Add(file);
                }
            }

            RootDirectory = new MergedArchiveDirectoryEntry(this);
        }
Esempio n. 4
0
 public ArchiveDirectoryEntry(WildstarFile indexFile, WildstarAssets assets, IArchiveDirectoryEntry parent, int blockNumber, string name) : base(indexFile, assets, parent, blockNumber, name)
 {
     _children = new Lazy <List <IArchiveEntry> >(ReadChildren);
 }
Esempio n. 5
0
 public ResourceContainerTable(AssetArchiveResourceContainerDescriptor descriptor, WildstarFile archiveFile)
 {
     using (var directoryStream = archiveFile.File.CreateViewStream(archiveFile.BlockTable[descriptor.BlockEntry].DirectoryOffset, dirEntrySize * descriptor.EntryCount, MemoryMappedFileAccess.Read))
         using (var reader = new BinaryReader(directoryStream))
             for (var x = 0; x < descriptor.EntryCount; x++)
             {
                 var next     = ArchiveResourceEntry.Load(reader);
                 var position = _entries.BinarySearch(next);
                 if (position < 0)
                 {
                     position = ~position;
                 }
                 _entries.Insert(position, next);
             }
 }