diff --git a/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/BepInEx5Plugins.Ash.Alisa.PauseMenuFix.csproj b/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/BepInEx5Plugins.Ash.Alisa.PauseMenuFix.csproj new file mode 100644 index 0000000..2667e15 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/BepInEx5Plugins.Ash.Alisa.PauseMenuFix.csproj @@ -0,0 +1,33 @@ + + + + net35 + BepInEx5Plugins.Ash.Alisa.PauseMenuFix + PauseMenuFix + 1.0.0 + true + 9.0 + + + + + + + + + + + + + + + + ..\lib\SteamRelease\Assembly-CSharp.dll + false + + + + + + + diff --git a/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/HarmonyPatches/PauzeGame_HardPauzeOn.cs b/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/HarmonyPatches/PauzeGame_HardPauzeOn.cs new file mode 100644 index 0000000..83d9a87 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/HarmonyPatches/PauzeGame_HardPauzeOn.cs @@ -0,0 +1,85 @@ +using HarmonyLib; +using System; +using UnityEngine; + +namespace BepInEx5Plugins.Ash.Alisa.PauseMenuFix.HarmonyPatches +{ + [HarmonyPatch(typeof(PauzeGame), "HardPauzeOn")] + public class PauzeGame_HardPauzeOn + { + // Move playerWeapon and playerMovement assignments to prevent causing null reference exceptions. + public static bool Prefix(PauzeGame __instance + , ref AlisaAttributes ___attributes + ) + { + __instance.pauzed = true; + + var enemies = GameObject.FindGameObjectsWithTag("Enemy"); + + __instance.enemyControllers = new EnemyController[enemies.Length]; + + for (var i = 0; i < enemies.Length; ++i) + { + __instance.enemyControllers[i] = enemies[i].GetComponent(); + __instance.enemyControllers[i].pauzed = true; + } + + __instance.player = GameObject.FindWithTag("Player"); + __instance.interact = GameObject.FindWithTag("RayCastPoint").GetComponent(); + + if (!__instance.menu) + { + __instance.menu = GameObject.FindWithTag("PlayerUI").GetComponent(); + } + + if (__instance.menu) + { + __instance.menu.canOpenMenu = false; + } + + if (__instance.player) + { + __instance.playerWeapon = __instance.player.GetComponent(); + __instance.playerMovement = __instance.player.GetComponent(); + + if (__instance.playerWeapon) + { + __instance.playerWeapon.disabled = true; + } + + if (__instance.playerMovement) + { + __instance.playerMovement.disabled = true; + } + + if (__instance.interact) + { + __instance.interact.disabled = true; + } + + ___attributes = __instance.player.GetComponent(); + ___attributes.animPaused = true; + } + else + { + Console.WriteLine("PauzeGame_HardPauzeOn.Prefix: player is null!"); + + __instance.playerWeapon = null; + __instance.playerMovement = null; + ___attributes = null; + } + + if (__instance.player && !__instance.quickUi) + { + __instance.quickUi = GameObject.Find("/PlayerUIHolder/PlayerUI/QuickUI/UI_Base").GetComponent(); + } + + if (__instance.quickUi) + { + __instance.quickUi.returningPos = true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/NuGet.Config b/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/NuGet.Config new file mode 100644 index 0000000..1864ded --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/Plugin.cs b/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/Plugin.cs new file mode 100644 index 0000000..fcd268b --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.PauseMenuFix/Plugin.cs @@ -0,0 +1,26 @@ +using BepInEx; +using HarmonyLib; +using System; + +namespace BepInEx5Plugins.Ash.Alisa.PauseMenuFix +{ + [BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)] + public class Plugin : BaseUnityPlugin + { + private void Awake() + { + try + { + Logger.LogInfo($"Plugin {PluginInfo.PLUGIN_GUID} is loaded!"); + + var harmony = new Harmony(Info.Metadata.GUID); + + harmony.PatchAll(); + } + catch (Exception exception) + { + Console.WriteLine(exception); + } + } + } +}