Ejemplo n.º 1
0
        private static void _Run()
        {
            Console.WriteLine();
            Console.WriteLine();
            UnityModManager.Logger.Log("Injection...");

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

            if (!string.IsNullOrEmpty(UnityModManager.Config.StartingPoint))
            {
                if (TryGetEntryPoint(UnityModManager.Config.StartingPoint, out var @class, out var method, out var place))
                {
                    usePrefix = (place == "before");
                    var harmony = HarmonyInstance.Create(nameof(UnityModManager));
                    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));
                    UnityModManager.Logger.Log("Injection successful.");
                }
                else
                {
                    UnityModManager.Logger.Log("Injection aborted.");
                    UnityModManager.OpenUnityFileLog();
                    return;
                }
            }
Ejemplo n.º 2
0
 public static void Run(bool doorstop = false)
 {
     try
     {
         _Run(doorstop);
     }
     catch (Exception e)
     {
         Debug.LogException(e);
         UnityModManager.OpenUnityFileLog();
     }
 }
Ejemplo n.º 3
0
 public static void Run()
 {
     try
     {
         _Run();
     }
     catch (Exception e)
     {
         Debug.LogException(e);
         UnityModManager.OpenUnityFileLog();
     }
 }
Ejemplo n.º 4
0
        private static void _Run(bool doorstop)
        {
            Console.WriteLine();
            Console.WriteLine();
            UnityModManager.Logger.Log("Injection...");

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

            Fixes.Apply();

            if (!string.IsNullOrEmpty(UnityModManager.Config.StartingPoint))
            {
                if (!doorstop && UnityModManager.Config.StartingPoint == UnityModManager.Config.EntryPoint)
                {
                    UnityModManager.Start();
                }
                else
                {
                    if (TryGetEntryPoint(UnityModManager.Config.StartingPoint, out var @class, out var method, out var place))
                    {
                        var usePrefix = (place == "before");
                        var harmony   = new HarmonyLib.Harmony(nameof(UnityModManager));
                        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, usePrefix ? new HarmonyMethod(prefix) : null, !usePrefix ? new HarmonyMethod(postfix) : null);
                        UnityModManager.Logger.Log("Injection successful.");
                    }
                    else
                    {
                        UnityModManager.Logger.Log("Injection canceled.");
                        UnityModManager.OpenUnityFileLog();
                        return;
                    }
                }
Ejemplo n.º 5
0
        private static void _Run(bool doorstop)
        {
            Console.WriteLine();
            UnityModManager.Logger.Log("正在注入……");

            if (!UnityModManager.Initialize())
            {
                UnityModManager.Logger.Log($"初始化数据出错,注入已被取消!");
                UnityModManager.OpenUnityFileLog();
                return;
            }

            if (!string.IsNullOrEmpty(UnityModManager.Config.StartingPoint))
            {
                if (!doorstop && UnityModManager.Config.StartingPoint == UnityModManager.Config.EntryPoint)
                {
                    UnityModManager.Start();
                }
                else
                {
                    if (TryGetEntryPoint(UnityModManager.Config.StartingPoint, out var @class, out var method, out var place))
                    {
                        var usePrefix = (place == "before");
                        var harmony   = new Harmony(nameof(UnityModManager));
                        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, usePrefix ? new HarmonyMethod(prefix) : null, !usePrefix ? new HarmonyMethod(postfix) : null);
                        UnityModManager.Logger.Log("注入成功!");
                    }
                    else
                    {
                        UnityModManager.Logger.Log("注入失败!");
                        UnityModManager.OpenUnityFileLog();
                        return;
                    }
                }
Ejemplo n.º 6
0
        private static void _Run(bool doorstop)
        {
            var stringFields  = typeof(UnityModManager.Textures).GetFields(BindingFlags.Static | BindingFlags.NonPublic).Where(x => x.FieldType == typeof(string)).ToArray();
            var textureFields = typeof(UnityModManager.Textures).GetFields(BindingFlags.Static | BindingFlags.Public).Where(x => x.FieldType == typeof(Texture2D)).ToArray();

            foreach (var f in textureFields)
            {
                f.SetValue(null, new Texture2D(2, 2, TextureFormat.ARGB32, false, true));
            }

            Console.WriteLine();
            Console.WriteLine();
            UnityModManager.Logger.Log("Injection...");

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

            Fixes.Apply();

            if (UnityModManager.unityVersion.Major >= 2017)
            {
                var assembly  = Assembly.Load("UnityEngine.ImageConversionModule");
                var LoadImage = assembly.GetType("UnityEngine.ImageConversion").GetMethod("LoadImage", new Type[] { typeof(Texture2D), typeof(byte[]) });
                if (LoadImage != null)
                {
                    foreach (var f in textureFields)
                    {
                        LoadImage.Invoke(null, new object[] { (Texture2D)f.GetValue(null), Convert.FromBase64String((string)stringFields.FirstOrDefault(x => x.Name == f.Name + "Base64")?.GetValue(null) ?? "") });
                    }
                }
            }
            else
            {
                var LoadImage = typeof(Texture2D).GetMethod("LoadImage", new Type[] { typeof(byte[]) });
                if (LoadImage != null)
                {
                    foreach (var f in textureFields)
                    {
                        LoadImage.Invoke((Texture2D)f.GetValue(null), new object[] { Convert.FromBase64String((string)stringFields.FirstOrDefault(x => x.Name == f.Name + "Base64")?.GetValue(null) ?? "") });
                    }
                }
            }
            foreach (var f in textureFields)
            {
                UMMLoader.UMMLoader.Logger.LogMessage(f.Name + " : " + ((Texture2D)f.GetValue(null) == null).ToString());
            }



            if (!string.IsNullOrEmpty(UnityModManager.Config.StartingPoint))
            {
                if (!doorstop && UnityModManager.Config.StartingPoint == UnityModManager.Config.EntryPoint)
                {
                    UnityModManager.Start();
                }
                else
                {
                    if (TryGetEntryPoint(UnityModManager.Config.StartingPoint, out var @class, out var method, out var place))
                    {
                        usePrefix = (place == "before");
                        var harmony = HarmonyInstance.Create(nameof(UnityModManager));
                        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));
                        UnityModManager.Logger.Log("Injection successful.");
                    }
                    else
                    {
                        UnityModManager.Logger.Log("Injection canceled.");
                        UnityModManager.OpenUnityFileLog();
                        return;
                    }
                }
Ejemplo n.º 7
0
            private void DrawTab(int tabId, ref UnityAction buttons)
            {
                var minWidth = GUILayout.MinWidth(mWindowWidth);

                switch (tabs[tabId])
                {
                case "Mods":
                {
                    mScrollPosition[tabId] = GUILayout.BeginScrollView(mScrollPosition[tabId], minWidth);

                    var amountWidth = mColumns.Sum(x => x.width);
                    var expandWidth = mColumns.Where(x => x.expand).Sum(x => x.width);

                    var mods     = UnityModManager.modEntries;
                    var colWidth = mColumns.Select(x => x.expand ? GUILayout.Width(x.width / expandWidth * (mWindowWidth - 60 + expandWidth - amountWidth)) : GUILayout.Width(x.width)).ToArray();

                    GUILayout.BeginVertical("box");

                    GUILayout.BeginHorizontal("box");
                    for (int i = 0; i < mColumns.Count; i++)
                    {
                        GUILayout.Label(mColumns[i].name, colWidth[i]);
                    }
                    GUILayout.EndHorizontal();

                    for (int i = 0, c = mods.Count; i < c; i++)
                    {
                        int k = -1;
                        GUILayout.BeginVertical("box");
                        GUILayout.BeginHorizontal();

                        GUILayout.BeginHorizontal(colWidth[++k]);
                        if (mods[i].OnGUI != null)
                        {
                            if (GUILayout.Button(mods[i].Info.DisplayName, GUI.skin.label, GUILayout.ExpandWidth(true)))
                            {
                                mShowModSettings = (mShowModSettings == i) ? -1 : i;
                            }
                            if (GUILayout.Button(mShowModSettings == i ? Textures.SettingsActive : Textures.SettingsNormal, settings))
                            {
                                mShowModSettings = (mShowModSettings == i) ? -1 : i;
                            }
                            GUILayout.Space(20);
                        }
                        else
                        {
                            GUILayout.Label(mods[i].Info.DisplayName);
                        }
                        GUILayout.EndHorizontal();

                        GUILayout.Label(mods[i].Info.Version, colWidth[++k]);

                        if (mods[i].ManagerVersion > UnityModManager.GetVersion())
                        {
                            GUILayout.Label("Manager-" + mods[i].Info.Version, colWidth[++k]);
                        }
                        else if (mods[i].Requirements.Count > 0)
                        {
                            GUILayout.Label(string.Join("\r\n", mods[i].Info.Requirements), colWidth[++k]);
                        }
                        else
                        {
                            GUILayout.Label("-", colWidth[++k]);
                        }

                        var action = mods[i].Enabled;
                        action = GUILayout.Toggle(action, "", colWidth[++k]);
                        if (action != mods[i].Enabled)
                        {
                            mods[i].Enabled = action;
                            if (mods[i].Toggleable)
                            {
                                mods[i].Active = action;
                            }
                        }

                        if (mods[i].Active)
                        {
                            GUILayout.Box(Textures.StatusActive, status);
                        }
                        else if (mods[i].Enabled)
                        {
                            GUILayout.Box(Textures.StatusInactive, status);
                        }
                        else
                        {
                            GUILayout.Box(Textures.StatusDisabled, status);
                        }

                        GUILayout.EndHorizontal();

                        if (mShowModSettings == i)
                        {
                            GUILayout.Label("Options", h2);
                            try
                            {
                                mods[i].OnGUI(mods[i]);
                            }
                            catch (Exception e)
                            {
                                mShowModSettings = -1;
                                mods[i].Logger.Error("OnGUI error.");
                                Debug.LogException(e);
                            }
                        }

                        GUILayout.EndVertical();
                    }

                    GUILayout.EndVertical();

                    GUILayout.EndScrollView();

                    if (GUI.changed)
                    {
                    }
                    break;
                }

                case "Logs":
                {
                    if (mLogTimer > 1)
                    {
                        mLogTimer = 0;
#if UNITY_EDITOR
                        var filepath = Application.dataPath + "/UnityModManager.log";
#else
                        var filepath = UnityModManager.Logger.filepath;
#endif
                        if (File.Exists(filepath))
                        {
                            var fileinfo = new FileInfo(filepath);
                            if (mFilelogLength != fileinfo.Length)
                            {
                                mFilelogLength = fileinfo.Length;
                                mLogStrings    = File.ReadAllLines(filepath);
                            }
                        }
                    }

                    mScrollPosition[tabId] = GUILayout.BeginScrollView(mScrollPosition[tabId], minWidth);

                    GUILayout.BeginVertical("box");
                    for (int i = Mathf.Max(0, mLogStrings.Length - 200); i < mLogStrings.Length; i++)
                    {
                        GUILayout.Label(mLogStrings[i]);
                    }
                    GUILayout.EndVertical();

                    GUILayout.EndScrollView();

                    buttons += delegate
                    {
                        if (GUILayout.Button("Clear", GUILayout.Width(150)))
                        {
                            UnityModManager.Logger.Clear();
                        }
                    };

                    if (GUI.changed)
                    {
                    }
                    break;
                }

                case "Settings":
                {
                    mScrollPosition[tabId] = GUILayout.BeginScrollView(mScrollPosition[tabId], minWidth);

                    GUILayout.BeginVertical("box");
                    GUILayout.BeginHorizontal();
                    GUILayout.Label("Shortcut Key", GUILayout.ExpandWidth(false));
                    UnityModManager.Params.ShortcutKeyId = GUILayout.Toolbar(UnityModManager.Params.ShortcutKeyId, mShortcutNames, GUILayout.ExpandWidth(false));
                    GUILayout.EndHorizontal();
                    GUILayout.EndVertical();

                    GUILayout.EndScrollView();

                    if (GUI.changed)
                    {
                    }

                    break;
                }
                }
            }