Decompiled source of MenuLibFix v1.0.1

MenuLibFix.dll

Decompiled a day ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using MenuLib;
using MenuLib.MonoBehaviors;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("MenuLib")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("cat7street")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("MenuLibFix —— MenuLib 2.5.4 在 2026-09 版本 R.E.P.O. 上的兼容修复伴生插件")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1+e1852aea21f29b4c4f89517f9e7603e499359f38")]
[assembly: AssemblyProduct("MenuLibFix")]
[assembly: AssemblyTitle("MenuLibFix")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace MenuLibFix
{
	[BepInPlugin("cat7street.MenuLibFix", "MenuLib Fix", "1.0.1")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class MenuLibFixPlugin : BaseUnityPlugin
	{
		public const string GUID = "cat7street.MenuLibFix";

		public const string NAME = "MenuLib Fix";

		public const string VERSION = "1.0.1";

		internal static ManualLogSource Logger;

		private void Awake()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			Logger = ((BaseUnityPlugin)this).Logger;
			new Harmony("cat7street.MenuLibFix").PatchAll();
			Logger.LogInfo((object)"MenuLib Fix v1.0.1 已加载:UIMouseHover / StateClosing / StateInactive 三钩子已用 Harmony 重挂");
		}
	}
	[HarmonyPatch(typeof(SemiFunc), "UIMouseHover")]
	internal static class SemiFunc_UIMouseHover_Patch
	{
		private static string _lastHoverError;

		private static bool Prefix(MenuPage parentPage, RectTransform rectTransform, string menuID, float xPadding, float yPadding, MenuScrollBox scrollBox, ScrollRect scrollRect, ref bool __result)
		{
			try
			{
				return HoverImpl(parentPage, rectTransform, menuID, xPadding, yPadding, scrollBox, scrollRect, ref __result);
			}
			catch (Exception ex)
			{
				string text = ex.GetType().Name + ":" + ex.Message;
				if (text != _lastHoverError)
				{
					_lastHoverError = text;
					MenuLibFixPlugin.Logger.LogWarning((object)$"UIMouseHover 替代逻辑异常(按未悬停处理):{ex}");
				}
				__result = false;
				return false;
			}
		}

		private static bool HoverImpl(MenuPage parentPage, RectTransform rectTransform, string menuID, float xPadding, float yPadding, MenuScrollBox scrollBox, ScrollRect scrollRect, ref bool __result)
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_029d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)parentPage))
			{
				__result = false;
				return false;
			}
			if (Object.op_Implicit((Object)(object)parentPage.parentPage) && !parentPage.parentPage.pageActive)
			{
				__result = false;
				return false;
			}
			Vector2 val = SemiFunc.UIMousePosToUIPos();
			if (MenuManager.instance.mouseHoldPosition != Vector2.zero)
			{
				val = MenuManager.instance.mouseHoldPosition;
			}
			if (Object.op_Implicit((Object)(object)scrollBox))
			{
				RectTransform val2 = ((!((Object)(object)scrollBox.scroller != (Object)null)) ? ((RectTransform)null) : ((RectTransform)((Transform)scrollBox.scroller).parent));
				bool flag;
				if ((Object)(object)val2 != (Object)null)
				{
					float y = ((Transform)val2).position.y;
					float num = y + val2.sizeDelta.y;
					flag = val.y > y && val.y < num;
				}
				else
				{
					float num2 = ((Component)scrollBox).transform.position.y - 10f;
					float num3 = scrollBox.scrollerEndPosition + 32f;
					flag = val.y <= num3 && val.y >= num2;
				}
				if (!flag)
				{
					__result = false;
					return false;
				}
			}
			if (Object.op_Implicit((Object)(object)scrollRect))
			{
				RectTransform val3 = scrollRect.viewport ?? ((Component)scrollRect).GetComponent<RectTransform>();
				if (Object.op_Implicit((Object)(object)val3))
				{
					rectTransform.GetWorldCorners(SemiFunc.s_RectCorners);
					val3.GetWorldCorners(SemiFunc.s_ViewportCorners);
					Vector3 val4 = SemiFunc.s_RectCorners[0];
					Vector3 val5 = SemiFunc.s_RectCorners[2];
					Vector3 val6 = SemiFunc.s_ViewportCorners[0];
					Vector3 val7 = SemiFunc.s_ViewportCorners[2];
					if (val5.y < val6.y || val4.y > val7.y || val5.x < val6.x || val4.x > val7.x)
					{
						__result = false;
						return false;
					}
					if (!RectTransformUtility.RectangleContainsScreenPoint(val3, val, (Camera)null))
					{
						__result = false;
						return false;
					}
				}
			}
			MenuPage componentInParent = ((Component)rectTransform).GetComponentInParent<MenuPage>();
			if ((Object)(object)componentInParent == (Object)null || (Object)(object)componentInParent.rectTransform == (Object)null)
			{
				__result = false;
				return false;
			}
			Vector2 val8 = SemiFunc.UIGetRectTransformPositionOnScreen(rectTransform, false);
			float x = val8.x;
			Rect rect = rectTransform.rect;
			float num4 = x + (((Rect)(ref rect)).xMin - xPadding);
			float x2 = val8.x;
			rect = rectTransform.rect;
			float num5 = x2 + (((Rect)(ref rect)).xMax + xPadding);
			float y2 = val8.y;
			rect = rectTransform.rect;
			float num6 = y2 + (((Rect)(ref rect)).yMin - yPadding);
			float y3 = val8.y;
			rect = rectTransform.rect;
			float num7 = y3 + (((Rect)(ref rect)).yMax + yPadding);
			bool flag2;
			if (val.x >= num4 && val.x <= num5 && val.y >= num6 && val.y <= num7)
			{
				flag2 = true;
				if (!string.IsNullOrEmpty(menuID) && menuID != "-1")
				{
					if (MenuManager.instance.currentMenuID == "")
					{
						MenuManager.instance.currentMenuID = menuID;
						MenuManager.instance.currentMenuIDTransform = (Transform)(object)rectTransform;
					}
					else if (MenuManager.instance.currentMenuID != menuID && SemiFunc.UIIsRenderedOnTop((Transform)(object)rectTransform, MenuManager.instance.currentMenuIDTransform))
					{
						MenuManager.instance.currentMenuID = menuID;
						MenuManager.instance.currentMenuIDTransform = (Transform)(object)rectTransform;
					}
				}
			}
			else
			{
				flag2 = false;
			}
			if (!string.IsNullOrEmpty(menuID) && menuID != "-1")
			{
				__result = menuID == MenuManager.instance.currentMenuID;
				return false;
			}
			__result = flag2;
			return false;
		}
	}
	[HarmonyPatch(typeof(MenuPage), "StateClosing")]
	internal static class MenuPage_StateClosing_Patch
	{
		private static bool Prefix(MenuPage __instance)
		{
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			__instance.LockAndHide();
			if (__instance.stateStart)
			{
				if (MenuAPI.customMenuPages.TryGetValue(__instance, out var value))
				{
					RectTransform val = (RectTransform)((Component)__instance).transform;
					Vector2 animateAwayPosition = Vector2.op_Implicit(((Transform)val).position);
					Rect rect = val.rect;
					float num = 0f - ((Rect)(ref rect)).height;
					rect = value.rectTransform.rect;
					animateAwayPosition.y = num - ((Rect)(ref rect)).height;
					__instance.animateAwayPosition = animateAwayPosition;
				}
				if (!__instance.disableOutroEffect)
				{
					if (!__instance.popUpAnimation)
					{
						MenuManager.instance.MenuEffectPageOutro();
					}
					else
					{
						MenuManager.instance.MenuEffectPopUpClose();
					}
				}
				if ((Object)(object)MenuManager.instance.currentMenuPage == (Object)(object)__instance)
				{
					MenuManager.instance.currentMenuPage = null;
					MenuManager.instance.PageRemove(__instance);
				}
			}
			if (Vector2.Distance(Vector2.op_Implicit(((Transform)__instance.rectTransform).localPosition), __instance.animateAwayPosition) < 0.8f)
			{
				__instance.onPageEnd.Invoke();
				if (MenuAPI.customMenuPages.TryGetValue(__instance, out var value2) && (value2.isCachedPage || !value2.pageWasActivatedOnce))
				{
					((Behaviour)__instance).enabled = false;
				}
				else
				{
					MenuManager.instance.PageRemove(__instance);
					Object.Destroy((Object)(object)((Component)__instance).gameObject);
				}
			}
			float deltaTime = Time.deltaTime;
			((Transform)__instance.rectTransform).localPosition = Vector2.op_Implicit(Vector2.Lerp(Vector2.op_Implicit(((Transform)__instance.rectTransform).localPosition), __instance.animateAwayPosition, 40f * deltaTime));
			return false;
		}
	}
	[HarmonyPatch(typeof(ChatManager), "StateInactive")]
	internal static class ChatManager_StateInactive_Patch
	{
		private static bool Prefix()
		{
			return !REPOInputStringSystem.hasAnyFocus;
		}
	}
}