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 Stamina Tweaks v1.0.0
BepInEx/plugins/StaminaTweaks.dll
Decompiled 2 years agousing 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 HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("StaminaTweaksFull")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("StaminaTweaksFull")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("17ab3ab7-bbc8-424d-b565-d7d5bead066c")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace StaminaTweaks; [BepInPlugin("StaminaTweaks", "Stamina Tweaks", "1.0.0.3")] [BepInProcess("valheim.exe")] public class StaminaTweaks : BaseUnityPlugin { private const string pluginGUID = "StaminaTweaks"; private const string pluginName = "Stamina Tweaks"; private const string pluginVersion = "1.0.0.3"; public static readonly Harmony harmony = new Harmony("StaminaTweaks"); private void Awake() { harmony.PatchAll(); } private void OnDestroy() { } } [HarmonyPatch(typeof(Attack), "GetAttackStamina")] public static class AxePickaxeTweaks { private static void Postfix(ref Attack __instance, ref float __result) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) if (__instance != null && (Object)(object)__instance.m_character != (Object)null && __instance.m_character.GetRightItem() != null && !LootSpawner.IsMonsterInRange(((Component)Player.m_localPlayer).transform.position, 20f)) { switch (__instance.m_character.GetRightItem().m_shared.m_name) { case "$item_axe_stone": case "$item_axe_bronze": case "$item_axe_flint": case "$item_axe_iron": case "$item_axe_blackmetal": case "$item_axe_jotunbane": case "$item_pickaxe_stone": case "$item_pickaxe_iron": case "$item_pickaxe_bronze": case "$item_pickaxe_antler": case "$item_pickaxe_blackmetal": case "$item_battleaxe": case "$item_battleaxe_crystal": __result = 0f; break; } } } } [HarmonyPatch(typeof(Player), "UseStamina")] public static class PlayerAndToolsTweaks { private static void Prefix(ref Player __instance, ref float v, ref float ___m_runStaminaDrain, ref float ___m_jumpStaminaUsage, ref float ___m_sneakStaminaDrain, ref float ___m_dodgeStaminaUsage, ref float ___m_encumberedStaminaDrain, ref float ___m_swimStaminaDrainMinSkill, ref float ___m_swimStaminaDrainMaxSkill) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)__instance != (Object)null)) { return; } if (!LootSpawner.IsMonsterInRange(((Component)Player.m_localPlayer).transform.position, 20f)) { ___m_runStaminaDrain = 0f; ___m_jumpStaminaUsage = 0f; ___m_sneakStaminaDrain = 0f; ___m_dodgeStaminaUsage = 0f; ___m_encumberedStaminaDrain = 0f; ___m_swimStaminaDrainMinSkill = 0f; ___m_swimStaminaDrainMaxSkill = 0f; } else { ___m_runStaminaDrain = 10f; ___m_jumpStaminaUsage = 10f; ___m_sneakStaminaDrain = 5f; ___m_dodgeStaminaUsage = 10f; ___m_encumberedStaminaDrain = 10f; ___m_swimStaminaDrainMinSkill = 5f; ___m_swimStaminaDrainMaxSkill = 2f; } string name = new StackTrace().GetFrame(2).GetMethod().Name; if ((((Humanoid)__instance).GetRightItem() != null && !LootSpawner.IsMonsterInRange(((Component)Player.m_localPlayer).transform.position, 20f) && name.Contains("UpdatePlacement")) || name.Contains("Repair") || name.Contains("RemovePiece")) { switch (((Humanoid)__instance).GetRightItem().m_shared.m_name) { case "$item_hammer": case "$item_hoe": case "$item_cultivator": v = 0f; break; } } } } [HarmonyPatch(typeof(Character), "IsSwimming")] public static class GetPlayerIsSwimming { public static bool playerIsSwimming; private static void Postfix(ref Character __instance, ref bool __result) { if ((Object)(object)__instance != (Object)null && __instance.IsPlayer()) { playerIsSwimming = __result; } } } [HarmonyPatch(typeof(Player), "UpdateStats", new Type[] { typeof(float) })] public static class RegenerationTweaks { private static void Postfix(ref Player __instance) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)__instance != (Object)null)) { return; } if (((Humanoid)__instance).GetRightItem() != null && !LootSpawner.IsMonsterInRange(((Component)Player.m_localPlayer).transform.position, 20f) && ((Character)__instance).InAttack() && !GetPlayerIsSwimming.playerIsSwimming && !((Character)__instance).IsEncumbered()) { switch (((Humanoid)__instance).GetRightItem().m_shared.m_name) { case "$item_axe_stone": case "$item_axe_bronze": case "$item_axe_flint": case "$item_axe_iron": case "$item_axe_blackmetal": case "$item_axe_jotunbane": case "$item_pickaxe_stone": case "$item_pickaxe_iron": case "$item_pickaxe_bronze": case "$item_pickaxe_antler": case "$item_pickaxe_blackmetal": ((Character)__instance).AddStamina(0.05f); break; } } if (GetPlayerIsSwimming.playerIsSwimming && !((Character)__instance).InAttack() && !LootSpawner.IsMonsterInRange(((Component)Player.m_localPlayer).transform.position, 20f)) { ((Character)__instance).AddStamina(0.05f); } if (((Character)__instance).IsEncumbered() && !((Character)__instance).InAttack() && !GetPlayerIsSwimming.playerIsSwimming && !LootSpawner.IsMonsterInRange(((Component)Player.m_localPlayer).transform.position, 20f)) { ((Character)__instance).AddStamina(0.05f); } } }