Please disclose if any significant portion of your mod was created 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 Agility v1.0.0
Agility.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Character_Stats; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("headclef")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+2713edf789e2552eb611bef3bc94a83d2c8b234c")] [assembly: AssemblyProduct("Agility")] [assembly: AssemblyTitle("Agility")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Agility { [BepInPlugin("headclef.Agility", "Agility", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Agility : BaseUnityPlugin { private const string PluginGuid = "headclef.Agility"; private const string PluginName = "Agility"; private const string PluginVersion = "1.0.0"; internal static ConfigEntry<bool> EnableStaminaRegen; internal static ConfigEntry<float> BaseRegenPerSecond; internal static ConfigEntry<float> RegenPerCombinedLevel; internal static ConfigEntry<float> MaxRegenPerSecond; internal static Agility Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_0054: Expected O, but got Unknown Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; BindConfiguration(); if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } private void OnDestroy() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void BindConfiguration() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown EnableStaminaRegen = ((BaseUnityPlugin)this).Config.Bind<bool>("Stamina Regeneration", "Enable", true, "Enable passive stamina regeneration based on agility stats."); BaseRegenPerSecond = ((BaseUnityPlugin)this).Config.Bind<float>("Stamina Regeneration", "Base Regen Per Second", 0f, new ConfigDescription("Base stamina regeneration per second regardless of stats. 0 = no base regen.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>())); RegenPerCombinedLevel = ((BaseUnityPlugin)this).Config.Bind<float>("Stamina Regeneration", "Regen Per Combined Level", 0.3f, new ConfigDescription("Additional stamina regeneration per second for each combined level of Stamina + Crouch Rest + Speed upgrades.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), Array.Empty<object>())); MaxRegenPerSecond = ((BaseUnityPlugin)this).Config.Bind<float>("Stamina Regeneration", "Max Regen Per Second", 0f, new ConfigDescription("Maximum stamina regeneration per second. 0 = no cap.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 50f), Array.Empty<object>())); } } } namespace Agility.Patches { [HarmonyPatch] internal static class StaminaRegenPatch { private static float _lastLogTime; [HarmonyPatch(typeof(PlayerController), "Update")] [HarmonyPostfix] private static void PlayerController_Update_Postfix(PlayerController __instance) { if (!Agility.EnableStaminaRegen.Value || !Character_Stats.AreStatsReady) { return; } try { if ((Object)(object)__instance != (Object)(object)PlayerController.instance) { return; } string localSteamId = Character_Stats.GetLocalSteamId(); if (localSteamId == null) { return; } int upgradeLevel = Character_Stats.GetUpgradeLevel(localSteamId, "Stamina"); int upgradeLevel2 = Character_Stats.GetUpgradeLevel(localSteamId, "Crouch Rest"); int upgradeLevel3 = Character_Stats.GetUpgradeLevel(localSteamId, "Speed"); int num = upgradeLevel + upgradeLevel2 + upgradeLevel3; if (num <= 0 && Agility.BaseRegenPerSecond.Value <= 0f) { return; } float num2 = Agility.BaseRegenPerSecond.Value + Agility.RegenPerCombinedLevel.Value * (float)num; float value = Agility.MaxRegenPerSecond.Value; if (value > 0f) { num2 = Math.Min(num2, value); } if (num2 <= 0f) { return; } float num3 = num2 * Time.deltaTime; float energyCurrent = __instance.EnergyCurrent; float energyStart = __instance.EnergyStart; if (!(energyCurrent >= energyStart)) { __instance.EnergyCurrent = Math.Min(energyCurrent + num3, energyStart); if (Time.time - _lastLogTime > 10f) { _lastLogTime = Time.time; Agility.Logger.LogDebug((object)($"Stamina regen: {num2:F2}/sec (combined level: {num}, " + $"stamina: {upgradeLevel}, crouch: {upgradeLevel2}, speed: {upgradeLevel3})")); } } } catch (Exception ex) { Agility.Logger.LogError((object)("StaminaRegen exception: " + ex.Message)); } } } }