private static void Initialize() { if (string.IsNullOrEmpty(AppDomain.CurrentDomain.BaseDirectory)) { ((AppDomainSetup)typeof(AppDomain).GetProperty("SetupInformationNoCopy", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(AppDomain.CurrentDomain, new object[0])).ApplicationBase = Imports.GetGameDirectory(); } Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); AppDomain.CurrentDomain.UnhandledException += ExceptionHandler; CurrentGameAttribute = new MelonModGameAttribute(Imports.GetCompanyName(), Imports.GetProductName()); UnityVersion = GetUnityFileVersion(); if (Imports.IsIl2CppGame()) { IsVRChat = CurrentGameAttribute.IsGame("VRChat", "VRChat"); IsBoneworks = CurrentGameAttribute.IsGame("Stress Level Zero", "BONEWORKS"); } if (!Imports.IsDebugMode() && Imports.IsConsoleEnabled()) { Console.Enabled = true; Console.Create(); } if (!Imports.IsIl2CppGame() || AssemblyGenerator.Main.Initialize()) { HasGeneratedAssembly = true; } else { Imports.UNLOAD_MELONLOADER(); } }
public static void OnApplicationQuit() { if (Plugins.Count > 0) { for (int i = 0; i < Plugins.Count; i++) { MelonPlugin plugin = Plugins[i]; if (plugin != null) { try { plugin.OnApplicationQuit(); } catch (Exception ex) { MelonModLogger.LogDLLError(ex.ToString(), plugin.InfoAttribute.Name); } } } } if (Mods.Count() > 0) { for (int i = 0; i < Mods.Count; i++) { MelonMod mod = Mods[i]; if (mod != null) { try { mod.OnApplicationQuit(); } catch (Exception ex) { MelonModLogger.LogDLLError(ex.ToString(), mod.InfoAttribute.Name); } } } } if ((Plugins.Count > 0) || (Mods.Count() > 0)) { ModPrefs.SaveConfig(); } Harmony.HarmonyInstance.UnpatchAllInstances(); Imports.UNLOAD_MELONLOADER(); if (Imports.IsQuitFix()) { Process.GetCurrentProcess().Kill(); } }
private static void Initialize() { if (string.IsNullOrEmpty(AppDomain.CurrentDomain.BaseDirectory)) { ((AppDomainSetup)typeof(AppDomain).GetProperty("SetupInformationNoCopy", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(AppDomain.CurrentDomain, new object[0])).ApplicationBase = Imports.GetGameDirectory(); } Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); AppDomain.CurrentDomain.UnhandledException += ExceptionHandler; CurrentGameAttribute = new MelonModGameAttribute(Imports.GetCompanyName(), Imports.GetProductName()); UnityVersion = GetUnityFileVersion(); if (Imports.IsIl2CppGame()) { IsVRChat = CurrentGameAttribute.IsGame("VRChat", "VRChat"); IsBoneworks = CurrentGameAttribute.IsGame("Stress Level Zero", "BONEWORKS"); } if (!Imports.IsDebugMode() #if !DEBUG && Imports.IsConsoleEnabled() #endif ) { Console.Enabled = true; Console.Create(); } if (!Imports.IsIl2CppGame() || AssemblyGenerator.Main.Initialize()) { HasGeneratedAssembly = true; } else { Imports.UNLOAD_MELONLOADER(); } if (HasGeneratedAssembly) { LoadDLLs(true); if (Plugins.Count > 0) { HashSet <MelonPlugin> failedPlugins = new HashSet <MelonPlugin>(); TempPlugins = Plugins.Where(plugin => (plugin.Compatibility < MelonBase.MelonCompatibility.INCOMPATIBLE)).ToList(); DependencyGraph <MelonPlugin> .TopologicalSort(TempPlugins, plugin => plugin.InfoAttribute.Name); for (int i = 0; i < TempPlugins.Count; i++) { MelonPlugin plugin = TempPlugins[i]; if (plugin != null) { try { plugin.OnPreInitialization(); } catch (Exception ex) { MelonModLogger.LogDLLError(ex.ToString(), plugin.InfoAttribute.Name); failedPlugins.Add(plugin); } } } TempPlugins.RemoveAll(plugin => failedPlugins.Contains(plugin)); } } }
private static void Initialize() { if (string.IsNullOrEmpty(AppDomain.CurrentDomain.BaseDirectory)) { ((AppDomainSetup)typeof(AppDomain).GetProperty("SetupInformationNoCopy", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(AppDomain.CurrentDomain, new object[0])).ApplicationBase = Imports.GetGameDirectory(); } Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); AppDomain.CurrentDomain.UnhandledException += ExceptionHandler; CurrentGameAttribute = new MelonModGameAttribute(Imports.GetCompanyName(), Imports.GetProductName()); UnityVersion = GetUnityFileVersion(); if (Imports.IsIl2CppGame()) { IsVRChat = CurrentGameAttribute.IsGame("VRChat", "VRChat"); IsBoneworks = CurrentGameAttribute.IsGame("Stress Level Zero", "BONEWORKS"); } if (!Imports.IsDebugMode()) { Console.Enabled = true; Console.Create(); } if (Imports.IsIl2CppGame() && !AssemblyGenerator.Main.Initialize()) { Imports.UNLOAD_MELONLOADER(true); } else { LoadMods(true); if (Mods.Count > 0) { for (int i = 0; i < Mods.Count; i++) { MelonMod mod = Mods[i]; if (mod != null) { try { mod.OnPreInitialization(); } catch (Exception ex) { MelonModLogger.LogModError(ex.ToString(), mod.InfoAttribute.Name); } } } } } }