using 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.Logging; using GameNetcodeStuff; using HarmonyLib; using LobbyCompatibility.Attributes; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; [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: AssemblyCompany("Sergo.CrouchFix")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.1.0")] [assembly: AssemblyInformationalVersion("1.0.1")] [assembly: AssemblyProduct("CrouchFix")] [assembly: AssemblyTitle("Sergo.CrouchFix")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.1.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 CrouchFix { [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { [HarmonyPatch("DamagePlayer")] [HarmonyPrefix] public static bool DamagePlayer(PlayerControllerB __instance, int damageNumber, bool hasDamageSFX = true, bool callRPC = true, CauseOfDeath causeOfDeath = 0, int deathAnimation = 0, bool fallDamage = false, Vector3 force = default(Vector3)) { //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkBehaviour)__instance).IsOwner) { return false; } if (__instance.isPlayerDead) { return false; } if (!__instance.AllowPlayerDeath()) { return false; } if (__instance.health - damageNumber <= 0 && !__instance.criticallyInjured && damageNumber < 50) { __instance.health = 5; } else { __instance.health = Mathf.Clamp(__instance.health - damageNumber, 0, 100); } HUDManager.Instance.UpdateHealthUI(__instance.health, true); if (__instance.health <= 0) { bool flag = deathAnimation != -1; __instance.KillPlayer(force, flag, causeOfDeath, deathAnimation, default(Vector3)); } else { if (__instance.health < 10 && !__instance.criticallyInjured) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); __instance.MakeCriticallyInjured(true); } else { if (damageNumber >= 10) { __instance.sprintMeter = Mathf.Clamp(__instance.sprintMeter + (float)damageNumber / 125f, 0f, 1f); } if (callRPC) { if (((NetworkBehaviour)__instance).IsServer) { __instance.DamagePlayerClientRpc(damageNumber, __instance.health); } else { __instance.DamagePlayerServerRpc(damageNumber, __instance.health); } } } if (fallDamage) { HUDManager.Instance.UIAudio.PlayOneShot(StartOfRound.Instance.fallDamageSFX, 1f); WalkieTalkie.TransmitOneShotAudio(__instance.movementAudio, StartOfRound.Instance.fallDamageSFX, 1f); __instance.BreakLegsSFXClientRpc(); } else if (hasDamageSFX) { HUDManager.Instance.UIAudio.PlayOneShot(StartOfRound.Instance.damageSFX, 1f); } } ((UnityEvent)StartOfRound.Instance.LocalPlayerDamagedEvent).Invoke(); __instance.takingFallDamage = false; if (!__instance.inSpecialInteractAnimation && !__instance.isCrouching) { __instance.playerBodyAnimator.SetTrigger("Damage"); } __instance.specialAnimationWeight = 1f; __instance.PlayQuickSpecialAnimation(0.7f); return false; } } [BepInPlugin("Sergo.CrouchFix", "CrouchFix", "1.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [LobbyCompatibility(/*Could not decode attribute arguments.*/)] public class CrouchFix : BaseUnityPlugin { public static CrouchFix Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; Patch(); Logger.LogInfo((object)"Sergo.CrouchFix v1.0.1 has loaded!"); } internal static void Patch() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("Sergo.CrouchFix"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(); Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } } } namespace TestMod { public static class MyPluginInfo { public const string PLUGIN_GUID = "Sergo.CrouchFix"; public const string PLUGIN_NAME = "CrouchFix"; public const string PLUGIN_VERSION = "1.0.1"; } } namespace TestMod.Patches { [HarmonyPatch(typeof(TVScript))] public class ExampleTVPatch { [HarmonyPatch("SwitchTVLocalClient")] [HarmonyPrefix] private static void SwitchTVPrefix(TVScript __instance) { StartOfRound.Instance.shipRoomLights.SetShipLightsBoolean(__instance.tvOn); } } }