internal CacheFile(CacheArgs args) { if (!File.Exists(args.FileName)) { throw Exceptions.FileNotFound(args.FileName); } FileName = args.FileName; ByteOrder = args.ByteOrder; BuildString = args.BuildString; CacheType = args.CacheType; Metadata = args.Metadata; HeaderTranslator = new HeaderAddressTranslator(this); MetadataTranslator = new TagAddressTranslator(this); using (var reader = CreateReader(HeaderTranslator)) { Header = reader.ReadObject <CacheHeader>(); reader.Seek(Header.IndexAddress, SeekOrigin.Begin); TagIndex = reader.ReadObject(new TagIndex(this)); StringIndex = new StringIndex(this); TagIndex.ReadItems(); StringIndex.ReadItems(); } }
internal CacheFile(CacheArgs args) { if (!File.Exists(args.FileName)) { throw Exceptions.FileNotFound(args.FileName); } FileName = args.FileName; ByteOrder = args.ByteOrder; BuildString = args.BuildString; CacheType = args.CacheType; Metadata = args.Metadata; HeaderTranslator = new SectionAddressTranslator(this, 0); MetadataTranslator = new TagAddressTranslator(this); PointerExpander = new PointerExpander(this); using (var reader = CreateReader(HeaderTranslator)) Header = reader.ReadObject <CacheHeader>((int)CacheType); //change IndexPointer to use MetadataTranslator instead of HeaderTranslator Header.IndexPointer = new Pointer64(Header.IndexPointer.Value, MetadataTranslator); using (var reader = CreateReader(MetadataTranslator)) { reader.Seek(Header.IndexPointer.Address, SeekOrigin.Begin); TagIndex = reader.ReadObject(new TagIndex(this)); StringIndex = new StringIndex(this); TagIndex.ReadItems(); StringIndex.ReadItems(); switch (CacheType) { case CacheType.MccHalo3: case CacheType.MccHalo3U4: LocaleIndex = new LocaleIndex(this, 464, 80, 12); break; case CacheType.MccHalo3ODST: LocaleIndex = new LocaleIndex(this, 520, 80, 12); break; } } Task.Factory.StartNew(() => { TagIndex.GetGlobalTag("play")?.ReadMetadata <Halo3.cache_file_resource_layout_table>(); TagIndex.GetGlobalTag("zone")?.ReadMetadata <Halo3.cache_file_resource_gestalt>(); TagIndex.GetGlobalTag("scnr")?.ReadMetadata <Halo3.scenario>(); }); }
public CacheFile(string fileName) : this(CacheArgs.FromFile(fileName)) { }