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 HZ FixedSwim v1.0.0
HZ_FixedSwim.dll
Decompiled 6 hours agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("HZ_Fixed_Swim")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HZ_Fixed_Swim")] [assembly: AssemblyTitle("HZ_Fixed_Swim")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 Better_Swim { [HarmonyPatch(typeof(Humanoid), "EquipItem", new Type[] { typeof(ItemData), typeof(bool) })] internal static class AllowEquipWhileSwimmingPatch { [HarmonyPrefix] private static void Prefix(Humanoid __instance) { IsOnGroundOverridePatch.ForceGroundedForEquip = ModConfig.IsInitialized && ModConfig.KeepItemsEquippedWhileSwimming.Value && ((Character)__instance).IsPlayer(); } [HarmonyPostfix] private static void Postfix() { IsOnGroundOverridePatch.ForceGroundedForEquip = false; } } [HarmonyPatch(typeof(Character), "IsOnGround")] internal static class IsOnGroundOverridePatch { internal static bool ForceGroundedForEquip; [HarmonyPostfix] private static void Postfix(ref bool __result) { if (ForceGroundedForEquip) { __result = true; } } } [HarmonyPatch(typeof(Character), "UpdateSwimming")] internal static class IdleSwimStaminaRegenPatch { private static readonly FieldRef<Character, Vector3> MoveDirRef = AccessTools.FieldRefAccess<Character, Vector3>("m_moveDir"); private static readonly FieldRef<Humanoid, float> TimeSinceLastAttackRef = AccessTools.FieldRefAccess<Humanoid, float>("m_timeSinceLastAttack"); [HarmonyPostfix] private static void Postfix(Character __instance, float dt) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (!ModConfig.IsInitialized || !ModConfig.EnableIdleSwimRegen.Value) { return; } Player val = (Player)(object)((__instance is Player) ? __instance : null); if (val == null) { return; } Vector3 val2 = MoveDirRef.Invoke(__instance); if (((Character)val).IsSwimming() && !((Character)val).IsOnGround() && !(((Vector3)(ref val2)).sqrMagnitude > 0.01f) && ((Character)val).HaveStamina(0f)) { bool num = ((Humanoid)val).GetAttackDrawPercentage() > 0f; bool flag = TimeSinceLastAttackRef.Invoke((Humanoid)(object)val) < 1f; if (!(num || flag)) { float num2 = val.m_staminaRegen * ModConfig.IdleSwimRegenMultiplier.Value * dt; ((Character)val).AddStamina(num2); } } } } [HarmonyPatch(typeof(Humanoid), "UpdateEquipment")] internal static class UpdateEquipmentGatePatch { internal static bool InsideAutoHideCall; [HarmonyPrefix] private static void Prefix() { InsideAutoHideCall = true; } [HarmonyPostfix] private static void Postfix() { InsideAutoHideCall = false; } } [HarmonyPatch(typeof(Humanoid), "HideHandItems")] internal static class HideHandItemsGatePatch { [HarmonyPrefix] private static bool Prefix(ref bool __result) { if (UpdateEquipmentGatePatch.InsideAutoHideCall && ModConfig.IsInitialized && ModConfig.KeepItemsEquippedWhileSwimming.Value) { __result = false; return false; } return true; } } internal static class ModConfig { private const string GeneralSection = "General"; public static bool IsInitialized { get; private set; } public static ConfigEntry<bool> EnableSwimSprint { get; private set; } public static ConfigEntry<float> SwimSprintSpeedMultiplier { get; private set; } public static ConfigEntry<float> SwimSprintStaminaMultiplier { get; private set; } public static ConfigEntry<bool> EnableIdleSwimRegen { get; private set; } public static ConfigEntry<float> IdleSwimRegenMultiplier { get; private set; } public static ConfigEntry<bool> KeepItemsEquippedWhileSwimming { get; private set; } public static void Init(ConfigFile config) { EnableSwimSprint = config.Bind<bool>("General", "EnableSwimSprint", true, "Permite nadar mais rápido usando a tecla configurada para \"Correr\" (Run), com gasto extra de stamina proporcional."); SwimSprintSpeedMultiplier = config.Bind<float>("General", "SwimSprintSpeedMultiplier", 2f, "Multiplicador de velocidade de nado ao segurar Shift."); SwimSprintStaminaMultiplier = config.Bind<float>("General", "SwimSprintStaminaMultiplier", 2.25f, "Multiplicador de gasto de stamina ao nadar com Shift (sprint)."); EnableIdleSwimRegen = config.Bind<bool>("General", "EnableIdleSwimRegen", true, "Permite recuperar stamina lentamente enquanto parado (boiando) na água."); IdleSwimRegenMultiplier = config.Bind<float>("General", "IdleSwimRegenMultiplier", 1f, "Fração da regeneração normal de stamina aplicada enquanto parado na água (0.75 = 75%)."); KeepItemsEquippedWhileSwimming = config.Bind<bool>("General", "KeepItemsEquippedWhileSwimming", true, "Impede que armas/escudos sejam escondidos automaticamente ao entrar na água."); IsInitialized = true; } } [BepInPlugin("HZ.fixed_swim", "HZ_Fixed_Swim", "1.0.0")] public class Plugin : BaseUnityPlugin { public const string ModGuid = "HZ.fixed_swim"; public const string ModName = "HZ_Fixed_Swim"; public const string ModVersion = "1.0.0"; internal static Plugin Instance { get; private set; } internal static Harmony Harmony { get; private set; } internal static ManualLogSource Log => ((BaseUnityPlugin)Instance).Logger; private void Awake() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown Instance = this; ModConfig.Init(((BaseUnityPlugin)this).Config); Harmony = new Harmony("HZ.fixed_swim"); Harmony.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"HZ_Fixed_Swim 1.0.0 loaded."); } private void OnDestroy() { Harmony harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } } [HarmonyPatch(typeof(Character), "UpdateSwimming")] internal static class SwimSprintPatch { internal static bool IsSprintingThisFrame; private static float _originalSpeed; private static bool _applied; [HarmonyPrefix] private static void Prefix(Character __instance) { _applied = false; IsSprintingThisFrame = false; if (ModConfig.IsInitialized && ModConfig.EnableSwimSprint.Value && __instance.IsPlayer() && ZInput.GetButton("Run")) { _originalSpeed = __instance.m_swimSpeed; __instance.m_swimSpeed = _originalSpeed * ModConfig.SwimSprintSpeedMultiplier.Value; _applied = true; IsSprintingThisFrame = true; } } [HarmonyPostfix] private static void Postfix(Character __instance) { if (_applied) { __instance.m_swimSpeed = _originalSpeed; _applied = false; } } } [HarmonyPatch(typeof(Player), "OnSwimming")] internal static class SwimStaminaDrainPatch { [HarmonyPrefix] private static void Prefix(Vector3 targetVel, ref float dt) { if (ModConfig.IsInitialized && SwimSprintPatch.IsSprintingThisFrame && !(((Vector3)(ref targetVel)).magnitude <= 0.1f)) { dt *= ModConfig.SwimSprintStaminaMultiplier.Value; } } } }