From 7f094034e44b20414a53b061ead10a0bc927d500 Mon Sep 17 00:00:00 2001 From: Isilkor Date: Wed, 9 Mar 2016 20:19:08 +0100 Subject: [PATCH] AI: Relay PDA messages to deployed shells --- code/mob/living/silicon/ai.dm | 3 +++ code/obj/item/device/pda2/base_os.dm | 7 ++----- code/obj/item/device/pda2/pda2.dm | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/code/mob/living/silicon/ai.dm b/code/mob/living/silicon/ai.dm index e74a2c0c..9b6f6326 100644 --- a/code/mob/living/silicon/ai.dm +++ b/code/mob/living/silicon/ai.dm @@ -54,6 +54,7 @@ var/list/ai_emotions = list("Happy" = "ai_happy",\ var/obj/item/organ/brain/brain = null var/moustache_mode = 0 var/status_message = null + var/mob/living/silicon/deployed_shell = null var/faceEmotion = "ai_happy" var/faceColor = "#66B2F2" @@ -1294,12 +1295,14 @@ var/list/ai_emotions = list("Happy" = "ai_happy",\ target_shell.mainframe = src target_shell.dependent = 1 target_shell.name = src.name + src.deployed_shell = target_shell src.mind.transfer_to(target_shell) return /mob/living/silicon/ai/proc/return_to(var/mob/user) if (user.mind) user.mind.transfer_to(src) + src.deployed_shell = null spawn(20) if (ismob(user)) // bluhh who the fuck knows, this at least checks that user isn't null as well if (isshell(user)) diff --git a/code/obj/item/device/pda2/base_os.dm b/code/obj/item/device/pda2/base_os.dm index 453daf6f..848f2821 100644 --- a/code/obj/item/device/pda2/base_os.dm +++ b/code/obj/item/device/pda2/base_os.dm @@ -566,10 +566,7 @@ src.master.explode() src.master.display_alert(alert_beep) - - if(ismob(master.loc)) //Alert the person holding us. - var/mob/M = master.loc - boutput(M, "[bicon(master)] [sender]: [signal.data["message"]]") + src.master.display_message("[bicon(master)] [sender]: [signal.data["message"]]") src.master.updateSelfDialog() @@ -702,7 +699,7 @@ . += " | Eject [src.master.ID_card]" pda_message(var/target_id, var/target_name, var/message, var/is_department_message) - if (!src.master || (!in_range(src.master, usr) && src.master.loc != usr)) + if (!src.master || !src.master.is_user_in_range(usr)) return 1 if (!target_id || !target_name || !message) diff --git a/code/obj/item/device/pda2/pda2.dm b/code/obj/item/device/pda2/pda2.dm index a402e8bf..47993cc9 100644 --- a/code/obj/item/device/pda2/pda2.dm +++ b/code/obj/item/device/pda2/pda2.dm @@ -557,6 +557,8 @@ src.host_program.pda_message(pdasay_autocomplete[target], target, message) /obj/item/device/pda2 + proc/is_user_in_range(var/mob/user) + return in_range(src, user) || loc == user proc/post_signal(datum/signal/signal,var/newfreq) spawn(0) @@ -649,6 +651,10 @@ src.overlays += image('icons/obj/pda.dmi', "pda-r") return + proc/display_message(var/message) + if (ismob(loc)) + boutput(loc, message) + proc/run_program(datum/computer/file/pda_program/program) if((!program) || (!program.holder)) return 0 @@ -743,6 +749,21 @@ qdel(src) return +/obj/item/device/pda2/ai/display_message(var/message) + . = ..(message) + // The AI might be deployed to shell, in which case we'll relay the message + if (!isAI(loc)) + return + var/mob/living/silicon/ai/ai = loc + if (ismob(ai.deployed_shell)) + boutput(ai.deployed_shell, message) + +/obj/item/device/pda2/ai/is_user_in_range(var/mob/user) + if (issilicon(user)) + var/mob/living/silicon/S = user + if (S.mainframe && S.mainframe == loc) + return 1 + return ..(user) /* * PDA 2 ~help file~