private void ExportFiles(object data) { m_exportPath = (string)data; PrepareExportDirectory(m_exportPath); TextureAssetExporter textureExporter = new TextureAssetExporter(); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new ShaderAssetExporter()); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.AudioClip, new AudioAssetExporter()); EngineAssetExporter engineExporter = new EngineAssetExporter(); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Shader, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Font, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter); GameStructure.Export(m_exportPath, AssetSelector); Logger.Instance.Log(LogType.Info, LogCategory.General, "Finished!!!"); Dispatcher.Invoke(() => { IntroText.Text = "Export is finished"; ExportButton.Visibility = Visibility.Hidden; PostExportButton.Visibility = Visibility.Visible; ResetButton.Visibility = Visibility.Visible; } ); }
private void DownloadSingleFile(string filename) { try { Directory.CreateDirectory($"{path}/tmp/{filename}"); using (var client = new WebClient()) { client.DownloadFile($"{assetUrl}{filename}.bundle", $"{path}/tmp/{filename}/{filename}.bundle"); } List <string> pathes = new List <string>(); pathes.Add($"{path}/tmp/{filename}/{filename}.bundle"); var gameStructure = GameStructure.Load(pathes); //EngineAssetExporter engineExporter = new EngineAssetExporter(); //gameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, engineExporter); TextureAssetExporter textureExporter = new TextureAssetExporter(this.path); gameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter); //gameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2DArray, textureExporter); gameStructure.Export($"{path}/exported/{filename}/", Texture2DAssetSelector); } catch (Exception ex) { Console.WriteLine($"Error downloading file '{filename}'! you may ignore this."); } }
private void ExportFiles(object data) { m_exportPath = (string)data; PrepareExportDirectory(m_exportPath); TextureAssetExporter textureExporter = new TextureAssetExporter(); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new ShaderAssetExporter()); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.TextAsset, new TextAssetExporter()); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.AudioClip, new AudioAssetExporter()); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Font, new FontAssetExporter()); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.MovieTexture, new MovieTextureAssetExporter()); EngineAssetExporter engineExporter = new EngineAssetExporter(); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Shader, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Font, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.MonoBehaviour, engineExporter); #if !DEBUG try #endif { GameStructure.Export(m_exportPath, AssetSelector); } #if !DEBUG catch (SerializedFileException ex) { ReportCrash(ex); return; } catch (Exception ex) { ReportCrash(ex); return; } #endif Logger.Log(LogType.Info, LogCategory.General, "Finished!!!"); Dispatcher.Invoke(() => { IntroText.Text += "Export is finished"; ExportButton.Visibility = Visibility.Hidden; PostExportButton.Visibility = Visibility.Visible; ResetButton.Visibility = Visibility.Visible; } ); }
private GameStructureExporter(string gameDir, string exportPath, List <string> files) { GameDir = gameDir; AssetPath = gameDir; ExportPath = exportPath; options = new ExportOptions() { Version = new Version(2017, 3, 0, VersionType.Final, 3), Platform = Platform.NoTarget, Flags = TransferInstructionFlags.NoTransferInstructionFlags, }; m_GameStructure = GameStructure.Load(files); var fileCollection = m_GameStructure.FileCollection; var textureExporter = new TextureAssetExporter(); var engineExporter = new EngineAssetExporter(); fileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new DummyShaderExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.Font, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter); //engine or texture exporter? fileCollection.Exporter.EventExportStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted"); UpdateTitle($"EventExportStarted"); }; fileCollection.Exporter.EventExportPreparationStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationStarted"); UpdateTitle($"EventExportPreparationStarted"); }; fileCollection.Exporter.EventExportPreparationFinished += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationFinished"); UpdateTitle($"EventExportPreparationFinished"); }; fileCollection.Exporter.EventExportFinished += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportFinished"); UpdateTitle($"EventExportFinished"); }; fileCollection.Exporter.EventExportStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted"); UpdateTitle($"EventExportStarted"); }; fileCollection.Exporter.EventExportProgressUpdated += (int number, int total) => { UpdateTitle($"Exported {number / (float)total * 100:0.#} - {number} of {total}"); }; }
private void ExportFiles(object data) { m_exportPath = (string)data; PrepareExportDirectory(m_exportPath); TextureAssetExporter textureExporter = new TextureAssetExporter(); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, textureExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new ShaderAssetExporter()); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.AudioClip, new AudioAssetExporter()); EngineAssetExporter engineExporter = new EngineAssetExporter(); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Shader, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Font, engineExporter); GameStructure.FileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter); #if !DEBUG try #endif { GameStructure.Export(m_exportPath, AssetSelector); } #if !DEBUG catch (SerializedFileException ex) { Logger.Log(LogType.Error, LogCategory.Import, ex.ToString()); Dispatcher.Invoke(() => { AddHyperlinkToConsole("Go to: ", "Create issue", IssuePage); AddHyperlinkToConsole("Attach file: ", ex.FileName, ex.FilePath); MessageBox.Show(this, $"Please, create an issue on github page {IssuePage} with attached file '{ex.FilePath}'.", "An error during export process has occuered!", MessageBoxButton.OK, MessageBoxImage.Error); }); return; } catch (Exception ex) { Logger.Log(LogType.Error, LogCategory.Import, ex.ToString()); Dispatcher.Invoke(() => { AddHyperlinkToConsole("Go to: ", "Create issue", IssuePage); MessageBox.Show(this, $"Please, create an issue on github page {IssuePage} with attached file that cause this error.", "An error during loading process has occuered!", MessageBoxButton.OK, MessageBoxImage.Error); }); return; } #endif Logger.Log(LogType.Info, LogCategory.General, "Finished!!!"); Dispatcher.Invoke(() => { IntroText.Text = "Export is finished"; ExportButton.Visibility = Visibility.Hidden; PostExportButton.Visibility = Visibility.Visible; ResetButton.Visibility = Visibility.Visible; } ); }
private GameStructureExporter(ExportSettings settings, List <string> files, Func <uTinyRipper.Classes.Object, bool> filter = null) { GameDir = settings.GameDir; ExportPath = settings.ExportDir; options = new ExportOptions() { Version = new Version(2017, 3, 0, VersionType.Final, 3), Platform = Platform.NoTarget, Flags = TransferInstructionFlags.NoTransferInstructionFlags, }; m_GameStructure = GameStructure.Load(files); if (filter != null) { Filter = filter; } else { Filter = (obj) => true; } var fileCollection = m_GameStructure.FileCollection; var textureExporter = new TextureAssetExporter(); var engineExporter = new EngineAssetExporter(); fileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new CustomShaderAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.TextAsset, new TextAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.AudioClip, new AudioAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.Font, new FontAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.MovieTexture, new MovieTextureAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter); //engine or texture exporter? fileCollection.Exporter.EventExportStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted"); UpdateTitle($"EventExportStarted"); }; fileCollection.Exporter.EventExportPreparationStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationStarted"); UpdateTitle($"EventExportPreparationStarted"); }; fileCollection.Exporter.EventExportPreparationFinished += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationFinished"); UpdateTitle($"EventExportPreparationFinished"); }; fileCollection.Exporter.EventExportFinished += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportFinished"); UpdateTitle($"EventExportFinished"); }; fileCollection.Exporter.EventExportStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted"); UpdateTitle($"EventExportStarted"); }; fileCollection.Exporter.EventExportProgressUpdated += (int number, int total) => { UpdateTitle($"Exported {number / (float)total * 100:0.#} - {number} of {total}"); }; if (settings.ScriptByName) { foreach (var asset in fileCollection.FetchAssets()) { if (asset is MonoScript script) { using (MD5 md5 = MD5.Create()) { var data = md5.ComputeHash(Encoding.UTF8.GetBytes($"{script.AssemblyName}.{script.Namespace}.{script.ClassName}")); var newGuid = new Guid(data); Util.SetGUID(script, newGuid); } } } } if (settings.ShaderByName) { foreach (var asset in fileCollection.FetchAssets()) { if (asset is Shader shader) { using (MD5 md5 = MD5.Create()) { var data = md5.ComputeHash(Encoding.UTF8.GetBytes($"{shader.ValidName}")); var newGuid = new Guid(data); var engGuid = new EngineGUID(newGuid); Util.SetGUID(shader, newGuid); Console.WriteLine($"Set shader {shader.ValidName} to Guid {engGuid}"); } } } } }
public GameStructureExporter(ExportSettings settings, IEnumerable <string> files) { GameDir = settings.GameDir; ExportPath = settings.ExportDir; GameStructure = GameStructure.Load(files); Version version = new Version(2017, 3, 0, VersionType.Final, 3); if (string.IsNullOrEmpty(settings.ExportVersion) || settings.ExportVersion.ToLower() == "detect") { //The version in unity default resources and unity_builtin_extra seem to differ from the game version version = GameStructure.FileCollection.GameFiles.Values.Max(t => t.Version); Logger.Log(LogType.Info, LogCategory.Export, $"Version detected as {version.ToString()}"); } else { version = Version.Parse(settings.ExportVersion); Logger.Log(LogType.Info, LogCategory.Export, $"Version set to {version.ToString()}"); } options = new ExportOptions( version, Platform.NoTarget, TransferInstructionFlags.NoTransferInstructionFlags ); var fileCollection = GameStructure.FileCollection; var textureExporter = new TextureAssetExporter(); var engineExporter = new EngineAssetExporter(); fileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new CustomShaderAssetExporter(settings)); fileCollection.Exporter.OverrideExporter(ClassIDType.TextAsset, new TextAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.AudioClip, new AudioAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.Font, new FontAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.MovieTexture, new MovieTextureAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter); //engine or texture exporter? fileCollection.Exporter.EventExportStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted"); UpdateTitle($"EventExportStarted"); }; fileCollection.Exporter.EventExportPreparationStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationStarted"); UpdateTitle($"EventExportPreparationStarted"); }; fileCollection.Exporter.EventExportPreparationFinished += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationFinished"); UpdateTitle($"EventExportPreparationFinished"); }; fileCollection.Exporter.EventExportFinished += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportFinished"); UpdateTitle($"EventExportFinished"); }; fileCollection.Exporter.EventExportStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted"); UpdateTitle($"EventExportStarted"); }; fileCollection.Exporter.EventExportProgressUpdated += (int number, int total) => { UpdateTitle($"Exported {number / (float)total * 100:0.#} - {number} of {total}"); }; if (settings.ScriptByName) { foreach (var asset in fileCollection.FetchAssets()) { if (asset is MonoScript script) { using (MD5 md5 = MD5.Create()) { var data = md5.ComputeHash(Encoding.UTF8.GetBytes($"{script.AssemblyName}.{script.Namespace}.{script.ClassName}")); var newGuid = new Guid(data); Util.SetGUID(script, newGuid); } } } } if (settings.ShaderByName) { foreach (var asset in fileCollection.FetchAssets()) { if (asset is Shader shader) { using (MD5 md5 = MD5.Create()) { var data = md5.ComputeHash(Encoding.UTF8.GetBytes($"{shader.ValidName}")); var newGuid = new Guid(data); var engGuid = new GUID(newGuid); Util.SetGUID(shader, newGuid); Console.WriteLine($"Set shader {shader.ValidName} to Guid {engGuid}"); } } } } }
public GameStructureExporter(ExportSettings settings, List <string> files, Func <uTinyRipper.Classes.Object, bool> filter = null) { GameDir = settings.GameDir; ExportPath = settings.ExportDir; options = new ExportOptions() { Platform = Platform.NoTarget, Flags = TransferInstructionFlags.NoTransferInstructionFlags, }; GameStructure = GameStructure.Load(files); if (string.IsNullOrEmpty(settings.ExportVersion)) { options.Version = new Version(2017, 3, 0, VersionType.Final, 3); } else if (settings.ExportVersion.ToLower() == "detect") { //The version in unity default resources and unity_builtin_extra seem to differ from the game version var versionCheckFile = GameStructure.FileCollection.Files.FirstOrDefault(f => !Path.GetFileName(f.Name).Contains("unity")); if (versionCheckFile != null) { options.Version = versionCheckFile.Version; Logger.Log(LogType.Info, LogCategory.Export, $"Version detected as {options.Version.ToString()}"); } else { Logger.Log(LogType.Warning, LogCategory.Export, $"Could not detect version"); options.Version = new Version(2017, 3, 0, VersionType.Final, 3); } } else { options.Version = new Version(); options.Version.Parse(settings.ExportVersion); Logger.Log(LogType.Info, LogCategory.Export, $"Version set to {options.Version.ToString()}"); } if (filter != null) { Filter = filter; } else { Filter = (obj) => true; } var fileCollection = GameStructure.FileCollection; var textureExporter = new TextureAssetExporter(); var engineExporter = new EngineAssetExporter(); fileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new CustomShaderAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.TextAsset, new TextAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.AudioClip, new AudioAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.Font, new FontAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.MovieTexture, new MovieTextureAssetExporter()); fileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter); fileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter); //engine or texture exporter? fileCollection.Exporter.EventExportStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted"); UpdateTitle($"EventExportStarted"); }; fileCollection.Exporter.EventExportPreparationStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationStarted"); UpdateTitle($"EventExportPreparationStarted"); }; fileCollection.Exporter.EventExportPreparationFinished += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationFinished"); UpdateTitle($"EventExportPreparationFinished"); }; fileCollection.Exporter.EventExportFinished += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportFinished"); UpdateTitle($"EventExportFinished"); }; fileCollection.Exporter.EventExportStarted += () => { Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted"); UpdateTitle($"EventExportStarted"); }; fileCollection.Exporter.EventExportProgressUpdated += (int number, int total) => { UpdateTitle($"Exported {number / (float)total * 100:0.#} - {number} of {total}"); }; if (settings.ScriptByName) { foreach (var asset in fileCollection.FetchAssets()) { if (asset is MonoScript script) { using (MD5 md5 = MD5.Create()) { var data = md5.ComputeHash(Encoding.UTF8.GetBytes($"{script.AssemblyName}.{script.Namespace}.{script.ClassName}")); var newGuid = new Guid(data); Util.SetGUID(script, newGuid); } } } } if (settings.ShaderByName) { foreach (var asset in fileCollection.FetchAssets()) { if (asset is Shader shader) { using (MD5 md5 = MD5.Create()) { var data = md5.ComputeHash(Encoding.UTF8.GetBytes($"{shader.ValidName}")); var newGuid = new Guid(data); var engGuid = new EngineGUID(newGuid); Util.SetGUID(shader, newGuid); Console.WriteLine($"Set shader {shader.ValidName} to Guid {engGuid}"); } } } } }