Ejemplo n.º 1
0
        private static ISupportModule Initialize()
        {
            if (Console.Enabled || Imports.IsDebugMode())
            {
                LogSupport.InfoHandler -= System.Console.WriteLine;
                LogSupport.InfoHandler += MelonModLogger.Log;
            }
            LogSupport.WarningHandler -= System.Console.WriteLine;
            LogSupport.WarningHandler += MelonModLogger.LogWarning;
            LogSupport.ErrorHandler   -= System.Console.WriteLine;
            LogSupport.ErrorHandler   += MelonModLogger.LogError;
            if (Imports.IsDebugMode())
            {
                LogSupport.TraceHandler -= System.Console.WriteLine;
                LogSupport.TraceHandler += MelonModLogger.Log;
            }

            try
            {
                unsafe {
                    var tlsHookTarget    = typeof(Uri).Assembly.GetType("Mono.Unity.UnityTls").GetMethod("GetUnityTlsInterface", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).MethodHandle.GetFunctionPointer();
                    var unityMethodField = UnhollowerUtils.GetIl2CppMethodInfoPointerFieldForGeneratedMethod(typeof(Il2CppMono.Unity.UnityTls).GetMethod("GetUnityTlsInterface", BindingFlags.Public | BindingFlags.Static));
                    var unityMethodPtr   = (IntPtr)unityMethodField.GetValue(null);
                    var unityMethod      = *(IntPtr *)unityMethodPtr;
                    Imports.Hook((IntPtr)(&tlsHookTarget), unityMethod);
                }
            } catch (Exception ex) {
                MelonModLogger.LogWarning("Exception while setting up TLS, mods will not be able to use HTTPS: " + ex);
            }

            ClassInjector.DoHook += Imports.Hook;
            GetUnityVersionNumbers(out var major, out var minor, out var patch);
            UnityVersionHandler.Initialize(major, minor, patch);
            ClassInjector.RegisterTypeInIl2Cpp <MelonLoaderComponent>();
            MelonLoaderComponent.CreateComponent();
            SceneManager.sceneLoaded = (
                (SceneManager.sceneLoaded == null)
                ? new Action <Scene, LoadSceneMode>(OnSceneLoad)
                : Il2CppSystem.Delegate.Combine(SceneManager.sceneLoaded, (UnityAction <Scene, LoadSceneMode>) new Action <Scene, LoadSceneMode>(OnSceneLoad)).Cast <UnityAction <Scene, LoadSceneMode> >()
                );
            Camera.onPostRender = (
                (Camera.onPostRender == null)
                ? new Action <Camera>(OnPostRender)
                : Il2CppSystem.Delegate.Combine(Camera.onPostRender, (Camera.CameraCallback) new Action <Camera>(OnPostRender)).Cast <Camera.CameraCallback>()
                );
            return(new Module());
        }
Ejemplo n.º 2
0
 private static ISupportModule Initialize()
 {
     if (Console.Enabled || Imports.IsDebugMode())
     {
         LogSupport.InfoHandler -= System.Console.WriteLine;
         LogSupport.InfoHandler += MelonModLogger.Log;
     }
     LogSupport.WarningHandler -= System.Console.WriteLine;
     LogSupport.WarningHandler += MelonModLogger.LogWarning;
     LogSupport.ErrorHandler   -= System.Console.WriteLine;
     LogSupport.ErrorHandler   += MelonModLogger.LogError;
     if (Imports.IsDebugMode())
     {
         LogSupport.TraceHandler -= System.Console.WriteLine;
         LogSupport.TraceHandler += MelonModLogger.Log;
     }
     ClassInjector.DoHook += Imports.Hook;
     GetUnityVersionNumbers(out var major, out var minor, out var patch);
     UnityVersionHandler.Initialize(major, minor, patch);
     ClassInjector.RegisterTypeInIl2Cpp <MelonLoaderComponent>();
     MelonLoaderComponent.CreateComponent();
     add_sceneLoaded_potato(new Action <Scene, LoadSceneMode>(OnSceneLoad));
     return(new Module());
 }
Ejemplo n.º 3
0
 private static ISupportModule Initialize()
 {
     MelonLoaderComponent.CreateComponent();
     SceneManager.sceneLoaded += OnSceneLoad;
     return(new Module());
 }
Ejemplo n.º 4
0
 private static ISupportModule Initialize()
 {
     MelonLoaderComponent.CreateComponent();
     return(new Module());
 }