Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of HideNSeek CORE v2.0.0
BepInEx/plugins/mrov-MainMenuVersion/MainMenuVersion.dll
Decompiled 2 years agousing System; using System.Collections; 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.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")] [assembly: AssemblyCompany("MainMenuVersion")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("A template for Lethal Company")] [assembly: AssemblyFileVersion("0.0.1.0")] [assembly: AssemblyInformationalVersion("0.0.1")] [assembly: AssemblyProduct("MainMenuVersion")] [assembly: AssemblyTitle("MainMenuVersion")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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 MainMenuVersion { public class ConfigManager { private readonly ConfigFile configFile; public static ConfigManager Instance { get; private set; } public static ConfigEntry<string> VersionEntry { get; private set; } public static ConfigEntry<float> Size { get; private set; } public static ConfigEntry<float> YOffset { get; private set; } public static ConfigEntry<bool> AlwaysShortVersion { get; private set; } public static void Init(ConfigFile config) { Instance = new ConfigManager(config); } private ConfigManager(ConfigFile config) { configFile = config; VersionEntry = configFile.Bind<string>("General", "Version", "v%VERSION% [MODDED]", "The version string to display on the main menu"); Size = configFile.Bind<float>("General", "Size", 20f, "The size of the version string"); YOffset = configFile.Bind<float>("General", "YOffset", 0f, "The Y offset of the version string"); AlwaysShortVersion = configFile.Bind<bool>("General", "AlwaysShortVersion", true, "Always display the short version of the game - this ignores LC_API and MoreCompany changes"); } } [HarmonyPatch(typeof(MenuManager))] public class MenuManagerPatch { private static MenuManager Instance; internal static GameObject VersionNum = null; internal static Transform MenuContainer = null; internal static Transform MenuPanel = null; public static Color32 DARK_ORANGE = new Color32((byte)175, (byte)115, (byte)0, byte.MaxValue); public static TextMeshProUGUI versionText { get; private set; } public static RectTransform versionTextRect { get; private set; } public static int realVer { get; internal set; } public static int gameVer { get; private set; } [HarmonyPatch(typeof(GameNetworkManager))] [HarmonyPrefix] [HarmonyPatch("Awake")] private static void SetRealVersion(GameNetworkManager __instance) { realVer = __instance.gameVersionNum; } [HarmonyPostfix] [HarmonyPatch("Start")] private static void Init(MenuManager __instance) { Instance = __instance; ((MonoBehaviour)Instance).StartCoroutine(PatchMenuDelayed()); } private static IEnumerator PatchMenuDelayed() { yield return (object)new WaitUntil((Func<bool>)(() => !GameNetworkManager.Instance.firstTimeInMenu)); GameObject obj = GameObject.Find("MenuContainer"); MenuContainer = ((obj != null) ? obj.transform : null); Transform menuContainer = MenuContainer; MenuPanel = ((menuContainer != null) ? menuContainer.Find("MainButtons") : null); Transform menuContainer2 = MenuContainer; object versionNum; if (menuContainer2 == null) { versionNum = null; } else { Transform obj2 = menuContainer2.Find("VersionNum"); versionNum = ((obj2 != null) ? ((Component)obj2).gameObject : null); } VersionNum = (GameObject)versionNum; } [HarmonyPostfix] [HarmonyPatch("Update")] [HarmonyPriority(0)] private static void UpdatePatch(MenuManager __instance) { bool activeSelf = __instance.menuButtons.activeSelf; RectTransform[] array = Object.FindObjectsOfType<RectTransform>(); RectTransform[] array2 = array; foreach (RectTransform val in array2) { if (((Object)val).name == "VersionNumberText") { ((Component)val).gameObject.SetActive(false); } } if ((Object)(object)versionText == (Object)null) { TryReplaceVersionText(); return; } ((TMP_Text)versionText).text = ConfigManager.VersionEntry.Value.Replace("%VERSION%", $"{gameVer}"); GameObject gameObject = ((Component)versionText).gameObject; if (!gameObject.activeSelf && activeSelf) { gameObject.SetActive(true); } } internal static void TryReplaceVersionText() { if (!((Object)(object)VersionNum == (Object)null) && !((Object)(object)MenuPanel == (Object)null)) { GameObject val = Object.Instantiate<GameObject>(VersionNum, MenuPanel); ((Object)val).name = "MainMenuVersion"; versionText = InitTextMesh(val.GetComponent<TextMeshProUGUI>()); versionTextRect = ((Component)versionText).gameObject.GetComponent<RectTransform>(); versionTextRect.AnchorToBottom(); VersionNum.SetActive(false); } } private static void SetVersion() { bool value = ConfigManager.AlwaysShortVersion.Value; int num = Math.Abs(GameNetworkManager.Instance.gameVersionNum); gameVer = (value ? realVer : ((num != realVer) ? num : realVer)); } private static TextMeshProUGUI InitTextMesh(TextMeshProUGUI tmp) { SetVersion(); ((TMP_Text)tmp).text = ConfigManager.VersionEntry.Value; ((TMP_Text)tmp).fontSize = ConfigManager.Size.ClampedValue(10f, 40f); ((TMP_Text)tmp).alignment = (TextAlignmentOptions)514; TweakTextSettings(tmp); return tmp; } private static void TweakTextSettings(TextMeshProUGUI tmp, bool overflow = true, bool wordWrap = false) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) if (overflow) { ((TMP_Text)tmp).overflowMode = (TextOverflowModes)0; } ((TMP_Text)tmp).enableWordWrapping = wordWrap; ((TMP_Text)tmp).faceColor = DARK_ORANGE; } } [BepInPlugin("MainMenuVersion", "MainMenuVersion", "0.0.1")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource logger; internal static Harmony harmony = new Harmony("MainMenuVersion"); private void Awake() { logger = ((BaseUnityPlugin)this).Logger; harmony.PatchAll(); ConfigManager.Init(((BaseUnityPlugin)this).Config); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin MainMenuVersion is loaded!"); } } internal static class Extensions { internal static GameObject FindInParent(this GameObject obj, string name) { Transform parent = obj.transform.parent; try { return ((Component)parent.Find(name)).gameObject; } catch (Exception arg) { Plugin.logger.LogError((object)$"Error finding '{name}' in: {((Object)parent).name}\n{arg}"); return null; } } internal static bool IsAbove(this Transform cur, Transform target) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) return cur.localPosition.y > target.localPosition.y; } internal static void ResetAnchoredPos(this RectTransform rect) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) rect.anchoredPosition = Vector2.zero; rect.anchoredPosition3D = Vector3.zero; } internal static void ResetPivot(this RectTransform rect) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) rect.pivot = Vector2.zero; } internal static void ResetSizeDelta(this RectTransform rect) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) rect.sizeDelta = Vector2.zero; } internal static void EditOffsets(this RectTransform rect, Vector2 max, Vector2 min) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) rect.offsetMax = max; rect.offsetMin = min; } internal static void EditAnchors(this RectTransform rect, Vector2 max, Vector2 min) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) rect.anchorMax = max; rect.anchorMin = min; } internal static void AnchorToBottomRight(this RectTransform rect) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) rect.ResetAnchoredPos(); rect.EditAnchors(new Vector2(1f, 0f), new Vector2(1f, 0f)); ((Transform)rect).localPosition = new Vector3(432f, -222f, 0f); ((Transform)rect).localRotation = Quaternion.identity; } internal static void AnchorToBottom(this RectTransform rect) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) rect.ResetSizeDelta(); rect.ResetAnchoredPos(); rect.EditAnchors(new Vector2(0.5f, 0f), new Vector2(0.5f, 0f)); rect.EditOffsets(new Vector2(0f, 0f), new Vector2(0f, 0f)); rect.RefreshPosition(); } internal static void RefreshPosition(this RectTransform rect) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) float value = ConfigManager.YOffset.Value; ((Transform)rect).localPosition = new Vector3(0f, -205f + value, 0f); ((Transform)rect).localRotation = Quaternion.identity; } internal static void SetLocalX(this RectTransform rect, float newX) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) ((Transform)rect).localPosition = new Vector3(newX, ((Transform)rect).localPosition.y, ((Transform)rect).localPosition.z); } internal static void FixScale(this Transform transform) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) transform.localScale = new Vector3(1.02f, 1.06f, 1.02f); } internal static float ClampedValue(this ConfigEntry<float> entry, float min, float max) { return Mathf.Clamp(entry.Value, min, max); } } public static class PluginInfo { public const string PLUGIN_GUID = "MainMenuVersion"; public const string PLUGIN_NAME = "MainMenuVersion"; public const string PLUGIN_VERSION = "0.0.1"; } }