示例#1
0
        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);
        }
示例#2
0
 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));
     }
 }
示例#3
0
        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);
        }
示例#4
0
        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);
            }
        }