diff --git a/Il2CppInspector.GUI/MainWindow.xaml b/Il2CppInspector.GUI/MainWindow.xaml index 4de44f1..ca50aff 100644 --- a/Il2CppInspector.GUI/MainWindow.xaml +++ b/Il2CppInspector.GUI/MainWindow.xaml @@ -366,7 +366,7 @@ IDAPython script - + @@ -385,6 +385,16 @@ + + + + + JSON metadata + + + + + diff --git a/Il2CppInspector.GUI/MainWindow.xaml.cs b/Il2CppInspector.GUI/MainWindow.xaml.cs index 1bfcc1e..3f9979f 100644 --- a/Il2CppInspector.GUI/MainWindow.xaml.cs +++ b/Il2CppInspector.GUI/MainWindow.xaml.cs @@ -215,19 +215,24 @@ namespace Il2CppInspectorGUI trvNamespaces.ItemsSource = namespaceTree; // Populate Unity version combo boxes - var prevSelection = cboUnityVersion.SelectedItem; + var prevIdaSelection = cboIdaUnityVersion.SelectedItem; var prevCppSelection = cboCppUnityVersion.SelectedItem; - cboUnityVersion.Items.Clear(); + var prevJsonSelection = cboJsonUnityVersion.SelectedItem; + cboIdaUnityVersion.Items.Clear(); cboCppUnityVersion.Items.Clear(); + cboJsonUnityVersion.Items.Clear(); foreach (var version in UnityHeaders.GuessHeadersForBinary(model.Package.Binary)) { - cboUnityVersion.Items.Add(version); + cboIdaUnityVersion.Items.Add(version); cboCppUnityVersion.Items.Add(version); + cboJsonUnityVersion.Items.Add(version); } - cboUnityVersion.SelectedIndex = cboUnityVersion.Items.Count - 1; + cboIdaUnityVersion.SelectedIndex = cboIdaUnityVersion.Items.Count - 1; cboCppUnityVersion.SelectedIndex = cboCppUnityVersion.Items.Count - 1; - if (prevSelection != null) { - cboUnityVersion.SelectedItem = prevSelection; + cboJsonUnityVersion.SelectedIndex = cboJsonUnityVersion.Items.Count - 1; + if (prevIdaSelection != null) { + cboIdaUnityVersion.SelectedItem = prevIdaSelection; cboCppUnityVersion.SelectedItem = prevCppSelection; + cboJsonUnityVersion.SelectedItem = prevJsonSelection; } } @@ -407,26 +412,26 @@ namespace Il2CppInspectorGUI // IDA Python script case { rdoOutputIDA: var r } when r.IsChecked == true: - var scriptSaveFileDialog = new SaveFileDialog { + var idaSaveFileDialog = new SaveFileDialog { Filter = "Python scripts (*.py)|*.py|All files (*.*)|*.*", FileName = "ida.py", CheckFileExists = false, OverwritePrompt = true }; - if (scriptSaveFileDialog.ShowDialog() == false) + if (idaSaveFileDialog.ShowDialog() == false) return; - var outFile = scriptSaveFileDialog.FileName; + var idaOutFile = idaSaveFileDialog.FileName; areaBusyIndicator.Visibility = Visibility.Visible; - var selectedVersion = ((UnityHeaders) cboUnityVersion.SelectedItem)?.VersionRange.Min; + var selectedIdaUnityVersion = ((UnityHeaders) cboIdaUnityVersion.SelectedItem)?.VersionRange.Min; await Task.Run(() => { OnStatusUpdate(this, "Building C++ application model"); - model.Build(selectedVersion, CppCompilerType.GCC); + model.Build(selectedIdaUnityVersion, CppCompilerType.GCC); OnStatusUpdate(this, "Generating IDAPython script"); - new IDAPythonScript(model).WriteScriptToFile(outFile); + new IDAPythonScript(model).WriteScriptToFile(idaOutFile); }); break; @@ -454,6 +459,32 @@ namespace Il2CppInspectorGUI new CppScaffolding(model).Write(cppOutPath); }); break; + + // JSON metadata + case { rdoOutputJSON: var r } when r.IsChecked == true: + + var jsonSaveFileDialog = new SaveFileDialog { + Filter = "JSON files (*.json)|*.json|All files (*.*)|*.*", + FileName = "metadata.json", + CheckFileExists = false, + OverwritePrompt = true + }; + + if (jsonSaveFileDialog.ShowDialog() == false) + return; + + var jsonOutFile = jsonSaveFileDialog.FileName; + + areaBusyIndicator.Visibility = Visibility.Visible; + var selectedJsonUnityVersion = ((UnityHeaders) cboJsonUnityVersion.SelectedItem)?.VersionRange.Min; + await Task.Run(() => { + OnStatusUpdate(this, "Building C++ application model"); + model.Build(selectedJsonUnityVersion, CppCompilerType.GCC); + + OnStatusUpdate(this, "Generating JSON metadata file"); + new JSONMetadata(model).Write(jsonOutFile); + }); + break; } areaBusyIndicator.Visibility = Visibility.Hidden;