From 64f39bb8719fd6558c9dffce42b7e74a58807227 Mon Sep 17 00:00:00 2001 From: Krausus Date: Mon, 11 May 2015 06:38:14 -0400 Subject: [PATCH] Fixes AIs and ghosts not being able to follow bots This probably touches more files than it really should, but I can't think of a better way to do it that isn't overhauling the saycode. --- code/game/machinery/bots/bots.dm | 1 + code/game/machinery/telecomms/broadcaster.dm | 13 +++++++------ code/game/objects/items/devices/radio/radio.dm | 3 ++- code/modules/mob/dead/observer/observer.dm | 4 ++-- code/modules/mob/hear_say.dm | 11 ++++++++--- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index f540d21ed8d..cf9f34865ab 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -103,6 +103,7 @@ Radio = new /obj/item/device/radio(src) Radio.listening = 0 //Makes bot radios transmit only so no one hears things while adjacent to one. Radio.config(list("[radio_name]" = 0)) + Radio.follow_target = src /obj/machinery/bot/proc/add_to_beacons(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots. diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index fa649d818bf..aced6424633 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -221,7 +221,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /proc/Broadcast_Message(var/datum/radio_frequency/connection, var/mob/M, var/vmask, var/vmessage, var/obj/item/device/radio/radio, var/message, var/name, var/job, var/realname, var/vname, - var/data, var/compression, var/list/level, var/freq, var/verbage = "says", var/datum/language/speaking = null) + var/data, var/compression, var/list/level, var/freq, var/verbage = "says", var/datum/language/speaking = null, + var/atom/follow_target = null) /* ###### Prepare the radio connection ###### */ @@ -389,33 +390,33 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if (length(heard_masked)) for (var/mob/R in heard_masked) - R.hear_radio(message,verbage, speaking, part_a, part_b, M, 0, name) + R.hear_radio(message,verbage, speaking, part_a, part_b, M, 0, name, follow_target=follow_target) /* --- Process all the mobs that heard the voice normally (understood) --- */ if (length(heard_normal)) for (var/mob/R in heard_normal) - R.hear_radio(message, verbage, speaking, part_a, part_b, M, 0, realname) + R.hear_radio(message, verbage, speaking, part_a, part_b, M, 0, realname, follow_target=follow_target) /* --- Process all the mobs that heard the voice normally (did not understand) --- */ if (length(heard_voice)) for (var/mob/R in heard_voice) - R.hear_radio(message,verbage, speaking, part_a, part_b, M,0, vname) + R.hear_radio(message,verbage, speaking, part_a, part_b, M,0, vname, follow_target=follow_target) /* --- Process all the mobs that heard a garbled voice (did not understand) --- */ // Displays garbled message (ie "f*c* **u, **i*er!") if (length(heard_garbled)) for (var/mob/R in heard_garbled) - R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1, vname) + R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1, vname, follow_target=follow_target) /* --- Complete gibberish. Usually happens when there's a compressed message --- */ if (length(heard_gibberish)) for (var/mob/R in heard_gibberish) - R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1) + R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1, follow_target=follow_target) return 1 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index f3b59b2e66b..ec45cb5e814 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -30,6 +30,7 @@ g_amt = 25 var/const/FREQ_LISTENING = 1 var/prison_radio = 0 + var/atom/follow_target // Custom follow target for autosay-using bots /obj/item/device/radio @@ -189,7 +190,7 @@ Broadcast_Message(connection, A, 0, "*garbled automated announcement*", src, message, from, "Automated Announcement", from, "synthesized voice", - 4, 0, zlevel, connection.frequency) + 4, 0, zlevel, connection.frequency, follow_target=follow_target) del(A) return diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 22af8b0bedc..914e3307801 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -503,12 +503,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp ..() if (href_list["track"]) - var/mob/target = locate(href_list["track"]) in mob_list + var/atom/target = locate(href_list["track"]) if(target) ManualFollow(target) if (href_list["follow"]) - var/mob/target = locate(href_list["follow"]) in mob_list + var/atom/target = locate(href_list["follow"]) var/mob/A = usr; A << "You are now following [target]" //var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index f63566a0483..1a5272b63fd 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -75,7 +75,7 @@ src.playsound_local(source, speech_sound, sound_vol, 1) -/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") +/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="", var/atom/follow_target) if(!client) return @@ -85,6 +85,8 @@ return var/track = null + if(!follow_target) + follow_target = speaker //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if (language && (language.flags & NONVERBAL)) @@ -160,12 +162,15 @@ else track = "[speaker_name] ([jobname])" else - track = "[speaker_name] ([jobname])" + if(istype(follow_target, /obj/machinery/bot) && isAI(src)) + track = "[speaker_name] ([jobname])" + else + track = "[speaker_name] ([jobname])" if(istype(src, /mob/dead/observer)) if(speaker_name != speaker.real_name && !isAI(speaker)) //Announce computer and various stuff that broadcasts doesn't use it's real name but AI's can't pretend to be other mobs. speaker_name = "[speaker.real_name] ([speaker_name])" - track = "[speaker_name] (follow)" + track = "[speaker_name] (follow)" var/formatted if(language)