From f2f561ca4ed8e859df99c07fa15f0033f1652d1d Mon Sep 17 00:00:00 2001 From: Honahec Date: Mon, 23 Mar 2026 22:31:22 +0800 Subject: [PATCH] fix: multiple attempt to bind signal --- .../Patchs/Screens/NOverlayStackPatch.cs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 SlayTheSpire2.LAN.Multiplayer/Patchs/Screens/NOverlayStackPatch.cs diff --git a/SlayTheSpire2.LAN.Multiplayer/Patchs/Screens/NOverlayStackPatch.cs b/SlayTheSpire2.LAN.Multiplayer/Patchs/Screens/NOverlayStackPatch.cs new file mode 100644 index 0000000..99b6e78 --- /dev/null +++ b/SlayTheSpire2.LAN.Multiplayer/Patchs/Screens/NOverlayStackPatch.cs @@ -0,0 +1,33 @@ +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(typeof(NOverlayStack), "Remove")] + internal class NOverlayStackRemovePatch + { + private static bool Prefix(NOverlayStack __instance, NOverlay overlay) + { + if (overlay == null || !GodotObject.IsInstanceValid(overlay)) + { + return false; + } + + var connections = overlay.GetSignalConnectionList("Completed"); + foreach (var connection in connections) + { + if (connection["callable"].AsCallable().Target == __instance) + { + Plugin.Logger?.LogWarning("NOverlayStack.Remove called twice, preventing crash."); + return false; + } + } + + return true; + } + } +}