diff --git a/SlayTheSpire2.LAN.Multiplayer/Patchs/Screens/NOverlayStackPatch.cs b/SlayTheSpire2.LAN.Multiplayer/Patchs/Screens/NOverlayStackPatch.cs new file mode 100644 index 0000000..9ab6fc0 --- /dev/null +++ b/SlayTheSpire2.LAN.Multiplayer/Patchs/Screens/NOverlayStackPatch.cs @@ -0,0 +1,34 @@ +using Godot; +using HarmonyLib; +using MegaCrit.Sts2.Core.Nodes.Screens.Overlays; + +// ReSharper disable UnusedMember.Global +// ReSharper disable UnusedType.Global + +namespace SlayTheSpire2.LAN.Multiplayer.Patchs.Screens +{ + [HarmonyPatch("MegaCrit.Sts2.Core.Nodes.Screens.Overlays.NOverlayStack", "Remove")] + internal class NOverlayStackRemovePatch + { + private static bool Prefix(object __instance, object screen) + { + var overlay = screen as GodotObject; + if (overlay == null || !GodotObject.IsInstanceValid(overlay)) + { + return false; + } + + var connections = overlay.GetSignalConnectionList("Completed"); + foreach (var connection in connections) + { + if (connection["callable"].AsCallable().Target == __instance) + { + GD.Print("NOverlayStack.Remove called twice, preventing crash."); + return false; + } + } + + return true; + } + } +}