mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-25 04:57:47 +01:00
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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user