From 27ef151956d6b634131a9a1cbd66b0fae059e75b Mon Sep 17 00:00:00 2001 From: dj-34 Date: Sun, 28 Jan 2024 09:13:42 +0500 Subject: [PATCH 1/2] Tweak: prevent send multiple messages to same radio channel --- .../objects/items/devices/radio/beacon.dm | 3 +++ code/modules/mob/living/living_say.dm | 25 ++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 1ced9680dc0d..7eb0919d2740 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -26,6 +26,9 @@ /obj/item/radio/beacon/hear_talk() return +/obj/item/radio/beacon/talk_into(verbage) + return FALSE + /// Probably a better way of doing this, I'm lazy. /obj/item/radio/beacon/bacon diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 917bd1a9460c..8fea38cd3b05 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -291,12 +291,22 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) else //Turf, leave speech bubbles to the mob speech_bubble("[bubble_icon][speech_bubble_test]", src, speech_bubble_recipients) + hear_message_obj(listening_obj, src, message_pieces, verb) + + return 1 + +/proc/hear_message_obj(list/listening_obj, mob/M, list/message_pieces, verbage) + var/list/transmited_channels = list() for(var/obj/O in listening_obj) spawn(0) // KILL THIS - if(O) //It's possible that it could be deleted in the meantime. - O.hear_talk(src, message_pieces, verb) - - return TRUE + if(O) // It's possible that it could be deleted in the meantime. + if(isradio(O)) + var/obj/item/radio/radio = O + if(radio.broadcasting && get_dist(radio, M) <= radio.canhear_range && !(radio.frequency in transmited_channels)) + if(radio.talk_into(M, message_pieces, null, verbage)) + transmited_channels += radio.frequency + else + O.hear_talk(M, message_pieces, verbage) /obj/effect/speech_bubble var/mob/parent @@ -410,11 +420,8 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) if(get_turf(M) in hearturfs) listening |= M - //pass on the message to objects that can hear us. - for(var/obj/O in view(message_range, whisper_loc)) - spawn(0) - if(O) - O.hear_talk(src, message_pieces, verb) + // Pass on the message to objects that can hear us. + hear_message_obj(view(message_range, whisper_loc), src, message_pieces, verb) var/list/eavesdropping = hearers(eavesdropping_range, whisper_loc) eavesdropping -= src From 60503d02d5ccb99c4801aa0f4fed723684601bc5 Mon Sep 17 00:00:00 2001 From: dj-34 Date: Sat, 9 Mar 2024 00:48:10 +0500 Subject: [PATCH 2/2] Update code/modules/mob/living/living_say.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --- code/modules/mob/living/living_say.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 8fea38cd3b05..1aeb8eb879c8 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -293,7 +293,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) hear_message_obj(listening_obj, src, message_pieces, verb) - return 1 + return TRUE /proc/hear_message_obj(list/listening_obj, mob/M, list/message_pieces, verbage) var/list/transmited_channels = list()