From df78402da8fb3bf851b4479e762583dd6ec593a5 Mon Sep 17 00:00:00 2001 From: Mike Date: Thu, 15 May 2014 01:49:42 -0400 Subject: [PATCH] Simplifies radio and language code checking Also moved the procs used to parse the codes into mob/say.dm to make it easier for mobs that aren't carbon/humans to use language codes in the future. --- code/modules/mob/living/carbon/human/say.dm | 44 ++++++++------------- code/modules/mob/say.dm | 23 +++++++++++ 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 26e5de6f10b..d2cd699cebc 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -22,34 +22,22 @@ if(name != GetVoice()) alt_name = "(as [get_id_name("Unknown")])" - - var/message_mode = null - var/datum/language/speaking = null - - if(copytext(message,1,2) == ";") - message_mode = "headset" - message = copytext(message,2) - - if(length(message) >= 2) - var/channel_prefix = copytext(message, 1 ,3) - var/check_language_and_radio = copytext(message,3,5) - if(languages.len) - for(var/datum/language/L in languages) - if(lowertext(channel_prefix) == ":[L.key]" || lowertext(check_language_and_radio) == ":[L.key]") - verb = L.speech_verb - speaking = L - break - if(!message_mode) - message_mode = department_radio_keys[channel_prefix] - - if(speaking || copytext(message,1,2) == ":") - var/positioncut = 3 - if(speaking && (message_mode && copytext(message,3,4)==":")) - positioncut += 2 - message = trim(copytext(message,positioncut)) - - - message = capitalize(trim_left(message)) + + //parse the radio code and consume it + var/message_mode = parse_message_mode(message) + if (message_mode) + if (message_mode == "headset") + message = copytext(message,2) + else + message = copytext(message,3) + + //parse the language code and consume it + var/datum/language/speaking = parse_language(message) + if (speaking) + verb = speaking.speech_verb + message = copytext(message,3) + + message = capitalize(trim(message)) if(speech_problem_flag) var/list/handle_r = handle_speech_problems(message) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 63ea3485bb9..6371108c27a 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -145,3 +145,26 @@ else if (ending == "!") return "2" return "0" + +//parses the message mode code (e.g. :h, ;) from text, such as that supplied to say. +//returns the message mode string or null for no message mode. +/mob/proc/parse_message_mode(var/message) + if(length(message) >= 1 && copytext(message,1,2) == ";") + return "headset" + + if(length(message) >= 2) + var/channel_prefix = copytext(message, 1 ,3) + return department_radio_keys[channel_prefix] + + return null + +//parses the language code (e.g. :j) from text, such as that supplied to say. +//returns the language object only if the code corresponds to a language that src knows, otherwise null. +/mob/proc/parse_language(var/message) + if(length(message) >= 2) + var/language_prefix = lowertext(copytext(message, 1 ,3)) + for(var/datum/language/L in src.languages) + if(language_prefix == ":[L.key]") + return L + return null +