示例#1
0
 public static void Run(bool doorstop = false)
 {
     try
     {
         _Run(doorstop);
     }
     catch (Exception e)
     {
         Debug.LogException(e);
         ATTTModManager.OpenUnityFileLog();
     }
 }
示例#2
0
        private static void _Run(bool doorstop)
        {
            Console.WriteLine();
            Console.WriteLine();
            ATTTModManager.Logger.Log("Injection...");

            if (!ATTTModManager.Initialize())
            {
                ATTTModManager.Logger.Log($"Cancel start due to an error.");
                ATTTModManager.OpenUnityFileLog();
                return;
            }

            Fixes.Apply();

            if (!string.IsNullOrEmpty(ATTTModManager.Config.StartingPoint))
            {
                if (!doorstop && ATTTModManager.Config.StartingPoint == ATTTModManager.Config.EntryPoint)
                {
                    ATTTModManager.Start();
                }
                else
                {
                    if (TryGetEntryPoint(ATTTModManager.Config.StartingPoint, out var @class, out var method, out var place))
                    {
                        usePrefix = (place == "before");
                        var harmony = HarmonyInstance.Create(nameof(ATTTModManager));
                        var prefix  = typeof(Injector).GetMethod(nameof(Prefix_Start), BindingFlags.Static | BindingFlags.NonPublic);
                        var postfix = typeof(Injector).GetMethod(nameof(Postfix_Start), BindingFlags.Static | BindingFlags.NonPublic);
                        harmony.Patch(method, new HarmonyMethod(prefix), new HarmonyMethod(postfix));
                        ATTTModManager.Logger.Log("Injection successful.");
                    }
                    else
                    {
                        ATTTModManager.Logger.Log("Injection canceled.");
                        ATTTModManager.OpenUnityFileLog();
                        return;
                    }
                }