The BepInEx console will not appear when launching like it does for other games on Thunderstore. This is normal (and helps prevent crashes during startup). You can turn it back on in your BepInEx.cfg file.
Decompiled source of StaminaStats v1.1.5
plugins/com.StaminaStats.dll
Decompiled 3 days agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; 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; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("com.StaminaStats")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.1.5.0")] [assembly: AssemblyInformationalVersion("1.1.5")] [assembly: AssemblyProduct("com.StaminaStats")] [assembly: AssemblyTitle("StaminaStats")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.5.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace StaminaStats { [BepInPlugin("com.StaminaStats", "StaminaStats", "1.1.5")] public class Plugin : BaseUnityPlugin { [HarmonyPatch(typeof(StaminaBar), "Update")] private class StaminaBarPatch { private static void Postfix(StaminaBar __instance) { try { if (!((Object)(object)Character.observedCharacter == (Object)null)) { if (!_elementsCreated || (Object)(object)_staminaTextContainer == (Object)null) { CreateStaminaTextElements(__instance); _elementsCreated = true; } UpdateStaminaText(__instance); } } catch (Exception ex) { Log.LogError((object)("Error in StaminaBar patch: " + ex.Message)); } } } [HarmonyPatch(typeof(StaminaBar), "Start")] private class StaminaBarStartPatch { private static void Postfix(StaminaBar __instance) { try { if (_verboseLogging.Value) { Log.LogInfo((object)"StaminaBar Start detected - ensuring UI is reset"); } if (__instance.afflictions != null && __instance.afflictions.Length != 0 && _afflictionTexts.Count > 0) { ResetAfflictionUI(); } } catch (Exception ex) { Log.LogError((object)("Error in StaminaBar Start patch: " + ex.Message)); } } } [HarmonyPatch(typeof(BarAffliction), "UpdateAffliction")] private class BarAfflictionPatch { private static void Postfix(BarAffliction __instance, StaminaBar bar) { try { if (!((Object)(object)Character.observedCharacter == (Object)null)) { UpdateAfflictionText(__instance, bar); } } catch (Exception ex) { Log.LogError((object)("Error in BarAffliction patch: " + ex.Message)); } } } [HarmonyPatch(typeof(StaminaBar), "ChangeBar")] private class StaminaBarChangeBarPatch { private static void Postfix(StaminaBar __instance) { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)Character.observedCharacter == (Object)null) { return; } if (_verboseLogging.Value) { Log.LogInfo((object)"StaminaBar ChangeBar called, enumerating afflictions:"); for (int i = 0; i < __instance.afflictions.Length; i++) { BarAffliction val = __instance.afflictions[i]; bool activeSelf = ((Component)val).gameObject.activeSelf; STATUSTYPE afflictionType = val.afflictionType; float num = Character.observedCharacter.refs.afflictions.GetCurrentStatus(afflictionType) * 100f; Log.LogInfo((object)$" - Affliction {i}: {afflictionType}, Active: {activeSelf}, Value: {num:F0}%, Width: {val.width}"); } } foreach (STATUSTYPE value in Enum.GetValues(typeof(STATUSTYPE))) { float currentStatus = Character.observedCharacter.refs.afflictions.GetCurrentStatus(value); if (currentStatus > 0f && !_afflictionTexts.ContainsKey(value)) { BarAffliction val3 = FindAffliction(__instance, value); if ((Object)(object)val3 != (Object)null) { UpdateAfflictionText(val3, __instance); } } } } catch (Exception ex) { Log.LogError((object)("Error in StaminaBar ChangeBar patch: " + ex.Message)); } } } public class AfflictionTextTracker : MonoBehaviour { private BarAffliction _affliction; private RectTransform _textRect; private float _verticalOffset; private STATUSTYPE _statusType; public void Initialize(BarAffliction affliction, float verticalOffset) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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) _affliction = affliction; _textRect = ((Component)this).GetComponent<RectTransform>(); _verticalOffset = verticalOffset; _statusType = affliction.afflictionType; if (_verboseLogging.Value) { Log.LogInfo((object)$"Initialized AfflictionTextTracker for {_statusType}"); } } public void UpdateWidth(float width) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_textRect != (Object)null) { _textRect.sizeDelta = new Vector2(width, _textRect.sizeDelta.y); } } public void UpdateAffliction(BarAffliction newAffliction) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)newAffliction != (Object)null && (Object)(object)_affliction != (Object)(object)newAffliction) { _affliction = newAffliction; if (_verboseLogging.Value) { Log.LogInfo((object)$"Updated affliction reference for {_statusType}"); } } } private void LateUpdate() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_009e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_affliction == (Object)null || (Object)(object)_textRect == (Object)null) { return; } Canvas componentInParent = ((Component)_affliction).GetComponentInParent<Canvas>(); if (!((Object)(object)componentInParent != (Object)null)) { return; } RectTransform component = ((Component)_affliction).GetComponent<RectTransform>(); Vector3 position = ((Transform)component).position; ((Transform)_textRect).position = new Vector3(position.x, position.y + _verticalOffset, ((Transform)_textRect).position.z); float num = 0f; if ((Object)(object)Character.observedCharacter != (Object)null) { num = Character.observedCharacter.refs.afflictions.GetCurrentStatus(_statusType) * 100f; } TextMeshProUGUI val = default(TextMeshProUGUI); if (num > 0f && ((Component)this).TryGetComponent<TextMeshProUGUI>(ref val)) { string text = (_showPercentageSign.Value ? $"{num:F0}%" : $"{num:F0}"); if (((TMP_Text)val).text != text) { ((TMP_Text)val).text = text; } } bool flag = num > 0f; if (((Component)this).gameObject.activeSelf != flag) { ((Component)this).gameObject.SetActive(flag); } } } public const string PluginVersion = "1.1.5"; private static Harmony? _harmony; private static bool _elementsCreated = false; private static ConfigEntry<bool> _showPercentageSign; private static ConfigEntry<int> _staminaFontSize; private static ConfigEntry<int> _afflictionFontSize; private static ConfigEntry<float> _outlineThickness; private static ConfigEntry<bool> _verboseLogging; private static GameObject? _staminaTextContainer; private static TextMeshProUGUI? _staminaText; private static TextMeshProUGUI? _extraStaminaText; private static Dictionary<STATUSTYPE, TextMeshProUGUI> _afflictionTexts = new Dictionary<STATUSTYPE, TextMeshProUGUI>(); private static Canvas _afflictionCanvas; private static TMP_FontAsset? _gameFont = null; private static Material? _textMaterial = null; private static readonly Color LowStaminaColor = new Color(1f, 0.3f, 0.3f); private static readonly Color MediumStaminaColor = new Color(1f, 0.92f, 0.016f); private static readonly Color HighStaminaColor = new Color(0.5f, 1f, 0.5f); private static readonly Color ExtraStaminaColor = new Color(1f, 0.92f, 0.016f); private static readonly Dictionary<STATUSTYPE, Color> StatusColors = new Dictionary<STATUSTYPE, Color> { { (STATUSTYPE)0, new Color(1f, 0.3f, 0.3f) }, { (STATUSTYPE)1, new Color(0.9f, 0.6f, 0.1f) }, { (STATUSTYPE)2, new Color(0.2f, 0.6f, 0.9f) }, { (STATUSTYPE)3, new Color(0.6f, 0.1f, 0.6f) }, { (STATUSTYPE)4, new Color(0.9f, 0.4f, 0.4f) }, { (STATUSTYPE)5, new Color(0.5f, 0.1f, 0.5f) }, { (STATUSTYPE)6, new Color(1f, 0.4f, 0.8f) }, { (STATUSTYPE)7, new Color(0.6f, 0.4f, 0.2f) }, { (STATUSTYPE)8, new Color(1f, 0.3f, 0.1f) } }; public const string Id = "com.StaminaStats"; internal static ManualLogSource Log { get; private set; } = null; public static string Name => "StaminaStats"; public static string Version => "1.1.5"; private void Awake() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected I4, but got Unknown Log = ((BaseUnityPlugin)this).Logger; InitializeConfig(); _harmony = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); _harmony.PatchAll(); Log.LogInfo((object)("Plugin " + ((BaseUnityPlugin)this).Info.Metadata.Name + " v1.1.5 loaded")); if (_verboseLogging.Value) { Log.LogInfo((object)"Available STATUSTYPE enum values:"); foreach (STATUSTYPE value in Enum.GetValues(typeof(STATUSTYPE))) { Log.LogInfo((object)$" - {(object)value} (Value: {(int)value})"); } } Application.logMessageReceived += new LogCallback(OnLogMessageReceived); } private void OnDestroy() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown Application.logMessageReceived -= new LogCallback(OnLogMessageReceived); CleanupUIElements(); } private void OnLogMessageReceived(string logString, string stackTrace, LogType logType) { if (logString.Contains("RUN STARTED")) { if (_verboseLogging.Value) { Log.LogInfo((object)"Detected new run starting! Resetting affliction UI elements..."); } ResetAfflictionUI(); } } private static void ResetAfflictionUI() { try { CleanupAfflictionTexts(); _elementsCreated = false; if (_verboseLogging.Value) { Log.LogInfo((object)"Affliction UI elements reset successfully"); } } catch (Exception ex) { Log.LogError((object)("Error resetting affliction UI: " + ex.Message)); } } private static void CleanupAfflictionTexts() { try { if (_afflictionTexts.Count <= 0) { return; } if (_verboseLogging.Value) { Log.LogInfo((object)$"Cleaning up {_afflictionTexts.Count} affliction text elements"); } foreach (KeyValuePair<STATUSTYPE, TextMeshProUGUI> item in _afflictionTexts.ToList()) { if ((Object)(object)item.Value != (Object)null && (Object)(object)((Component)item.Value).gameObject != (Object)null) { Object.Destroy((Object)(object)((Component)item.Value).gameObject); } } _afflictionTexts.Clear(); } catch (Exception ex) { Log.LogError((object)("Error cleaning up affliction texts: " + ex.Message)); } } private static void CleanupUIElements() { try { CleanupAfflictionTexts(); if ((Object)(object)_staminaTextContainer != (Object)null) { Object.Destroy((Object)(object)_staminaTextContainer); _staminaTextContainer = null; _staminaText = null; _extraStaminaText = null; } if ((Object)(object)_afflictionCanvas != (Object)null) { Object.Destroy((Object)(object)((Component)_afflictionCanvas).gameObject); _afflictionCanvas = null; } _elementsCreated = false; if (_verboseLogging.Value) { Log.LogInfo((object)"All UI elements cleaned up"); } } catch (Exception ex) { Log.LogError((object)("Error cleaning up UI elements: " + ex.Message)); } } private void InitializeConfig() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown _showPercentageSign = ((BaseUnityPlugin)this).Config.Bind<bool>("Display", "ShowPercentageSign", false, "Whether to show a percentage sign (%) after numeric values."); _staminaFontSize = ((BaseUnityPlugin)this).Config.Bind<int>("Display", "StaminaFontSize", 18, new ConfigDescription("Font size for stamina text display.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(10, 32), Array.Empty<object>())); _afflictionFontSize = ((BaseUnityPlugin)this).Config.Bind<int>("Display", "AfflictionFontSize", 16, new ConfigDescription("Font size for affliction text display.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(10, 32), Array.Empty<object>())); _outlineThickness = ((BaseUnityPlugin)this).Config.Bind<float>("Display", "TextOutlineThickness", 0.1f, new ConfigDescription("Thickness of the text outline for better readability. Higher values make text more readable against busy backgrounds.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 0.3f), Array.Empty<object>())); _verboseLogging = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "VerboseLogging", false, "Enable detailed logging for debugging purposes."); if (_verboseLogging.Value) { Log.LogInfo((object)"Configuration loaded:"); Log.LogInfo((object)$" - Show percentage sign: {_showPercentageSign.Value}"); Log.LogInfo((object)$" - Stamina font size: {_staminaFontSize.Value}"); Log.LogInfo((object)$" - Affliction font size: {_afflictionFontSize.Value}"); Log.LogInfo((object)$" - Text outline thickness: {_outlineThickness.Value}"); } } private static BarAffliction FindAffliction(StaminaBar staminaBar, STATUSTYPE type) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) BarAffliction[] afflictions = staminaBar.afflictions; foreach (BarAffliction val in afflictions) { if (val.afflictionType == type) { return val; } } return null; } private static void EnsureAfflictionCanvas() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_005c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_afflictionCanvas == (Object)null) { GameObject val = new GameObject("AfflictionTextCanvas"); Object.DontDestroyOnLoad((Object)(object)val); _afflictionCanvas = val.AddComponent<Canvas>(); _afflictionCanvas.renderMode = (RenderMode)0; _afflictionCanvas.sortingOrder = 100; CanvasScaler val2 = val.AddComponent<CanvasScaler>(); val2.uiScaleMode = (ScaleMode)1; val2.referenceResolution = new Vector2(1920f, 1080f); val2.screenMatchMode = (ScreenMatchMode)1; GraphicRaycaster val3 = val.AddComponent<GraphicRaycaster>(); val.layer = LayerMask.NameToLayer("UI"); if (_verboseLogging.Value) { Log.LogInfo((object)"Created top-level affliction canvas"); } } } private static void UpdateAfflictionText(BarAffliction affliction, StaminaBar bar) { //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_0025: 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) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Expected O, but got Unknown //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0135: 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_0176: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) try { if (!((Component)affliction).gameObject.activeSelf && !_afflictionTexts.ContainsKey(affliction.afflictionType)) { return; } STATUSTYPE afflictionType = affliction.afflictionType; float num = Character.observedCharacter.refs.afflictions.GetCurrentStatus(afflictionType) * 100f; if (_verboseLogging.Value) { Log.LogInfo((object)$"Processing affliction: {afflictionType}, active={((Component)affliction).gameObject.activeSelf}, width={affliction.width}, value={num:F0}%"); } TextMeshProUGUI value = null; if (!_afflictionTexts.TryGetValue(afflictionType, out value) || (Object)(object)value == (Object)null) { if ((Object)(object)_gameFont == (Object)null) { FindGameTextStyle(); } EnsureAfflictionCanvas(); GameObject val = new GameObject($"{afflictionType}Text"); val.transform.SetParent(((Component)_afflictionCanvas).transform, false); value = val.AddComponent<TextMeshProUGUI>(); RectTransform component = val.GetComponent<RectTransform>(); component.anchorMin = new Vector2(0.5f, 0.5f); component.anchorMax = new Vector2(0.5f, 0.5f); component.pivot = new Vector2(0.5f, 0.5f); float num2 = Mathf.Max(40f, affliction.width * 0.8f); component.sizeDelta = new Vector2(num2, 24f); val.AddComponent<AfflictionTextTracker>().Initialize(affliction, -15f); SetupGameTextStyle(value, _afflictionFontSize.Value, (TextAlignmentOptions)514); ((Graphic)value).raycastTarget = false; _afflictionTexts[afflictionType] = value; if (_verboseLogging.Value) { Log.LogInfo((object)$"Created new text component for {afflictionType}"); } } else { ((TMP_Text)value).fontSize = _afflictionFontSize.Value; ((TMP_Text)value).outlineWidth = _outlineThickness.Value; AfflictionTextTracker component2 = ((Component)value).GetComponent<AfflictionTextTracker>(); if ((Object)(object)component2 != (Object)null) { component2.UpdateWidth(Mathf.Max(40f, affliction.width * 0.8f)); component2.UpdateAffliction(affliction); } } string text = (_showPercentageSign.Value ? $"{num:F0}%" : $"{num:F0}"); ((TMP_Text)value).text = text; if (StatusColors.TryGetValue(afflictionType, out var value2)) { ((Graphic)value).color = value2; } else { Image componentInChildren = ((Component)affliction).GetComponentInChildren<Image>(); if (componentInChildren != null) { Color color = ((Graphic)componentInChildren).color; float num3 = default(float); float num4 = default(float); float num5 = default(float); Color.RGBToHSV(color, ref num3, ref num4, ref num5); ((Graphic)value).color = Color.HSVToRGB(num3, Mathf.Clamp01(num4 * 1.2f), Mathf.Clamp01(num5 * 1.3f)); } } if (((Component)value).gameObject.activeSelf != num > 0f) { ((Component)value).gameObject.SetActive(num > 0f); } } catch (Exception ex) { Log.LogError((object)$"Error updating affliction text for {affliction.afflictionType}: {ex.Message}"); if (_verboseLogging.Value) { Log.LogError((object)("Stack trace: " + ex.StackTrace)); } } } private static void CreateStaminaTextElements(StaminaBar staminaBar) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: 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_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Expected O, but got Unknown //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)_staminaTextContainer != (Object)null) { Object.Destroy((Object)(object)_staminaTextContainer); _staminaTextContainer = null; _staminaText = null; _extraStaminaText = null; } if ((Object)(object)_gameFont == (Object)null) { FindGameTextStyle(); } _staminaTextContainer = new GameObject("StaminaTextContainer"); _staminaTextContainer.transform.SetParent(((Component)staminaBar).transform, false); GameObject val = new GameObject("StaminaText"); val.transform.SetParent(_staminaTextContainer.transform, false); _staminaText = val.AddComponent<TextMeshProUGUI>(); RectTransform component = val.GetComponent<RectTransform>(); component.anchorMin = new Vector2(0.5f, 0.5f); component.anchorMax = new Vector2(0.5f, 0.5f); component.pivot = new Vector2(1f, 0f); component.sizeDelta = new Vector2(60f, 30f); component.anchoredPosition = new Vector2(20f, 25f); SetupGameTextStyle(_staminaText, _staminaFontSize.Value, (TextAlignmentOptions)516); GameObject val2 = new GameObject("ExtraStaminaText"); val2.transform.SetParent(_staminaTextContainer.transform, false); _extraStaminaText = val2.AddComponent<TextMeshProUGUI>(); RectTransform component2 = val2.GetComponent<RectTransform>(); component2.anchorMin = new Vector2(0.5f, 0.5f); component2.anchorMax = new Vector2(0.5f, 0.5f); component2.pivot = new Vector2(0f, 0f); component2.sizeDelta = new Vector2(60f, 30f); component2.anchoredPosition = new Vector2(24f, 25f); SetupGameTextStyle(_extraStaminaText, _staminaFontSize.Value, (TextAlignmentOptions)513); ((Graphic)_extraStaminaText).color = ExtraStaminaColor; if (_verboseLogging.Value) { Log.LogInfo((object)"Created stamina text elements"); } } catch (Exception ex) { Log.LogError((object)("Error creating stamina text: " + ex.Message)); _elementsCreated = false; } } private static void FindGameTextStyle() { try { TextMeshProUGUI[] array = Resources.FindObjectsOfTypeAll<TextMeshProUGUI>(); TextMeshProUGUI[] array2 = array; foreach (TextMeshProUGUI val in array2) { if (((Object)val).name == "InteractNameText" || ((Object)val).name == "InteractPromptText" || ((Object)val).name == "ItemPromptMain") { _gameFont = ((TMP_Text)val).font; _textMaterial = ((Graphic)val).material; if (_verboseLogging.Value) { Log.LogInfo((object)("Found game font: " + ((Object)_gameFont).name)); } return; } } TMP_FontAsset[] array3 = Resources.FindObjectsOfTypeAll<TMP_FontAsset>(); int num = 0; if (num < array3.Length) { TMP_FontAsset gameFont = array3[num]; _gameFont = gameFont; if (_verboseLogging.Value) { Log.LogInfo((object)("Using fallback game font: " + ((Object)_gameFont).name)); } } } catch (Exception ex) { Log.LogError((object)("Error finding game text style: " + ex.Message)); } } private static void SetupGameTextStyle(TextMeshProUGUI text, int fontSize, TextAlignmentOptions alignment) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) ((TMP_Text)text).fontSize = fontSize; ((TMP_Text)text).alignment = alignment; ((TMP_Text)text).textWrappingMode = (TextWrappingModes)0; ((TMP_Text)text).overflowMode = (TextOverflowModes)0; ((Graphic)text).color = Color.white; if ((Object)(object)_gameFont != (Object)null) { ((TMP_Text)text).font = _gameFont; } if ((Object)(object)_textMaterial != (Object)null) { ((Graphic)text).material = _textMaterial; } Shadow val = ((Component)text).gameObject.AddComponent<Shadow>(); val.effectColor = new Color(0f, 0f, 0f, 0.95f); val.effectDistance = new Vector2(2f, -2f); ((TMP_Text)text).outlineWidth = _outlineThickness.Value; ((TMP_Text)text).outlineColor = Color32.op_Implicit(new Color(0f, 0f, 0f, 1f)); ((TMP_Text)text).enableAutoSizing = false; ((TMP_Text)text).fontStyle = (FontStyles)1; ((TMP_Text)text).faceColor = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue); Canvas.ForceUpdateCanvases(); } private static void UpdateStaminaText(StaminaBar staminaBar) { try { if ((Object)(object)_staminaText == (Object)null || (Object)(object)Character.observedCharacter == (Object)null) { return; } float num = Character.observedCharacter.data.currentStamina * 100f; float num2 = Character.observedCharacter.data.extraStamina * 100f; ((TMP_Text)_staminaText).fontSize = _staminaFontSize.Value; ((TMP_Text)_staminaText).outlineWidth = _outlineThickness.Value; if ((Object)(object)_extraStaminaText != (Object)null) { ((TMP_Text)_extraStaminaText).fontSize = _staminaFontSize.Value; ((TMP_Text)_extraStaminaText).outlineWidth = _outlineThickness.Value; } ((TMP_Text)_staminaText).text = (_showPercentageSign.Value ? $"{num:F0}%" : $"{num:F0}"); if ((Object)(object)_extraStaminaText != (Object)null) { if (num2 > 0f) { ((Component)_extraStaminaText).gameObject.SetActive(true); ((TMP_Text)_extraStaminaText).text = (_showPercentageSign.Value ? $" +{num2:F0}%" : $" +{num2:F0}"); } else { ((Component)_extraStaminaText).gameObject.SetActive(false); } } UpdateStaminaTextColor(num, Character.observedCharacter.GetMaxStamina() * 100f, num2, staminaBar); if ((Object)(object)_staminaTextContainer != (Object)null) { bool active = ((Component)staminaBar.staminaBar).gameObject.activeSelf && !Character.observedCharacter.data.fullyPassedOut && !Character.observedCharacter.data.dead; _staminaTextContainer.SetActive(active); } } catch (Exception ex) { Log.LogError((object)("Error updating stamina text: " + ex.Message)); } } private static void UpdateStaminaTextColor(float currentStamina, float maxStamina, float extraStamina, StaminaBar staminaBar) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) try { if (!((Object)(object)_staminaText == (Object)null)) { float num = currentStamina / maxStamina; Image component = ((Component)staminaBar.staminaBar).GetComponent<Image>(); Color val; if (component == null) { val = ((num < 0.25f) ? LowStaminaColor : ((!(num < 0.5f)) ? HighStaminaColor : MediumStaminaColor)); } else { Color color = ((Graphic)component).color; float num2 = default(float); float num3 = default(float); float num4 = default(float); Color.RGBToHSV(color, ref num2, ref num3, ref num4); val = Color.HSVToRGB(num2, Mathf.Clamp01(num3 * 1.2f), Mathf.Clamp01(num4 * 1.3f)); } float num5 = default(float); float num6 = default(float); float num7 = default(float); Color.RGBToHSV(val, ref num5, ref num6, ref num7); val = Color.HSVToRGB(num5, num6, Mathf.Max(0.8f, num7)); ((Graphic)_staminaText).color = val; if ((Object)(object)_extraStaminaText != (Object)null) { ((Graphic)_extraStaminaText).color = ExtraStaminaColor; } } } catch (Exception ex) { Log.LogError((object)("Error updating text color: " + ex.Message)); } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }