using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("AichoGuardian")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AichoGuardian")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("D28110A9-E229-4700-AD4D-DCD37486A82B")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace BetterStaminaRegen; [BepInPlugin("com.nazhi.betterstaminaregen", "Better Stamina Regen", "1.3.0")] public class BetterStaminaRegenPlugin : BaseUnityPlugin { private Harmony _harmony; public static ConfigEntry LowThreshold; public static ConfigEntry LowRegenMultiplier; public static ConfigEntry HighRegenMultiplier; private void Awake() { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown LowThreshold = ((BaseUnityPlugin)this).Config.Bind("General", "LowThreshold", 0.5f, "Umbral (0..1) para regen muy rápida."); LowRegenMultiplier = ((BaseUnityPlugin)this).Config.Bind("General", "LowRegenMultiplier", 6f, "Multiplicador si stamina% < umbral."); HighRegenMultiplier = ((BaseUnityPlugin)this).Config.Bind("General", "HighRegenMultiplier", 1.5f, "Multiplicador si stamina% ≥ umbral."); _harmony = new Harmony("com.nazhi.betterstaminaregen"); _harmony.PatchAll(); } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } } [HarmonyPatch(typeof(Character), "UpdateStats", new Type[] { typeof(float) })] public static class Patch_Character_UpdateStats { private static readonly FieldInfo F_m_stamina = AccessTools.Field(typeof(Character), "m_stamina"); private static void Prefix(Character __instance, ref float __state) { Player val = (Player)(object)((__instance is Player) ? __instance : null); if (val != null) { __state = val.GetStamina(); } else { __state = -1f; } } private static void Postfix(Character __instance, ref float __state) { Player val = (Player)(object)((__instance is Player) ? __instance : null); if (val == null || ((Character)val).IsDead() || __state < 0f) { return; } float num = __state; float stamina = val.GetStamina(); if (stamina <= num) { return; } float maxStamina = ((Character)val).GetMaxStamina(); if (!(maxStamina <= 0f)) { float num2 = stamina / maxStamina; float num3 = ((num2 < BetterStaminaRegenPlugin.LowThreshold.Value) ? BetterStaminaRegenPlugin.LowRegenMultiplier.Value : BetterStaminaRegenPlugin.HighRegenMultiplier.Value); float num4 = stamina - num; float num5 = num4 * Mathf.Max(1f, num3); float num6 = Mathf.Min(maxStamina, num + num5); if (F_m_stamina != null) { F_m_stamina.SetValue(val, num6); } } } }