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 EasyClimbing v0.1.0
plugins/EasyGlimbing.dll
Decompiled 2 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.mathis.climbingdamage", "Climbing Damage Mod", "1.0.0")] public class CustomClimbingMod : BaseUnityPlugin { public const float AFFLICTION_RATE_PER_SECOND_CLIMBING_OUT_OF_STAMINA = 0.05f; public const float MIN_MOVEMENT_THRESHOLD_FOR_DAMAGE = 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.mathis.climbingdamage"); val.PatchAll(Assembly.GetExecutingAssembly()); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Mod Climbing Damage chargé !"); } } [HarmonyPatch(typeof(Character), "OutOfStamina")] public class CharacterOutOfStaminaPatch { private static bool Prefix(Character __instance, ref bool __result) { if (__instance.IsLocal && (Object)(object)__instance == (Object)(object)Character.localCharacter && __instance.data.isClimbing) { __result = false; return false; } return true; } } [HarmonyPatch(typeof(CharacterClimbing), "Update")] public class ClimbingUpdateDamagePatch { private static float _damageTickTimer; private const float DAMAGE_TICK_INTERVAL = 0.5f; private static MethodInfo _outOfStaminaMethod; private static void Postfix(CharacterClimbing __instance, Character ___character, PhotonView ___view) { if (_outOfStaminaMethod == null) { _outOfStaminaMethod = AccessTools.Method(typeof(Character), "OutOfStamina", new Type[0], (Type[])null); if (_outOfStaminaMethod == null) { Debug.LogError((object)"[CustomClimbingMod] FATAL ERROR: Could not find 'OutOfStamina' method on Character class. Mod will not function correctly."); return; } } if (!___view.IsMine) { return; } if (!___character.data.isClimbing) { _damageTickTimer = 0f; } else if ((bool)_outOfStaminaMethod.Invoke(___character, null)) { if (((Vector2)(ref ___character.input.movementInput)).magnitude > 0.1f) { _damageTickTimer += Time.deltaTime; if (_damageTickTimer >= 0.5f) { float num = 0.05f * _damageTickTimer; ___character.refs.afflictions.AddStatus((STATUSTYPE)0, num, false); Debug.Log((object)$"[CustomClimbingMod] Joueur {___character.characterName} grimpe hors d'endurance et subit {num:F4} 'Injury'. Total Afflictions: {___character.refs.afflictions.statusSum:F4}"); _damageTickTimer = 0f; } } else { _damageTickTimer = 0f; } } else { _damageTickTimer = 0f; } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }