using System; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using UnityEngine; [assembly: AssemblyFileVersion("0.5.0")] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyVersion("0.5.0.0")] namespace Regeneration; [BepInPlugin("cjayride.Regeneration", "Regeneration", "0.5.0")] public class BepInExPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(Player), "UpdateFood")] public static class UpdateFood_Patch { public static void Prefix(float dt, bool forceUpdate, ref float ___m_foodRegenTimer) { if (modEnabled.Value && !forceUpdate) { ___m_foodRegenTimer += dt / healthRegenTimeMult.Value - dt; } } } [HarmonyPatch(typeof(Player), "UpdateStats", new Type[] { typeof(float) })] public static class UpdateStats_Patch { public static void Prefix(Player __instance, ref float __state, float ___m_stamina, ref float ___m_staminaRegenTimer, ref float ___m_eiterRegen) { if (modEnabled.Value) { ___m_eiterRegen = eitrRegenRate.Value; __instance.m_dodgeStaminaUsage = dodgeStaminaLoss.Value; ((Character)__instance).m_jumpStaminaUsage = jumpStaminaLoss.Value; ((Humanoid)__instance).m_blockStaminaDrain = blockStaminaLoss.Value; __instance.m_sneakStaminaDrain = sneakStaminaLoss.Value; __instance.m_runStaminaDrain = runStaminaLoss.Value; __instance.m_encumberedStaminaDrain = encumberedStaminaLoss.Value; __instance.m_swimStaminaDrainMaxSkill = swimStaminaLossMax.Value; __instance.m_swimStaminaDrainMinSkill = swimStaminaLossMin.Value; ___m_staminaRegenTimer *= staminaRegenCooldownMult.Value; __state = ___m_stamina; } } public static void Postfix(Player __instance, float __state, ref float ___m_stamina) { if (modEnabled.Value && __state > 0f && ___m_stamina > __state) { ___m_stamina = Mathf.Max(0f, __state + (___m_stamina - __state) * staminaRegenMult.Value); } } } [HarmonyPatch(typeof(Player), "UpdatePlacement")] public static class UpdatePlacement_Patch { public static void Prefix(Player __instance, ref float __state, float ___m_stamina) { if (modEnabled.Value) { __state = ___m_stamina; } } public static void Postfix(Player __instance, float __state, ref float ___m_stamina) { if (modEnabled.Value && __state > 0f && ___m_stamina < __state) { ___m_stamina = Mathf.Max(0f, __state - (__state - ___m_stamina) * buildStaminaLossMult.Value); } } } [HarmonyPatch(typeof(FishingFloat), "Awake")] public static class FishingFloat_Awake_Patch { public static void Postfix(ref FishingFloat __instance) { if (modEnabled.Value) { __instance.m_hookedStaminaPerSec = hookedStaminaPerSec.Value; __instance.m_hookedStaminaPerSecMaxSkill = hookedStaminaPerSec.Value; } } } [HarmonyPatch(typeof(Player), "UseStamina")] public static class UseStamina_Patch { public static void Prefix(ref float v) { if (modEnabled.Value) { v *= staminaLossMult.Value; } } } [HarmonyPatch(typeof(Character), "Heal")] public static class Heal_Patch { public static void Prefix(Character __instance, ref float hp) { if (modEnabled.Value && __instance.IsPlayer()) { hp *= healthRegenMult.Value; } } } public static ConfigEntry staminaLossMult; public static ConfigEntry sneakStaminaLoss; public static ConfigEntry swimStaminaLossMin; public static ConfigEntry swimStaminaLossMax; public static ConfigEntry runStaminaLoss; public static ConfigEntry dodgeStaminaLoss; public static ConfigEntry jumpStaminaLoss; public static ConfigEntry blockStaminaLoss; public static ConfigEntry buildStaminaLossMult; public static ConfigEntry hookedStaminaPerSec; public static ConfigEntry encumberedStaminaLoss; public static ConfigEntry staminaRegenMult; public static ConfigEntry staminaRegenCooldownMult; public static ConfigEntry eitrRegenRate; public static ConfigEntry healthRegenMult; public static ConfigEntry healthRegenTimeMult; public static ConfigEntry modEnabled; public static ConfigEntry isDebug; public static ConfigEntry nexusID; public static void Dbgl(string str = "", bool pref = true) { if (isDebug.Value) { Debug.Log((object)((pref ? (typeof(BepInExPlugin).Namespace + " ") : "") + str)); } } public void Awake() { staminaLossMult = ((BaseUnityPlugin)this).Config.Bind("Options", "StaminaLossMult", 1f, "General stamina loss multiplier (affects all stamina loss)."); swimStaminaLossMin = ((BaseUnityPlugin)this).Config.Bind("Options", "SwimStaminaLossMin", 5f, "Stamina loss for swimming at minimum swim skill."); swimStaminaLossMax = ((BaseUnityPlugin)this).Config.Bind("Options", "SwimStaminaLossMax", 2f, "Stamina loss for swimming at maximum swim skill."); dodgeStaminaLoss = ((BaseUnityPlugin)this).Config.Bind("Options", "DodgeStaminaLoss", 10f, "Stamina loss for dodging."); jumpStaminaLoss = ((BaseUnityPlugin)this).Config.Bind("Options", "JumpStaminaLoss", 10f, "Stamina loss for jumping."); blockStaminaLoss = ((BaseUnityPlugin)this).Config.Bind("Options", "BlockStaminaLoss", 25f, "Stamina loss for blocking."); sneakStaminaLoss = ((BaseUnityPlugin)this).Config.Bind("Options", "SneakStaminaLoss", 5f, "Stamina loss for sneaking."); runStaminaLoss = ((BaseUnityPlugin)this).Config.Bind("Options", "RunStaminaLoss", 10f, "Stamina loss for running."); encumberedStaminaLoss = ((BaseUnityPlugin)this).Config.Bind("Options", "EncumberedStaminaLoss", 10f, "Stamina loss when encumbered."); buildStaminaLossMult = ((BaseUnityPlugin)this).Config.Bind("Options", "BuildStaminaLossMult", 1f, "Stamina loss multiplier for building."); hookedStaminaPerSec = ((BaseUnityPlugin)this).Config.Bind("Options", "HookedStaminaPerSec", 1f, "Stamina loss per second while reeling in a hooked fish."); staminaRegenMult = ((BaseUnityPlugin)this).Config.Bind("Options", "StaminaRegenMult", 1f, "Stamina gain multiplier."); staminaRegenCooldownMult = ((BaseUnityPlugin)this).Config.Bind("Options", "StaminaRegenCooldownMult", 1f, "Stamina regen cooldown time multiplier."); eitrRegenRate = ((BaseUnityPlugin)this).Config.Bind("Options", "EitrRegenRate", 5f, "Eitr Regen Rate."); healthRegenMult = ((BaseUnityPlugin)this).Config.Bind("Options", "HealthRegenMult", 1f, "Health gain multiplier."); healthRegenTimeMult = ((BaseUnityPlugin)this).Config.Bind("Options", "HealthRegenTimeMult", 1f, "Health gain delay multiplier."); modEnabled = ((BaseUnityPlugin)this).Config.Bind("General", "Enabled", true, "Enable this mod"); isDebug = ((BaseUnityPlugin)this).Config.Bind("General", "IsDebug", false, "Enable debug"); nexusID = ((BaseUnityPlugin)this).Config.Bind("General", "NexusID", 25, "Nexus mod ID for updates"); if (modEnabled.Value) { Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } } }