Please disclose if any significant portion of your mod was created 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 RepoStatsUI v2.5.9
RepoStatsUI.dll
Decompiled 3 hours agousing System; using System.Collections.Generic; 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 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(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("RepoStatsUI")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RepoStatsUI")] [assembly: AssemblyTitle("RepoStatsUI")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.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 RepoStatsUI { [BepInPlugin("com.repo.statsui", "Repo Stats UI", "2.5.9")] public class Plugin : BaseUnityPlugin { public static ConfigEntry<float> StaminaMult; public static ConfigEntry<float> TabPosX; public static ConfigEntry<float> TabPosY; public static ConfigEntry<int> TabFontSize; public static ConfigEntry<bool> ShowAll; private void Awake() { //IL_00b3: Unknown result type (might be due to invalid IL or missing references) StaminaMult = ((BaseUnityPlugin)this).Config.Bind<float>("1. Logic", "StaminaMultiplier", 0.1f, "Points-to-seconds multiplier."); TabPosX = ((BaseUnityPlugin)this).Config.Bind<float>("2. TAB Panel", "OffsetX", 40f, "X Offset"); TabPosY = ((BaseUnityPlugin)this).Config.Bind<float>("2. TAB Panel", "OffsetY", 260f, "Y Offset"); TabFontSize = ((BaseUnityPlugin)this).Config.Bind<int>("2. TAB Panel", "FontSize", 18, "Font size"); ShowAll = ((BaseUnityPlugin)this).Config.Bind<bool>("2. TAB Panel", "ShowAll", false, "Show all upgrades"); new Harmony("com.repo.statsui").PatchAll(); ((Component)this).gameObject.AddComponent<StatsTooltipRenderer>(); } } [HarmonyPatch(typeof(EnergyUI), "Update")] public class EnergyUI_Patch { private static readonly FieldRef<EnergyUI, TextMeshProUGUI> TextCurrentRef = AccessTools.FieldRefAccess<EnergyUI, TextMeshProUGUI>("Text"); private static readonly FieldRef<EnergyUI, TextMeshProUGUI> TextMaxRef = AccessTools.FieldRefAccess<EnergyUI, TextMeshProUGUI>("textEnergyMax"); private static readonly FieldRef<EnergyUI, Vector3> BasePosRef = AccessTools.FieldRefAccess<EnergyUI, Vector3>("maxEnergyBasePosition"); private static void Postfix(EnergyUI __instance) { //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) PlayerController instance = PlayerController.instance; if ((Object)(object)instance == (Object)null) { return; } TextMeshProUGUI val = TextCurrentRef.Invoke(__instance); TextMeshProUGUI val2 = TextMaxRef.Invoke(__instance); if (!((Object)(object)val == (Object)null) && !((Object)(object)val2 == (Object)null)) { float num = instance.EnergySprintDrain + instance.SprintSpeedUpgrades; if (num <= 0f) { num = 1f; } float num2 = Plugin.StaminaMult.Value * 10f; float num3 = instance.EnergyCurrent / num * num2; float num4 = instance.EnergyStart / num * num2; ((TMP_Text)val).text = $"{num3:F1}<size=70%>S</size>"; ((TMP_Text)val2).text = $"<b><color=orange>/</color></b>{num4:F1}<size=70%>S</size>"; float num5 = ((TMP_Text)val).preferredWidth - 32f; ((TMP_Text)val2).transform.localPosition = BasePosRef.Invoke(__instance) + new Vector3(num5, 0f, 0f); } } } public class StatsTooltipRenderer : MonoBehaviour { private Camera _cam; private string _cachedInfo; private float _rayTimer; private static readonly FieldRef<ItemUpgrade, ItemAttributes> ItemAttrRef = AccessTools.FieldRefAccess<ItemUpgrade, ItemAttributes>("itemAttributes"); private void Update() { _rayTimer -= Time.deltaTime; if (_rayTimer <= 0f) { _cachedInfo = GetUpgradeInfo(); _rayTimer = 0.1f; } } private void OnGUI() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) if (!string.IsNullOrEmpty(_cachedInfo)) { GUIStyle style = new GUIStyle(GUI.skin.label) { fontSize = 24, fontStyle = (FontStyle)1, alignment = (TextAnchor)4, richText = true }; DrawShadowText(new Rect(0f, (float)(Screen.height - 280), (float)Screen.width, 100f), "<color=#8DFF8D>+ " + _cachedInfo.ToUpper() + "</color>", style, 2); } if (Input.GetKey((KeyCode)9)) { DrawTabMenu(); } } private void DrawTabMenu() { //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Expected O, but got Unknown //IL_05fb: Unknown result type (might be due to invalid IL or missing references) //IL_0600: Unknown result type (might be due to invalid IL or missing references) //IL_0610: Unknown result type (might be due to invalid IL or missing references) //IL_062a: Unknown result type (might be due to invalid IL or missing references) //IL_0637: Expected O, but got Unknown //IL_0643: Unknown result type (might be due to invalid IL or missing references) //IL_0665: Unknown result type (might be due to invalid IL or missing references) PlayerController instance = PlayerController.instance; StatsManager instance2 = StatsManager.instance; if (!((Object)(object)instance == (Object)null) && !((Object)(object)instance2 == (Object)null)) { string playerSteamID = instance.playerSteamID; float num = Plugin.StaminaMult.Value * 10f; int lvl = GetLvl(instance2.playerUpgradeStamina, playerSteamID); int lvl2 = GetLvl(instance2.playerUpgradeSpeed, playerSteamID); int lvl3 = GetLvl(instance2.playerUpgradeHealth, playerSteamID); int lvl4 = GetLvl(instance2.playerUpgradeTumbleClimb, playerSteamID); int lvl5 = GetLvl(instance2.playerUpgradeStrength, playerSteamID); int lvl6 = GetLvl(instance2.playerUpgradeRange, playerSteamID); int lvl7 = GetLvl(instance2.playerUpgradeThrow, playerSteamID); int lvl8 = GetLvl(instance2.playerUpgradeTumbleWings, playerSteamID); int lvl9 = GetLvl(instance2.playerUpgradeExtraJump, playerSteamID); int lvl10 = GetLvl(instance2.playerUpgradeLaunch, playerSteamID); int lvl11 = GetLvl(instance2.playerUpgradeCrouchRest, playerSteamID); float num2 = instance.EnergyStart - (float)lvl * 10f; float energySprintDrain = instance.EnergySprintDrain; float num3 = energySprintDrain + instance.SprintSpeedUpgrades; float num4 = num2 / energySprintDrain * num; float num5 = instance.EnergyStart / num3 * num; GUIStyle val = new GUIStyle(GUI.skin.label) { fontSize = Plugin.TabFontSize.Value, fontStyle = (FontStyle)1, richText = true, alignment = (TextAnchor)2 }; List<string> list = new List<string>(); string text = "<color=orange>"; string text2 = "<color=#8DFF8D>"; string text3 = "</color>"; if (Plugin.ShowAll.Value || lvl > 0) { list.Add($"{text}{lvl}{text3} STAMINA {num4:F1}S > {text2}{num5:F1}S{text3}"); } if (Plugin.ShowAll.Value || lvl2 > 0) { list.Add($"{text}{lvl2}{text3} SPRINT SPEED 0.0 > {text2}{instance.SprintSpeedUpgrades:F1}{text3}"); } if (Plugin.ShowAll.Value || lvl3 > 0) { list.Add($"{text}{lvl3}{text3} HEALTH 100 > {text2}{lvl3 * 20 + 100}{text3}"); } if (Plugin.ShowAll.Value || lvl6 > 0) { list.Add($"{text}{lvl6}{text3} RANGE 4M > {text2}{lvl6 + 4}{text3}M"); } if (Plugin.ShowAll.Value || lvl4 > 0) { list.Add($"{text}{lvl4}{text3} CLIMB 8.0S > {text2}{8f / Mathf.Pow(0.95f, (float)lvl4):F1}S{text3}"); } if (Plugin.ShowAll.Value || lvl5 > 0) { list.Add($"{text}{lvl5}{text3} STRENGTH 1.0 > {text2}{(float)lvl5 * 0.2f + 1f:F1}{text3}"); } if (Plugin.ShowAll.Value || lvl7 > 0) { list.Add($"{text}{lvl7}{text3} THROW 0.0 > {text2}{(float)lvl7 * 0.3f:F1}{text3}"); } if (Plugin.ShowAll.Value || lvl10 > 0) { list.Add($"{text}{lvl10}{text3} TUMBLE LAUNCH 0 > {text2}{lvl10}{text3}"); } if (Plugin.ShowAll.Value || lvl8 > 0) { list.Add($"{text}{lvl8}{text3} TUMBLE WINGS 0.0S > {text2}{lvl8:F1}S{text3}"); } if (Plugin.ShowAll.Value || lvl9 > 0) { list.Add($"{text}{lvl9}{text3} EXTRA JUMP 0 > {text2}{lvl9}{text3}"); } if (Plugin.ShowAll.Value || lvl11 > 0) { list.Add($"{text}{lvl11}{text3} CROUCH REST 0 > {text2}{lvl11}{text3}"); } if (list.Count != 0) { float num6 = 400f; float num7 = (float)list.Count * ((float)val.fontSize * 1.5f) + 40f; float num8 = (float)Screen.width - num6 - Plugin.TabPosX.Value; float num9 = (float)Screen.height - num7 - Plugin.TabPosY.Value; GUIStyle val2 = new GUIStyle(val) { fontSize = val.fontSize + 2 }; val2.normal.textColor = new Color(0.65f, 0.65f, 0.65f, 0.9f); GUIStyle style = val2; DrawShadowText(new Rect(num8, num9, num6, 30f), "YOUR STATS", style, 2); DrawShadowText(new Rect(num8, num9 + 35f, num6, num7), string.Join("\n", list), val, 2); } } } private string GetUpgradeInfo() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_cam == (Object)null) { _cam = Camera.main; } if ((Object)(object)_cam == (Object)null) { return null; } RaycastHit val = default(RaycastHit); if (Physics.Raycast(_cam.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f)), ref val, 5f)) { ItemUpgrade componentInParent = ((Component)((RaycastHit)(ref val)).collider).GetComponentInParent<ItemUpgrade>(); if ((Object)(object)componentInParent != (Object)null) { ItemAttributes val2 = ItemAttrRef.Invoke(componentInParent); if ((Object)(object)val2?.item != (Object)null) { string text = ((Object)val2.item).name.ToLower(); if (text.Contains("stamina")) { return "10 energy points"; } if (text.Contains("speed")) { return "1.0 speed (drain up)"; } if (text.Contains("climb")) { return "climb duration"; } if (text.Contains("strength")) { return "0.2 strength"; } if (text.Contains("range")) { return "1m range"; } if (text.Contains("throw")) { return "0.3 throw force"; } if (text.Contains("health")) { return "20 health"; } if (text.Contains("wings")) { return "1s flight time"; } } } } return null; } private int GetLvl(Dictionary<string, int> dict, string id) { int value; return (dict != null && id != null && dict.TryGetValue(id, out value)) ? value : 0; } private void DrawShadowText(Rect rect, string text, GUIStyle style, int offset) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) Color textColor = style.normal.textColor; style.normal.textColor = new Color(0f, 0f, 0f, 1f); GUI.Label(new Rect(((Rect)(ref rect)).x + (float)offset, ((Rect)(ref rect)).y + (float)offset, ((Rect)(ref rect)).width, ((Rect)(ref rect)).height), text, style); style.normal.textColor = textColor; GUI.Label(rect, text, style); } } }