public Stream OpenFile(ApplicationPackageManifest.Types.PackageRecord record) { long offset = 0; EncodingEntry enc; if (record.Flags.HasFlag(ContentFlags.Bundle)) { offset = record.Offset; } if (!CASC.EncodingHandler.GetEntry(record.LoadHash, out enc)) { return(null); } MemoryStream ms = new MemoryStream((int)record.Size); try { Stream fstream = CASC.OpenFile(enc.Key); fstream.Position = offset; fstream.CopyBytes(ms, (int)record.Size); ms.Position = 0; } catch (Exception e) { if (e is BLTEKeyException exception) { Debugger.Log(0, "DataTool", $"[DataTool:CASC]: Missing key: {exception.MissingKey:X16}\r\n"); } return(null); } return(ms); }
public static Stream OpenFile(ApplicationPackageManifest.Types.PackageRecord packageRecord) { if (packageRecord.Flags.HasFlag(ContentFlags.Bundle)) { return(OpenFile(packageRecord.LoadHash, packageRecord.Offset, (int)packageRecord.Size)); } else { return(OpenFile(packageRecord.LoadHash)); } }
public static Stream OpenFileUnsafe(ApplicationPackageManifest.Types.PackageRecord record, out ulong salsa) { salsa = 0; if (!CASC.EncodingHandler.GetEntry(record.LoadHash, out EncodingEntry enc)) { return(null); } Stream fstream = CASC.OpenFile(enc.Key); salsa = ((BLTEStream)fstream).SalsaKey; return(fstream); }
public static Stream OpenFile(ApplicationPackageManifest.Types.PackageRecord record) { EncodingEntry enc; if (!CASC.EncodingHandler.GetEntry(record.LoadHash, out enc)) { return(null); } try { if (record.Flags.HasFlag(ContentFlags.Bundle)) { if (!BundleCache.ContainsKey(record.LoadHash)) { using (Stream bundleStream = CASC.OpenFile(enc.Key)) { byte[] buf = new byte[bundleStream.Length]; bundleStream.Read(buf, 0, (int)bundleStream.Length); BundleCache[record.LoadHash] = buf; } } MemoryStream stream = new MemoryStream((int)record.Size); stream.Write(BundleCache[record.LoadHash], (int)record.Offset, (int)record.Size); stream.Position = 0; return(stream); } return(CASC.OpenFile(enc.Key)); } catch (Exception e) { if (e is BLTEKeyException exception) { #if DEBUG Debugger.Log(0, "DataTool", $"[DataTool:CASC]: Missing key: {exception.MissingKey:X16}\r\n"); #endif } return(null); } }