Message piece combiner returns a list

This commit is contained in:
Aronai Sieyes
2021-05-30 15:45:11 -04:00
parent d0789535da
commit 70ea101c96
7 changed files with 1154 additions and 1139 deletions
+16 -7
View File
@@ -2,7 +2,9 @@
/mob/proc/combine_message(var/list/message_pieces, var/verb, var/mob/speaker, always_stars = FALSE, var/radio = FALSE)
var/iteration_count = 0
var/msg = "" // This is to make sure that the pieces have actually added something
. = "[verb], \""
var/raw_msg = ""
. = list("formatted" = "[verb], \"", "raw" = "")
for(var/datum/multilingual_say_piece/SP in message_pieces)
iteration_count++
var/piece = SP.message
@@ -27,6 +29,9 @@
if(istype(S.say_list) && length(S.say_list.speak))
piece = pick(S.say_list.speak)
raw_msg += (piece + " ")
//HTML formatting
if(!SP.speaking) // Catch the most generic case first
piece = "<span class='message body'>[piece]</span>"
else if(radio) // SP.speaking == TRUE enforced by previous !SP.speaking
@@ -38,10 +43,11 @@
if(msg == "")
// There is literally no content left in this message, we need to shut this shit down
. = "" // hear_say will suppress it
.["formatted"] = "" // hear_say will suppress it
else
. = trim(. + trim(msg))
. += "\""
.["formatted"] = trim(.["formatted"] + trim(msg))
.["formatted"] += "\""
.["raw"] = trim(raw_msg)
/mob/proc/saypiece_scramble(datum/multilingual_say_piece/SP)
if(SP.speaking)
@@ -76,7 +82,8 @@
var/mob/living/carbon/human/H = speaker
speaker_name = H.GetVoice()
var/message = combine_message(message_pieces, verb, speaker)
var/list/combined = combine_message(message_pieces, verb, speaker)
var/message = combined["formatted"]
if(message == "")
return
@@ -164,7 +171,8 @@
if(!client)
return
var/message = combine_message(message_pieces, verb, speaker, always_stars = hard_to_hear, radio = TRUE)
var/list/combined = combine_message(message_pieces, verb, speaker, always_stars = hard_to_hear, radio = TRUE)
var/message = combined["formatted"]
if(sleeping || stat == UNCONSCIOUS) //If unconscious or sleeping
hear_sleep(multilingual_to_message(message_pieces))
return
@@ -272,7 +280,8 @@
return
/mob/proc/hear_holopad_talk(list/message_pieces, var/verb = "says", var/mob/speaker = null)
var/message = combine_message(message_pieces, verb, speaker)
var/list/combined = combine_message(message_pieces, verb, speaker)
var/message = combined["formatted"]
var/name = speaker.name
if(!say_understands(speaker))
File diff suppressed because it is too large Load Diff
+127 -126
View File
@@ -1,126 +1,127 @@
/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode)
if(!is_component_functioning("radio"))
to_chat(src, "<span class='warning'>Your radio isn't functional at this time.</span>")
return 0
if(message_mode == "general")
message_mode = null
return radio.talk_into(src,message,message_mode,verb,speaking)
/mob/living/silicon/speech_bubble_appearance()
return "synthetic"
/mob/living/silicon/ai/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode == "department")
return holopad_talk(message, verb, speaking)
else if(message_mode)
if (aiRadio.disabledAi || aiRestorePowerRoutine || stat)
to_chat(src, "<span class='danger'>System Error - Transceiver Disabled.</span>")
return 0
if(message_mode == "general")
message_mode = null
return aiRadio.talk_into(src,message,message_mode,verb,speaking)
/mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode)
if(message_mode == "general")
message_mode = null
return radio.talk_into(src,message,message_mode,verb,speaking)
/mob/living/silicon/say_quote(var/text)
var/ending = copytext(text, length(text))
if (ending == "?")
return speak_query
else if (ending == "!")
return speak_exclamation
return speak_statement
#define IS_AI 1
#define IS_ROBOT 2
#define IS_PAI 3
/mob/living/silicon/say_understands(var/other, var/datum/language/speaking = null)
//These only pertain to common. Languages are handled by mob/say_understands()
if(!speaking)
if(iscarbon(other))
return TRUE
if(issilicon(other))
return TRUE
if(isbrain(other))
return TRUE
return ..()
//For holopads only. Usable by AI.
/mob/living/silicon/ai/proc/holopad_talk(list/message_pieces, verb)
log_say("(HPAD) [multilingual_to_message(message_pieces)]",src)
var/obj/machinery/hologram/holopad/T = src.holo
if(T && T.masters[src])//If there is a hologram and its master is the user.
var/list/listeners = get_mobs_and_objs_in_view_fast(get_turf(T), world.view)
var/list/listening = listeners["mobs"]
var/list/listening_obj = listeners["objs"]
for(var/mob/M in listening)
M.hear_holopad_talk(message_pieces, verb, src)
for(var/obj/O in listening_obj)
if(O == T) //Don't recieve your own speech
continue
O.hear_talk(src, message_pieces, verb)
/*Radios "filter out" this conversation channel so we don't need to account for them.
This is another way of saying that we won't bother dealing with them.*/
to_chat(src, "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> [combine_message(message_pieces, verb, src)]</span></i>")
else
to_chat(src, "No holopad connected.")
return 0
return 1
/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad.
message = trim(message)
if(!message)
return
var/obj/machinery/hologram/holopad/T = src.holo
if(T && T.masters[src])
var/rendered = "<span class='game say'><span class='name'>[name]</span> <span class='message'>[message]</span></span>"
to_chat(src, "<i><span class='game say'>Holopad action relayed, <span class='name'>[real_name]</span> <span class='message'>[message]</span></span></i>")
var/obj/effect/overlay/aiholo/hologram = T.masters[src] //VOREStation Add for people in the hologram to hear the messages
//var/obj/effect/overlay/hologram = T.masters[src] //VOREStation edit. Done above.
var/list/in_range = get_mobs_and_objs_in_view_fast(get_turf(hologram), world.view, 2) //Emotes are displayed from the hologram, not the pad
var/list/m_viewers = in_range["mobs"]
var/list/o_viewers = in_range["objs"]
for(var/mob/M in m_viewers)
spawn(0)
if(M)
M.show_message(rendered, 2)
for(var/obj/O in o_viewers)
if(O == T)
continue
spawn(0)
if(O)
O.see_emote(src, message)
log_emote("(HPAD) [message]", src)
else //This shouldn't occur, but better safe then sorry.
to_chat(src, "No holopad connected.")
return 0
return 1
/mob/living/silicon/ai/emote(var/act, var/m_type, var/message)
var/obj/machinery/hologram/holopad/T = holo
if(T && T.masters[src]) //Is the AI using a holopad?
. = holopad_emote(message)
else //Emote normally, then.
. = ..()
#undef IS_AI
#undef IS_ROBOT
#undef IS_PAI
/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode)
if(!is_component_functioning("radio"))
to_chat(src, "<span class='warning'>Your radio isn't functional at this time.</span>")
return 0
if(message_mode == "general")
message_mode = null
return radio.talk_into(src,message,message_mode,verb,speaking)
/mob/living/silicon/speech_bubble_appearance()
return "synthetic"
/mob/living/silicon/ai/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode == "department")
return holopad_talk(message, verb, speaking)
else if(message_mode)
if (aiRadio.disabledAi || aiRestorePowerRoutine || stat)
to_chat(src, "<span class='danger'>System Error - Transceiver Disabled.</span>")
return 0
if(message_mode == "general")
message_mode = null
return aiRadio.talk_into(src,message,message_mode,verb,speaking)
/mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode)
if(message_mode == "general")
message_mode = null
return radio.talk_into(src,message,message_mode,verb,speaking)
/mob/living/silicon/say_quote(var/text)
var/ending = copytext(text, length(text))
if (ending == "?")
return speak_query
else if (ending == "!")
return speak_exclamation
return speak_statement
#define IS_AI 1
#define IS_ROBOT 2
#define IS_PAI 3
/mob/living/silicon/say_understands(var/other, var/datum/language/speaking = null)
//These only pertain to common. Languages are handled by mob/say_understands()
if(!speaking)
if(iscarbon(other))
return TRUE
if(issilicon(other))
return TRUE
if(isbrain(other))
return TRUE
return ..()
//For holopads only. Usable by AI.
/mob/living/silicon/ai/proc/holopad_talk(list/message_pieces, verb)
log_say("(HPAD) [multilingual_to_message(message_pieces)]",src)
var/obj/machinery/hologram/holopad/T = src.holo
if(T && T.masters[src])//If there is a hologram and its master is the user.
var/list/listeners = get_mobs_and_objs_in_view_fast(get_turf(T), world.view)
var/list/listening = listeners["mobs"]
var/list/listening_obj = listeners["objs"]
for(var/mob/M in listening)
M.hear_holopad_talk(message_pieces, verb, src)
for(var/obj/O in listening_obj)
if(O == T) //Don't recieve your own speech
continue
O.hear_talk(src, message_pieces, verb)
/*Radios "filter out" this conversation channel so we don't need to account for them.
This is another way of saying that we won't bother dealing with them.*/
var/list/combined = combine_message(message_pieces, verb, src)
to_chat(src, "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> [combined["formatted"]]</span></i>")
else
to_chat(src, "No holopad connected.")
return 0
return 1
/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad.
message = trim(message)
if(!message)
return
var/obj/machinery/hologram/holopad/T = src.holo
if(T && T.masters[src])
var/rendered = "<span class='game say'><span class='name'>[name]</span> <span class='message'>[message]</span></span>"
to_chat(src, "<i><span class='game say'>Holopad action relayed, <span class='name'>[real_name]</span> <span class='message'>[message]</span></span></i>")
var/obj/effect/overlay/aiholo/hologram = T.masters[src] //VOREStation Add for people in the hologram to hear the messages
//var/obj/effect/overlay/hologram = T.masters[src] //VOREStation edit. Done above.
var/list/in_range = get_mobs_and_objs_in_view_fast(get_turf(hologram), world.view, 2) //Emotes are displayed from the hologram, not the pad
var/list/m_viewers = in_range["mobs"]
var/list/o_viewers = in_range["objs"]
for(var/mob/M in m_viewers)
spawn(0)
if(M)
M.show_message(rendered, 2)
for(var/obj/O in o_viewers)
if(O == T)
continue
spawn(0)
if(O)
O.see_emote(src, message)
log_emote("(HPAD) [message]", src)
else //This shouldn't occur, but better safe then sorry.
to_chat(src, "No holopad connected.")
return 0
return 1
/mob/living/silicon/ai/emote(var/act, var/m_type, var/message)
var/obj/machinery/hologram/holopad/T = holo
if(T && T.masters[src]) //Is the AI using a holopad?
. = holopad_emote(message)
else //Emote normally, then.
. = ..()
#undef IS_AI
#undef IS_ROBOT
#undef IS_PAI
+2 -1
View File
@@ -77,7 +77,8 @@
mobs_to_relay = in_range["mobs"]
for(var/mob/mob in mobs_to_relay)
var/message = mob.combine_message(message_pieces, verb, M)
var/list/combined = mob.combine_message(message_pieces, verb, M)
var/message = combined["formatted"]
var/name_used = M.GetVoice()
var/rendered = null
rendered = "<span class='game say'>[bicon(icon_object)] <span class='name'>[name_used]</span> [message]</span>"