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