From d5d9200331c14e19a2944ad59a8bf89bd5312f2b Mon Sep 17 00:00:00 2001 From: xen-42 Date: Mon, 10 Feb 2025 16:07:02 -0500 Subject: [PATCH] Don't use patch, use invincible field on player resources --- .../Handlers/InvulnerabilityHandler.cs | 24 ++----------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/NewHorizons/Handlers/InvulnerabilityHandler.cs b/NewHorizons/Handlers/InvulnerabilityHandler.cs index cb48fe22..3649cf70 100644 --- a/NewHorizons/Handlers/InvulnerabilityHandler.cs +++ b/NewHorizons/Handlers/InvulnerabilityHandler.cs @@ -5,49 +5,29 @@ using UnityEngine.SceneManagement; namespace NewHorizons.Handlers { - [HarmonyPatch] internal class InvulnerabilityHandler { - private static bool _invulnerableOverride; - public static void MakeInvulnerable(bool invulnerable) { NHLogger.Log($"Toggling immortality: {invulnerable}"); - // We're setting our own override because we want to ensure that no other mod that can set _invincible can break this for us - _invulnerableOverride = invulnerable; var deathManager = GetDeathManager(); var resources = GetPlayerResouces(); if (invulnerable) { deathManager._invincible = true; + resources._invincible = true; } else { resources._currentHealth = 100f; deathManager._invincible = false; + resources._invincible = false; } } - [HarmonyPrefix] - [HarmonyPatch(typeof(DeathManager), nameof(DeathManager.KillPlayer))] - [HarmonyPatch(typeof(PlayerResources), nameof(PlayerResources.ApplyInstantDamage))] - [HarmonyPatch(typeof(PlayerImpactAudio), nameof(PlayerImpactAudio.OnImpact))] - public static bool DeathManager_KillPlayer_Prefix() - { - // Base game _invincible is still overriden by high speed impacts - // We also are avoiding playing impact related effects by just skipping these methods - return !_invulnerableOverride; - } - private static DeathManager GetDeathManager() => GameObject.FindObjectOfType(); private static PlayerResources GetPlayerResouces() => GameObject.FindObjectOfType(); - - static InvulnerabilityHandler() - { - // If the scene unloads when _invulnerableOverride is on it might not get turned off - SceneManager.sceneUnloaded += (_) => _invulnerableOverride = false; - } } }