From 4a937db29cd8d3cfc24f163aeb621409c12b203f Mon Sep 17 00:00:00 2001 From: "only.lurking@gmail.com" Date: Tue, 31 May 2011 06:09:39 +0000 Subject: [PATCH] pAIs now ghost and appear in the player panel properly. You can no longer download multiple personalities to one unit. Personality settings can be saved and loaded. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1640 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/procs/helpers.dm | 2 + code/modules/admin/admin.dm | 4 ++ code/modules/mob/living/silicon/pai/pai.dm | 10 +-- .../modules/mob/living/silicon/pai/recruit.dm | 15 ++++- .../mob/living/silicon/pai/software.dm | 63 ++++++++++++------- tgstation.dme | 2 + 6 files changed, 70 insertions(+), 26 deletions(-) diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index b5ab1daa1d5..8c802cd2996 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -755,6 +755,8 @@ var/list/mob_list = list() for(var/mob/living/silicon/ai/M in world) mob_list.Add(M) + for(var/mob/living/silicon/pai/M in world) + mob_list.Add(M) for(var/mob/living/silicon/robot/M in world) mob_list.Add(M) for(var/mob/living/carbon/human/M in world) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 5e9daad3541..ed2292d212e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1444,6 +1444,8 @@ var/showadminmessages = 1 dat += "[M.name]" if(istype(M, /mob/living/silicon/ai)) dat += "AI" + if(istype(M, /mob/living/silicon/pai)) + dat += "pAI" if(istype(M, /mob/living/silicon/robot)) dat += "Cyborg" if(istype(M, /mob/living/carbon/human)) @@ -1481,6 +1483,8 @@ var/showadminmessages = 1 dat += "[M.name]" if(istype(M, /mob/living/silicon/ai)) dat += "AI" + if(istype(M, /mob/living/silicon/pai)) + dat += "pAI" if(istype(M, /mob/living/silicon/robot)) dat += "Cyborg" if(istype(M, /mob/living/carbon/human)) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index c22a53ef7b4..8a68ba885da 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -48,8 +48,11 @@ return 0 /mob/living/silicon/pai/emp_act(severity) - /* if (prob(30)) + src.master = null + src.master_dna = null + src << "You feel unbound." + /* switch(pick(1,2,3)) //Add Random laws. if(1) src.cancel_camera() @@ -57,7 +60,7 @@ src.lockdown() if(3) src.ai_call_shuttle() - */ + */ ..() /mob/living/silicon/pai/ex_act(severity) @@ -190,9 +193,8 @@ card.pai = null var/turf/T = get_turf_or_move(card.loc) for (var/mob/M in viewers(T)) - M.show_message("\blue [src] flashes a message across its screen, \"Wiping core files. Please a new personality to continue using pAI device functions.\"", 3, "\blue [src] bleeps electronically.", 2) + M.show_message("\blue [src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"", 3, "\blue [src] bleeps electronically.", 2) src.death(0) - del(src) //Addition by Mord_Sith to define AI's network change ability /* diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index e2b6415cb2c..10d6f97006b 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -23,9 +23,12 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(href_list["download"]) var/datum/paiCandidate/candidate = locate(href_list["candidate"]) //pai_candidates.Find(href_list["candidate"]) var/obj/item/device/paicard/card = locate(href_list["device"]) + if(card.pai) + return if(card && candidate) var/mob/living/silicon/pai/pai = new(card) pai.name = candidate.name + pai.real_name = pai.name pai.key = candidate.key card.pai = pai card.looking_for_personality = 0 @@ -43,6 +46,14 @@ var/datum/paiController/paiController // Global handler for pAI candidates candidate.role = input("Enter a role for your pAI", "pAI Role", candidate.role) as text if("ooc") candidate.comments = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message + + if("save") + world << "saving personality" + candidate.savefile_save(usr) + if("load") + world << "loading personality" + candidate.savefile_load(usr) + if("submit") if(candidate) candidate.ready = 1 @@ -98,7 +109,9 @@ var/datum/paiController/paiController // Global handler for pAI candidates dat += "" dat += "
" - dat += "

Submit Personality

" + dat += "

Submit Personality


" + dat += "Save Personality
" + dat += "Load Personality
" M << browse(dat, "window=paiRecruit") diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index b5e2be13123..789e6f831ec 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -104,7 +104,7 @@ "} - usr << browse(dat, "window=pai;size=640x480;border=0;can_close=1;can_resize=0;can_minimize=0;titlebar=1") + usr << browse(dat, "window=pai;size=640x480;border=0;can_close=1;can_resize=1;can_minimize=1;titlebar=1") onclose(usr, "pai") temp = null return @@ -152,34 +152,53 @@ spawn CheckDNA(M, src) if("pdamessage") - if(href_list["send"]) + if(href_list["target"]) var/t = input(usr, "Please enter message", name, null) as text t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) if (!t) return - var/obj/item/device/pda/P = locate(href_list["target"]) + var/target = locate(href_list["target"]) - if (isnull(P)||P.toff) - return + // PDA Message + if(istype(target, /obj/item/device/pda)) + var/obj/item/device/pda/P = target + if (isnull(P)||P.toff) + return + + for (var/obj/machinery/message_server/MS in world) + MS.send_pda_message("[P.owner]","[src]","[t]") + + tnote += "→ To [P.owner]:
[t]
" + P.tnote += "← From [src]:
[t]
" + + if (prob(15)) //Give the AI a chance of intercepting the message + for (var/mob/living/silicon/ai/ai in world) + ai.show_message("Intercepted message from [P:owner]: [t]") + + if (!P.silent) + playsound(P.loc, 'twobeep.ogg', 50, 1) + for (var/mob/O in hearers(3, P.loc)) + O.show_message(text("\icon[P] *[P.ttone]*")) + + P.overlays = null + P.overlays += image('pda.dmi', "pda-r") + + // pAI Message + else + var/mob/living/silicon/pai/P = target + + tnote += "→ To [P]:
[t]
" + P.tnote += "← From [src]:
[t]
" - for (var/obj/machinery/message_server/MS in world) - MS.send_pda_message("[P.owner]","[src]","[t]") + for (var/obj/machinery/message_server/MS in world) + MS.send_pda_message("[P]","[src]","[t]") - tnote += "→ To [P.owner]:
[t]
" - P.tnote += "← From [src]:
[t]
" + if (prob(15)) //Give the AI a chance of intercepting the message + for (var/mob/living/silicon/ai/ai in world) + ai.show_message("Intercepted message from [P]: [t]") - if (prob(15)) //Give the AI a chance of intercepting the message - for (var/mob/living/silicon/ai/A in world) - A.show_message("Intercepted message from [P:owner]: [t]") - - if (!P.silent) playsound(P.loc, 'twobeep.ogg', 50, 1) - for (var/mob/O in hearers(3, P.loc)) - O.show_message(text("\icon[P] *[P.ttone]*")) - - P.overlays = null - P.overlays += image('pda.dmi', "pda-r") // Accessing medical records if("medicalrecord") @@ -565,11 +584,13 @@ dat += "" + dat += "

" + dat += "Messages:
[tnote]" return dat \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 904dddefecb..89a696d3a94 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -732,10 +732,12 @@ #include "code\modules\mob\living\silicon\hivebot\login.dm" #include "code\modules\mob\living\silicon\hivebot\mainframe.dm" #include "code\modules\mob\living\silicon\hivebot\say.dm" +#include "code\modules\mob\living\silicon\pai\death.dm" #include "code\modules\mob\living\silicon\pai\examine.dm" #include "code\modules\mob\living\silicon\pai\hud.dm" #include "code\modules\mob\living\silicon\pai\life.dm" #include "code\modules\mob\living\silicon\pai\pai.dm" +#include "code\modules\mob\living\silicon\pai\personality.dm" #include "code\modules\mob\living\silicon\pai\recruit.dm" #include "code\modules\mob\living\silicon\pai\say.dm" #include "code\modules\mob\living\silicon\pai\software.dm"