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; } }
public static void Run(bool doorstop = false) { try { _Run(doorstop); } catch (Exception e) { Debug.LogException(e); UnityModManager.OpenUnityFileLog(); } }
public static void Run() { try { _Run(); } catch (Exception e) { Debug.LogException(e); UnityModManager.OpenUnityFileLog(); } }
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; } }
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; } }
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; } }
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; } } }