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.
This commit is contained in:
Mike
2014-05-16 13:33:19 -04:00
parent d619389657
commit df78402da8
2 changed files with 39 additions and 28 deletions
+16 -28
View File
@@ -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)
+23
View File
@@ -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