Decompiled source of Stamina Boost v0.0.4

StaminaMod.dll

Decompiled a week ago
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 BepInEx.Logging;
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 StaminaFieldsLocal;

[BepInPlugin("nazhi.valheim.staminafieldslocal", "StaminaFieldsLocal", "1.1.0")]
public class Plugin : BaseUnityPlugin
{
	[HarmonyPatch(typeof(Player), "Awake")]
	public static class Patch_Player_Awake_Force
	{
		private static void Postfix(Player __instance)
		{
			if (ApplyOnAwake.Value)
			{
				__instance.m_staminaRegen = Mathf.Max(0f, BaseRegen.Value);
				__instance.m_staminaRegenTimeMultiplier = TimeMultiplier.Value;
			}
		}
	}

	[HarmonyPatch(typeof(Player), "UpdateStats", new Type[] { typeof(float) })]
	public static class Patch_Player_UpdateStats_dt
	{
		private static void Prefix(Player __instance)
		{
			float num = Mathf.Max(0f, BaseRegen.Value);
			float value = TimeMultiplier.Value;
			float maxStamina = ((Character)__instance).GetMaxStamina();
			float stamina = __instance.m_stamina;
			float num2 = ((maxStamina > 0f) ? (stamina / maxStamina) : 0f);
			float num3 = ((num2 < 0.5f) ? Mathf.Max(0f, BelowHalfMultiplier.Value) : Mathf.Max(0f, AboveHalfMultiplier.Value));
			__instance.m_staminaRegen = num * num3;
			__instance.m_staminaRegenTimeMultiplier = value;
		}
	}

	public const string ModGUID = "nazhi.valheim.staminafieldslocal";

	public const string ModName = "StaminaFieldsLocal";

	public const string ModVersion = "1.1.0";

	private static Harmony _harmony;

	internal static ManualLogSource Log;

	public static ConfigEntry<float> BaseRegen;

	public static ConfigEntry<float> TimeMultiplier;

	public static ConfigEntry<bool> ApplyOnAwake;

	public static ConfigEntry<float> BelowHalfMultiplier;

	public static ConfigEntry<float> AboveHalfMultiplier;

	private void Awake()
	{
		//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Expected O, but got Unknown
		Log = ((BaseUnityPlugin)this).Logger;
		BaseRegen = ((BaseUnityPlugin)this).Config.Bind<float>("General", "BaseRegen", 8f, "Valor para Player.m_staminaRegen (vanilla ~5). Se escala además por % de stamina.");
		TimeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "TimeMultiplier", 1f, "Valor para Player.m_staminaRegenTimeMultiplier (vanilla ~1).");
		ApplyOnAwake = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ApplyOnAwake", true, "Si true, también aplica al hacer Awake() del Player.");
		BelowHalfMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Scaling", "BelowHalfMultiplier", 3f, "Multiplicador adicional cuando la stamina actual es <50% del máximo. (3.0 = 3x)");
		AboveHalfMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Scaling", "AboveHalfMultiplier", 2f, "Multiplicador adicional cuando la stamina actual es ≥50% del máximo. (2.0 = 2x)");
		_harmony = new Harmony("nazhi.valheim.staminafieldslocal");
		_harmony.PatchAll(typeof(Patch_Player_UpdateStats_dt));
		_harmony.PatchAll(typeof(Patch_Player_Awake_Force));
		Log.LogInfo((object)"✅ StaminaFieldsLocal 1.1.0 cargado.");
	}

	private void OnDestroy()
	{
		Harmony harmony = _harmony;
		if (harmony != null)
		{
			harmony.UnpatchSelf();
		}
	}

	internal static string SafeName(Player p)
	{
		try
		{
			return ((p != null) ? p.GetPlayerName() : null) ?? "(null)";
		}
		catch
		{
			return "(name err)";
		}
	}
}