The BepInEx console will not appear when launching like it does for other games on Thunderstore. This is normal (and helps prevent crashes during startup). You can turn it back on in your BepInEx.cfg file.
Decompiled source of EmergencyClimbing v0.1.0
plugins/emergencyclimbing.dll
Decompiled 3 weeks 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 HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; 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("emergencyclimbing")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.1.0.0")] [assembly: AssemblyInformationalVersion("0.1.0")] [assembly: AssemblyProduct("emergencyclimbing")] [assembly: AssemblyTitle("EmergencyClimbing")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.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 BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace CustomClimbingMod { [BepInPlugin("com.xammen.emergencyclimbing", "EmergencyClimbing", "1.0.0")] public class CustomClimbingMod : BaseUnityPlugin { public const float SINGLE_DROWSY_PUNISHMENT_AMOUNT = 0.0005f; public const float PUNISHMENT_COOLDOWN_DURATION = 5f; public const float MIN_CLIMB_ATTEMPT_INPUT_MAGNITUDE = 0.1f; private void Awake() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown Harmony val = new Harmony("com.xammen.emergencyclimbing"); val.PatchAll(Assembly.GetExecutingAssembly()); ((BaseUnityPlugin)this).Logger.LogInfo((object)"EmergencyClimbing Mod Loaded !"); } } [HarmonyPatch(typeof(Character), "OutOfStamina")] public class CharacterOutOfStaminaPatch { private static bool _currentlyApplyingClimbBypass; public static bool CurrentlyApplyingClimbBypass { get { return _currentlyApplyingClimbBypass; } set { _currentlyApplyingClimbBypass = value; } } private static bool Prefix(Character __instance, ref bool __result) { if (_currentlyApplyingClimbBypass) { __result = false; return false; } return true; } } [HarmonyPatch(typeof(CharacterClimbing), "Update")] public class ClimbingUpdateDamagePatch { private static float _nextPunishmentReadyTime; private static bool _wasTrulyOutOfStaminaLastFrame; private static void Postfix(CharacterClimbing __instance, Character ___character, PhotonView ___view) { if (___view.IsMine) { CharacterOutOfStaminaPatch.CurrentlyApplyingClimbBypass = ___character.data.isClimbing; bool flag = ___character.data.currentStamina < 0.005f && ___character.data.extraStamina < 0.001f; if (!flag && _wasTrulyOutOfStaminaLastFrame) { _nextPunishmentReadyTime = 0f; } _wasTrulyOutOfStaminaLastFrame = flag; if (___character.data.isClimbing && flag && ((Vector2)(ref ___character.input.movementInput)).magnitude > 0.1f && Time.time >= _nextPunishmentReadyTime) { Debug.Log((object)("[ClimbingUpdateDamagePatch] PUNITION UNIQUE DE DROWSY (" + 0.05f + "%) appliquée !")); ___character.refs.afflictions.AddStatus((STATUSTYPE)6, 0.0005f, false); _nextPunishmentReadyTime = Time.time + 5f; } } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }