From 6032712fabb7c9a61abbd7bce10a358bce5aab64 Mon Sep 17 00:00:00 2001 From: Kenionatus Date: Fri, 16 Aug 2024 01:42:08 +0200 Subject: [PATCH] Fix Desk Bell Bugs (#26388) * Fix Desk Bell Bugs Fixes a bug where a desk bell with a receiving signaler and another receiving signaler ended up in an infinite loop. Fixes door bells not unregistering (code) signal handlers for removed (item) signalers * remove superfluous comment Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kenionatus * Update code/modules/paperwork/desk_bell.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> --------- Signed-off-by: Kenionatus Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --- code/modules/paperwork/desk_bell.dm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm index 56d2d836598..65a7d075eb4 100644 --- a/code/modules/paperwork/desk_bell.dm +++ b/code/modules/paperwork/desk_bell.dm @@ -57,12 +57,12 @@ /obj/item/desk_bell/proc/on_signal() SIGNAL_HANDLER // COMSIG_ASSEMBLY_PULSED - INVOKE_ASYNC(src, PROC_REF(try_ring)) + INVOKE_ASYNC(src, PROC_REF(try_ring), null, TRUE) -/obj/item/desk_bell/proc/try_ring(mob/user) +/obj/item/desk_bell/proc/try_ring(mob/user, from_signaler = FALSE) if(ring_cooldown > world.time || !anchored) return TRUE - if(!ring_bell(user) && user) + if(!ring_bell(user, from_signaler) && user) to_chat(user, "[src] is silent. Some idiot broke it.") ring_cooldown = world.time + ring_cooldown_length return TRUE @@ -132,6 +132,7 @@ return TRUE to_chat(user, "You remove [attached_signaler].") user.put_in_hands(attached_signaler) + UnregisterSignal(attached_signaler, COMSIG_ASSEMBLY_PULSED) attached_signaler = null /// Check if the clapper breaks, and if it does, break it @@ -143,14 +144,14 @@ broken_ringer = TRUE /// Ring the bell -/obj/item/desk_bell/proc/ring_bell(mob/living/user) +/obj/item/desk_bell/proc/ring_bell(mob/living/user, from_signaler = FALSE) if(broken_ringer) return FALSE check_clapper(user) // The lack of varying is intentional. The only variance occurs on the strike the bell breaks. playsound(src, ring_sound, 70, vary = broken_ringer, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) flick("desk_bell_ring", src) - if(attached_signaler) + if(attached_signaler && !from_signaler) attached_signaler.signal() times_rang++ return TRUE