private void LoadBundleFile(string fullName, EndianBinaryReader reader, string parentPath = null)
        {
            var fileName = Path.GetFileName(fullName);

            Logger.Info("Loading " + fileName);
            try
            {
                var bundleFile = new BundleFile(reader, fullName);
                foreach (var file in bundleFile.fileList)
                {
                    var dummyPath = Path.GetDirectoryName(fullName) + "\\" + file.fileName;
                    LoadAssetsFromMemory(dummyPath, new EndianBinaryReader(file.stream), parentPath ?? fullName, bundleFile.versionEngine);
                }
            }
            catch
            {
                /*var str = $"Unable to load bundle file {fileName}";
                 * if (parentPath != null)
                 * {
                 *  str += $" from {Path.GetFileName(parentPath)}";
                 * }
                 * Logger.Error(str);*/
            }
            finally
            {
                reader.Dispose();
            }
        }
Beispiel #2
0
 private void LoadBundleFile(FileReader reader, string originalPath = null)
 {
     Logger.Info("Loading " + reader.FileName);
     try
     {
         var bundleFile = new BundleFile(reader);
         foreach (var file in bundleFile.fileList)
         {
             var dummyPath = Path.Combine(Path.GetDirectoryName(reader.FullPath), file.fileName);
             var subReader = new FileReader(dummyPath, file.stream);
             if (subReader.FileType == FileType.AssetsFile)
             {
                 LoadAssetsFromMemory(subReader, originalPath ?? reader.FullPath, bundleFile.m_Header.unityRevision);
             }
             else
             {
                 resourceFileReaders[file.fileName] = subReader; //TODO
             }
         }
     }
     catch (Exception e)
     {
         var str = $"Error while reading bundle file {reader.FileName}";
         if (originalPath != null)
         {
             str += $" from {Path.GetFileName(originalPath)}";
         }
         Logger.Error(str, e);
     }
     finally
     {
         reader.Dispose();
     }
 }
Beispiel #3
0
        private static int ExtractBundleFile(string bundleFileName)
        {
            int extractedCount = 0;
            var extractPath    = bundleFileName + "_unpacked\\";

            Directory.CreateDirectory(extractPath);
            var reader     = new EndianBinaryReader(File.OpenRead(bundleFileName));
            var bundleFile = new BundleFile(reader);

            reader.Dispose();
            if (bundleFile.fileList.Count > 0)
            {
                StatusStripUpdate($"Decompressing {Path.GetFileName(bundleFileName)} ...");
                foreach (var memFile in bundleFile.fileList)
                {
                    var filePath = extractPath + memFile.fileName.Replace('/', '\\');
                    if (!Directory.Exists(Path.GetDirectoryName(filePath)))
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(filePath));
                    }
                    if (!File.Exists(filePath))
                    {
                        File.WriteAllBytes(filePath, memFile.stream.ToArray());
                        memFile.stream.Dispose();
                        extractedCount += 1;
                    }
                }
            }
            return(extractedCount);
        }
Beispiel #4
0
        public static int ExtractBundleFile(string bundleFileName)
        {
            int extractedCount = 0;

            if (CheckFileType(bundleFileName, out var reader) == FileType.BundleFile)
            {
                StatusStripUpdate($"Decompressing {Path.GetFileName(bundleFileName)} ...");
                var extractPath = bundleFileName + "_unpacked\\";
                Directory.CreateDirectory(extractPath);
                var bundleFile = new BundleFile(reader);
                foreach (var memFile in bundleFile.fileList)
                {
                    var filePath = extractPath + memFile.fileName.Replace('/', '\\');
                    if (!Directory.Exists(Path.GetDirectoryName(filePath)))
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(filePath));
                    }
                    if (!File.Exists(filePath))
                    {
                        StatusStripUpdate($"Extracting {Path.GetFileName(memFile.fileName)}");
                        extractedCount += 1;
                        using (var file = File.Create(filePath))
                        {
                            memFile.stream.WriteTo(file);
                            memFile.stream.Close();
                        }
                    }
                }
            }
            reader.Dispose();
            return(extractedCount);
        }
Beispiel #5
0
        private static int ExtractBundleFile(string bundleFileName, EndianBinaryReader reader)
        {
            StatusStripUpdate($"Decompressing {Path.GetFileName(bundleFileName)} ...");
            var bundleFile = new BundleFile(reader, bundleFileName);

            reader.Dispose();
            if (bundleFile.fileList.Count > 0)
            {
                var extractPath = bundleFileName + "_unpacked\\";
                Directory.CreateDirectory(extractPath);
                return(ExtractStreamFile(extractPath, bundleFile.fileList));
            }
            return(0);
        }
Beispiel #6
0
        private void LoadBundleFile(string fullName, EndianBinaryReader reader, string parentPath = null)
        {
            var fileName = Path.GetFileName(fullName);

            Logger.Info("Decompressing " + fileName);
            var bundleFile = new BundleFile(reader, fullName);

            reader.Dispose();
            foreach (var file in bundleFile.fileList)
            {
                var dummyPath = Path.GetDirectoryName(fullName) + "\\" + file.fileName;
                LoadAssetsFromMemory(dummyPath, new EndianBinaryReader(file.stream), parentPath ?? fullName, bundleFile.versionEngine);
            }
        }
        private void LoadBundleFile(string fullName, EndianBinaryReader reader, string parentPath = null)
        {
            var fileName = Path.GetFileName(fullName);

            Logger.Info("Loading " + fileName);
            try
            {
                var bundleFile = new BundleFile(reader, fullName);
                foreach (var file in bundleFile.fileList)
                {
                    var subReader = new EndianBinaryReader(file.stream);
                    if (SerializedFile.IsSerializedFile(subReader))
                    {
                        var dummyPath = Path.GetDirectoryName(fullName) + Path.DirectorySeparatorChar + file.fileName;
                        if (bundleFile.fileList.Length == 1)
                        {
                            dummyPath = fullName;
                        }
                        LoadAssetsFromMemory(dummyPath, subReader, parentPath ?? fullName, bundleFile.m_Header.unityRevision, (bundleFile.fileList.Length == 1));
                    }
                    else
                    {
                        resourceFileReaders.Add(file.fileName, subReader);
                    }
                }
            }
            catch
            {
                /*var str = $"Unable to load bundle file {fileName}";
                 * if (parentPath != null)
                 * {
                 *  str += $" from {Path.GetFileName(parentPath)}";
                 * }
                 * Logger.Error(str);*/
            }
            finally
            {
                reader.Dispose();
            }
        }
Beispiel #8
0
        private static void LoadBundleFile(string fullName, List <AssetsFile> assetsfileList,
                                           EndianBinaryReader reader, Dictionary <string, EndianBinaryReader> resourceFileReaders, string parentPath = null)
        {
            var fileName = Path.GetFileName(fullName);

            StatusStripUpdate("Decompressing " + fileName);
            var bundleFile = new BundleFile(reader, fullName);

            reader.Dispose();
            foreach (var file in bundleFile.fileList)
            {
                if (!assetsfileListHash.Value.Contains(file.fileName.ToUpper()))
                {
                    StatusStripUpdate("Loading " + file.fileName);
                    var assetsFile = new AssetsFile(Path.GetDirectoryName(fullName) + "\\" + file.fileName, new EndianBinaryReader(file.stream));
                    if (assetsFile.valid)
                    {
                        assetsFile.parentPath = parentPath ?? fullName;

                        if (assetsFile.fileGen == 6) //2.6.x and earlier don't have a string version before the preload table
                        {
                            //make use of the bundle file version
                            assetsFile.m_Version = bundleFile.versionEngine;
                            assetsFile.version   = Regex.Matches(bundleFile.versionEngine, @"\d").Cast <Match>().Select(m => int.Parse(m.Value)).ToArray();
                            assetsFile.buildType = Regex.Replace(bundleFile.versionEngine, @"\d", "").Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries);
                        }

                        assetsfileList.Add(assetsFile);
                        assetsfileListHash.Value.Add(assetsFile.upperFileName);
                    }
                    else
                    {
                        resourceFileReaders.Add(assetsFile.upperFileName, assetsFile.reader);
                    }
                }
            }
        }
Beispiel #9
0
        private void LoadBundleFile(string fullName, EndianBinaryReader reader, string parentPath = null)
        {
            var fileName = Path.GetFileName(fullName);

            Logger.Info("Loading " + fileName);
            try
            {
                var bundleFile = new BundleFile(reader, fullName);
                foreach (var file in bundleFile.fileList)
                {
                    var subReader = new EndianBinaryReader(file.stream);
                    if (SerializedFile.IsSerializedFile(subReader))
                    {
                        var dummyPath = Path.GetDirectoryName(fullName) + Path.DirectorySeparatorChar + file.fileName;
                        LoadAssetsFromMemory(dummyPath, subReader, parentPath ?? fullName, bundleFile.m_Header.unityRevision);
                    }
                    else
                    {
                        resourceFileReaders[file.fileName] = subReader; //TODO
                    }
                }
            }
            catch (Exception e)
            {
                var str = $"Error while reading bundle file {fileName}";
                if (parentPath != null)
                {
                    str += $" from {Path.GetFileName(parentPath)}";
                }
                Logger.Error(str, e);
            }
            finally
            {
                reader.Dispose();
            }
        }