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 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);
}
}
}