Please disclose if your mod was created primarily 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 NoNaturalRegeneration v1.2.0
NoNaturalRegeneration.dll
Decompiled 5 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using GameNetcodeStuff; using HarmonyLib; using Unity.Collections; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("NoNaturalRegeneration")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("NoNaturalRegeneration")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("c959da97-7d2d-475f-8238-c5777767c660")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace NoNaturalRegeneration; public class CriticalInjuryTrigger : MonoBehaviour { [CompilerGenerated] private sealed class <SetupTriggerDelayed>d__5 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public CriticalInjuryTrigger <>4__this; private BoxCollider <col>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SetupTriggerDelayed>d__5(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <col>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Expected O, but got Unknown //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Expected O, but got Unknown //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Expected O, but got Unknown //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Expected O, but got Unknown //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Expected O, but got Unknown //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.triggerObject = new GameObject("HealTrigger_" + <>4__this.playerController.playerUsername); <>4__this.triggerObject.layer = 9; <>4__this.triggerObject.tag = "InteractTrigger"; <col>5__1 = <>4__this.triggerObject.AddComponent<BoxCollider>(); ((Collider)<col>5__1).isTrigger = true; <col>5__1.size = new Vector3(1f, 1.5f, 1f); <>4__this.interactTrigger = <>4__this.triggerObject.AddComponent<InteractTrigger>(); <>4__this.interactTrigger.hoverTip = "Heal : [LMB]"; <>4__this.interactTrigger.disabledHoverTip = "Cannot heal"; <>4__this.interactTrigger.holdTip = "Stabilizing..."; <>4__this.interactTrigger.interactable = false; <>4__this.interactTrigger.oneHandedItemAllowed = true; <>4__this.interactTrigger.twoHandedItemAllowed = false; <>4__this.interactTrigger.holdInteraction = true; <>4__this.interactTrigger.timeToHold = 5f; <>4__this.interactTrigger.interactCooldown = true; <>4__this.interactTrigger.cooldownTime = 0.5f; <>4__this.interactTrigger.disableTriggerMesh = true; <>4__this.interactTrigger.triggerOnce = false; <>4__this.interactTrigger.touchTrigger = false; <>4__this.interactTrigger.onInteract = new InteractEvent(); <>4__this.interactTrigger.onInteractEarly = new InteractEvent(); <>4__this.interactTrigger.onStopInteract = new InteractEvent(); <>4__this.interactTrigger.onCancelAnimation = new InteractEvent(); <>4__this.interactTrigger.holdingInteractEvent = new InteractEventFloat(); <>4__this.interactTrigger.onInteractEarlyOtherClients = new InteractEvent(); ((UnityEvent<PlayerControllerB>)(object)<>4__this.interactTrigger.onInteract).AddListener((UnityAction<PlayerControllerB>)delegate { <>4__this.OnInteractTriggered(); }); <>4__this.triggerObject.SetActive(false); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private PlayerControllerB playerController; private InteractTrigger interactTrigger; private GameObject triggerObject; private const int CRITICAL_HEALTH_THRESHOLD = 20; private void Start() { playerController = ((Component)this).GetComponent<PlayerControllerB>(); ((MonoBehaviour)this).StartCoroutine(SetupTriggerDelayed()); } [IteratorStateMachine(typeof(<SetupTriggerDelayed>d__5))] private IEnumerator SetupTriggerDelayed() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SetupTriggerDelayed>d__5(0) { <>4__this = this }; } private void Update() { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)playerController == (Object)null) && !((Object)(object)triggerObject == (Object)null)) { triggerObject.transform.position = ((Component)playerController).transform.position + new Vector3(0f, 1.7f, 0f); bool flag = playerController.health < 20 && playerController.health > 0 && !((NetworkBehaviour)playerController).IsOwner && !playerController.isPlayerDead; if (interactTrigger.interactable != flag) { interactTrigger.interactable = flag; triggerObject.SetActive(flag); } } } private void OnDestroy() { if ((Object)(object)triggerObject != (Object)null) { Object.Destroy((Object)(object)triggerObject); } } public void OnInteractTriggered() { HealNetworkHandler.SendHealRequest(playerController.playerClientId); } } public static class HealNetworkHandler { public static void SendHealRequest(ulong targetClientId) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsClient) { return; } FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(8, (Allocator)2, -1); try { ((FastBufferWriter)(ref val)).WriteValueSafe<ulong>(ref targetClientId, default(ForPrimitives)); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("NoNatRegen_Heal", 0uL, val, (NetworkDelivery)3); } finally { ((IDisposable)(FastBufferWriter)(ref val)).Dispose(); } } public static void ReceiveHealRequestOnServer(ulong senderClientId, FastBufferReader reader) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsServer && !NetworkManager.Singleton.IsHost) { return; } ulong num = default(ulong); ((FastBufferReader)(ref reader)).ReadValueSafe<ulong>(ref num, default(ForPrimitives)); PlayerControllerB val = null; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val2 in allPlayerScripts) { if (val2.playerClientId == num) { val = val2; break; } } if ((Object)(object)val == (Object)null) { return; } FastBufferWriter val3 = default(FastBufferWriter); ((FastBufferWriter)(ref val3))..ctor(0, (Allocator)2, -1); try { NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("NoNatRegen_SelfHeal", val.actualClientId, val3, (NetworkDelivery)3); } finally { ((IDisposable)(FastBufferWriter)(ref val3)).Dispose(); } } public static void ReceiveSelfHealCommand(ulong senderClientId, FastBufferReader reader) { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!((Object)(object)localPlayerController == (Object)null) && ((NetworkBehaviour)localPlayerController).IsOwner) { localPlayerController.health = 20; localPlayerController.criticallyInjured = false; localPlayerController.bleedingHeavily = false; if ((Object)(object)localPlayerController.playerBodyAnimator != (Object)null) { localPlayerController.playerBodyAnimator.SetBool("Limp", false); } localPlayerController.MakeCriticallyInjured(false); if ((Object)(object)HUDManager.Instance != (Object)null) { HUDManager.Instance.UpdateHealthUI(localPlayerController.health, false); HUDManager.Instance.gasHelmetAnimator.SetBool("gasLeaking", false); } } } } public class LowHpEffect : MonoBehaviour { private PlayerControllerB playerController; private Volume localVolume; private VolumeProfile localProfile; private ColorAdjustments colorAdjustments; private const int LOW_HEALTH_THRESHOLD = 5; private void Start() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown playerController = ((Component)this).GetComponent<PlayerControllerB>(); GameObject val = new GameObject("LowHpGrayScaleVolume"); val.transform.SetParent(((Component)this).transform); localVolume = val.AddComponent<Volume>(); localVolume.isGlobal = true; localVolume.priority = 1000f; localVolume.weight = 0f; localProfile = ScriptableObject.CreateInstance<VolumeProfile>(); localVolume.profile = localProfile; if (!localProfile.TryGet<ColorAdjustments>(ref colorAdjustments)) { colorAdjustments = localProfile.Add<ColorAdjustments>(true); } ((VolumeParameter)colorAdjustments.saturation).overrideState = true; ((VolumeParameter<float>)(object)colorAdjustments.saturation).value = -100f; } private void Update() { if (!((Object)(object)playerController == (Object)null) && !((Object)(object)localVolume == (Object)null)) { if (!((NetworkBehaviour)playerController).IsOwner || playerController.isPlayerDead || ((Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)null && (Object)(object)playerController != (Object)(object)GameNetworkManager.Instance.localPlayerController)) { localVolume.weight = 0f; } else if (playerController.health <= 5 && playerController.health > 0) { localVolume.weight = Mathf.Lerp(localVolume.weight, 1f, Time.deltaTime * 5f); } else { localVolume.weight = Mathf.Lerp(localVolume.weight, 0f, Time.deltaTime * 5f); } } } private void OnDestroy() { if ((Object)(object)localVolume != (Object)null) { Object.Destroy((Object)(object)((Component)localVolume).gameObject); } if ((Object)(object)localProfile != (Object)null) { Object.Destroy((Object)(object)localProfile); } } } [HarmonyPatch(typeof(PlayerControllerB))] internal class LowHpEffectPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void AddLowHpEffect(PlayerControllerB __instance) { if ((Object)(object)((Component)__instance).gameObject.GetComponent<LowHpEffect>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<LowHpEffect>(); } } } [BepInPlugin("NoNaturalRegeneration", "No Natural Regeneration", "1.1.1")] public class Plugin : BaseUnityPlugin { private void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown Harmony val = new Harmony("NoNaturalRegeneration"); val.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"No Natural Regeneration is loaded!"); } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void AddHealTrigger(PlayerControllerB __instance) { if ((Object)(object)((Component)__instance).gameObject.GetComponent<CriticalInjuryTrigger>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<CriticalInjuryTrigger>(); } } } [HarmonyPatch(typeof(StartOfRound))] internal class NetworkMessagePatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void RegisterMessages() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown if ((Object)(object)NetworkManager.Singleton != (Object)null && NetworkManager.Singleton.CustomMessagingManager != null) { NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("NoNatRegen_Heal", new HandleNamedMessageDelegate(HealNetworkHandler.ReceiveHealRequestOnServer)); NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("NoNatRegen_SelfHeal", new HandleNamedMessageDelegate(HealNetworkHandler.ReceiveSelfHealCommand)); } } } [HarmonyPatch(typeof(PlayerControllerB))] public class LowHpDeathTimer { private class TimerData { public float deathTimer = -1f; } private static readonly ConditionalWeakTable<PlayerControllerB, TimerData> timers = new ConditionalWeakTable<PlayerControllerB, TimerData>(); [HarmonyPatch("Update")] [HarmonyPostfix] private static void CheckLowHpTimer(PlayerControllerB __instance) { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkBehaviour)__instance).IsOwner || __instance.isPlayerDead) { return; } timers.TryGetValue(__instance, out var value); if (value == null) { value = new TimerData(); timers.Add(__instance, value); } if (__instance.health <= 5 && __instance.health > 0) { if (value.deathTimer < 0f) { value.deathTimer = 60f; ShowWarningNotification(); } if (value.deathTimer > 0f) { value.deathTimer -= Time.deltaTime; if (value.deathTimer <= 0f) { __instance.DamagePlayer(5, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); value.deathTimer = -1f; } } } else { value.deathTimer = -1f; } } private static void ShowWarningNotification() { if ((Object)(object)HUDManager.Instance != (Object)null) { HUDManager.Instance.DisplayTip("WARNING!", "Your injury is fatal. Seek immediate medical attention or perish.", true, false, "warning"); } } } [HarmonyPatch(typeof(PlayerControllerB))] public class TimerManipulator { [HarmonyPatch("Update")] [HarmonyPostfix] private static void ManipulateRegenTimer(PlayerControllerB __instance) { if (((NetworkBehaviour)__instance).IsOwner && !__instance.isPlayerDead && __instance.health < 20 && __instance.health > 0 && __instance.healthRegenerateTimer <= 1f) { __instance.healthRegenerateTimer = 1.1f; } } }