diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm
index e2e25b07a80..09081948d13 100644
--- a/code/__HELPERS/lists.dm
+++ b/code/__HELPERS/lists.dm
@@ -343,4 +343,9 @@ proc/listclearnulls(list/list)
for(var/T in L)
if(istype(T, type))
i++
- return i
\ No newline at end of file
+ return i
+
+/proc/find_record(field, value, list/L)
+ for(var/datum/data/record/R in L)
+ if(R.fields[field] == value)
+ return R
\ No newline at end of file
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 31bbd631c65..9d4cfcb870b 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -252,10 +252,8 @@ Turf and target are seperate in case you want to teleport some distance from a t
if(oldname)
//update the datacore records! This is goig to be a bit costly.
for(var/list/L in list(data_core.general,data_core.medical,data_core.security,data_core.locked))
- for(var/datum/data/record/R in L)
- if(R.fields["name"] == oldname)
- R.fields["name"] = newname
- break
+ var/datum/data/record/R = find_record("name", oldname, L)
+ if(R) R.fields["name"] = newname
//update our pda and id if we have them on our person
var/list/searching = GetAllContents(searchDepth = 3)
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 32cd3ab752a..9fc8ff1b449 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -8,18 +8,11 @@
return
/obj/effect/datacore/proc/manifest_modify(var/name, var/assignment)
- var/datum/data/record/foundrecord
-
- for(var/datum/data/record/t in data_core.general)
- if(t.fields["name"] == name)
- foundrecord = t
- break
-
+ var/datum/data/record/foundrecord = find_record("name", name, data_core.general)
if(foundrecord)
foundrecord.fields["rank"] = assignment
-
-
+var/record_id_num = 1001
/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
if(H.mind && (H.mind.assigned_role != "MODE"))
var/assignment
@@ -30,8 +23,9 @@
else
assignment = "Unassigned"
- var/id = num2hex(rand(1, 1.6777215E7),6) //this was the best they could come up with? A large random number? *sigh*
+ var/id = num2hex(record_id_num++,6)
+ //These records should ~really~ be merged or something
//General Record
var/datum/data/record/G = new()
G.fields["id"] = id
@@ -75,9 +69,9 @@
//Locked Record
var/datum/data/record/L = new()
- L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
+ L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") //surely this should just be id, like the others?
L.fields["name"] = H.real_name
- L.fields["rank"] = H.mind.assigned_role
+ L.fields["rank"] = H.mind.assigned_role
L.fields["age"] = H.age
L.fields["sex"] = H.gender
L.fields["blood_type"] = H.blood_type
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 816c5eae8a2..4188f137dfb 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -416,18 +416,10 @@ proc/get_all_job_icons() //For all existing HUD icons
/proc/get_all_centcom_jobs()
return list("VIP Guest","Custodian","Thunderdome Overseer","Centcom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","Centcom Commander")
-/obj/proc/GetJobName() //Used in secHUD icon generation
- if (!istype(src, /obj/item/device/pda) && !istype(src,/obj/item/weapon/card/id))
- return
-
- var/jobName
-
- if(istype(src, /obj/item/device/pda))
- if(src:id)
- jobName = src:id:assignment
- if(istype(src, /obj/item/weapon/card/id))
- jobName = src:assignment
-
+/obj/item/proc/GetJobName() //Used in secHUD icon generation
+ var/obj/item/weapon/card/id/I = GetID()
+ if(!I) return
+ var/jobName = I.assignment
if(jobName in get_all_job_icons()) //Check if the job has a hud icon
return jobName
if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a Centcom job
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index 6ef2df78f21..3ba51076e7f 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -715,19 +715,11 @@ Auto Patrol: []"},
if(istype(perp:belt, /obj/item/weapon/gun/energy/laser/bluetag))
threatcount += 2
- if(src.check_records)
- for (var/datum/data/record/E in data_core.general)
- var/perpname = perp.name
- if(perp.wear_id)
- var/obj/item/weapon/card/id/id = perp.wear_id.GetID()
- if(id)
- perpname = id.registered_name
-
- if(E.fields["name"] == perpname)
- for (var/datum/data/record/R in data_core.security)
- if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
- threatcount = 4
- break
+ if(check_records) //check if they are set to *Arrest* on records
+ var/perpname = perp.get_face_name(perp.get_id_name())
+ var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ if(!R || (R.fields["criminal"] == "*Arrest*"))
+ threatcount += 4
if((src.idcheck) && (src.allowed(perp)) && !(src.lasercolor))
threatcount = 0//Corrupt cops cannot exist beep boop
diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm
index 15b484f1b7b..972549eb159 100644
--- a/code/game/machinery/bots/secbot.dm
+++ b/code/game/machinery/bots/secbot.dm
@@ -628,19 +628,11 @@ Auto Patrol: []"},
if(perp.wear_id && istype(perp:wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
threatcount -= 2
- if(src.check_records)
- for (var/datum/data/record/E in data_core.general)
- var/perpname = perp.name
- if(perp.wear_id)
- var/obj/item/weapon/card/id/id = perp.wear_id.GetID()
- if(id)
- perpname = id.registered_name
-
- if(E.fields["name"] == perpname)
- for (var/datum/data/record/R in data_core.security)
- if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
- threatcount = 4
- break
+ if(check_records) //check if they are set to *Arrest* on records
+ var/perpname = perp.get_face_name(perp.get_id_name())
+ var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ if(!R || (R.fields["criminal"] == "*Arrest*"))
+ threatcount += 4
return threatcount
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index a009273ba4b..a8aeeb7668f 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -104,16 +104,11 @@
user.set_machine(src)
var/dat
- if (!( ticker ))
- return
+ if(!ticker) return
if (mode == 1) // accessing crew manifest
var/crew = ""
- var/list/L = list()
- for (var/datum/data/record/t in data_core.general)
- var/R = t.fields["name"] + " - " + t.fields["rank"]
- L += R
- for(var/R in sortList(L))
- crew += "[R]
"
+ for(var/datum/data/record/t in sortRecord(data_core.general))
+ crew += t.fields["name"] + " - " + t.fields["rank"] + "
"
dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print
Access ID modification console.
"
else if(mode == 2)
@@ -407,12 +402,8 @@
sleep(50)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
var/t1 = "Crew Manifest:
"
- var/list/L = list()
- for (var/datum/data/record/t in data_core.general)
- var/R = t.fields["name"] + " - " + t.fields["rank"]
- L += R
- for(var/R in sortList(L))
- t1 += "[R]
"
+ for(var/datum/data/record/t in sortRecord(data_core.general))
+ t1 += t.fields["name"] + " - " + t.fields["rank"] + "
"
P.info = t1
P.name = "paper- 'Crew Manifest'"
printing = null
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 94f48f4d9b0..63e0ccdc73e 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -140,8 +140,8 @@
if(2)
dat += "
Current records
"
dat += "<< Back
"
- for(var/datum/data/record/R in src.records)
- dat += "[R.fields["name"]]
Scan ID [R.fields["id"]] View Record"
+ for(var/datum/data/record/R in records)
+ dat += "[R.fields["name"]]
Scan ID [R.fields["id"]] View Record"
if(3)
dat += "Selected Record
"
dat += "<< Back
"
@@ -150,7 +150,7 @@
dat += "Record not found."
else
dat += "[src.active_record.fields["name"]]
"
- dat += "Scan ID [src.active_record.fields["id"]] Clone
"
+ dat += "Scan ID [src.active_record.fields["id"]] Clone
"
var/obj/item/weapon/implant/health/H = locate(src.active_record.fields["imp"])
@@ -226,16 +226,16 @@
else
src.scanner.locked = 0
- else if (href_list["view_rec"])
- src.active_record = locate(href_list["view_rec"])
- if(istype(src.active_record,/datum/data/record))
- if (!active_record.fields["ckey"])
- del(src.active_record)
+ else if(href_list["view_rec"])
+ src.active_record = find_record("id", href_list["view_rec"], records)
+ if(active_record)
+ if(!active_record.fields["ckey"])
+ records -= active_record
+ active_record = null
src.temp = "Record Corrupt"
else
src.menu = 3
else
- src.active_record = null
src.temp = "Record missing."
else if (href_list["del_rec"])
@@ -250,8 +250,8 @@
if (istype(C)||istype(C, /obj/item/device/pda))
if(src.check_access(C))
src.temp = "[src.active_record.fields["name"]] => Record deleted."
- src.records.Remove(src.active_record)
- del(src.active_record)
+ src.records.Remove(active_record)
+ active_record = null
src.menu = 2
else
src.temp = "Access Denied."
@@ -290,9 +290,9 @@
src.updateUsrDialog()
else if (href_list["clone"])
- var/datum/data/record/C = locate(href_list["clone"])
+ var/datum/data/record/C = find_record("id", href_list["clone"], records)
//Look for that player! They better be dead!
- if(istype(C))
+ if(C)
//Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
if(!pod1)
temp = "No Clonepod detected."
@@ -305,7 +305,8 @@
else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"]))
temp = "[C.fields["name"]] => Cloning cycle in progress..."
records.Remove(C)
- del(C)
+ if(active_record == C)
+ active_record = null
menu = 1
else
temp = "[C.fields["name"]] => Initialisation failure."
@@ -336,11 +337,11 @@
if (NOCLONE in subject.mutations)
scantemp = "Mental interface failure."
return
- if (!isnull(find_record(subject.ckey)))
+ if (find_record("ckey", subject.ckey, records))
scantemp = "Subject already in database."
return
- var/datum/data/record/R = new /datum/data/record()
+ var/datum/data/record/R = new()
if(subject.dna)
R.fields["mrace"] = subject.dna.mutantrace
else
@@ -355,7 +356,7 @@
//Add an implant if needed
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
- if (isnull(imp))
+ if(!imp)
imp = new /obj/item/weapon/implant/health(subject)
imp.implanted = subject
R.fields["imp"] = "\ref[imp]"
@@ -369,15 +370,6 @@
src.records += R
scantemp = "Subject successfully scanned."
-//Find a specific record by key.
-/obj/machinery/computer/cloning/proc/find_record(var/find_key)
- var/selected_record = null
- for(var/datum/data/record/R in src.records)
- if (R.fields["ckey"] == find_key)
- selected_record = R
- break
- return selected_record
-
/obj/machinery/computer/cloning/update_icon()
if(stat & BROKEN)
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 98ccb3990fa..1053e006a5e 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -10,8 +10,8 @@
var/authenticated = null
var/rank = null
var/screen = null
- var/datum/data/record/active1 = null
- var/datum/data/record/active2 = null
+ var/datum/data/record/active1
+ var/datum/data/record/active2
var/a_id = null
var/temp = null
var/printing = null
@@ -45,20 +45,20 @@
"}
if(2.0)
dat += "Record List:
"
- if(!isnull(data_core.general))
+ if(data_core.general)
for(var/datum/data/record/R in sortRecord(data_core.general))
- dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"])
+ dat += "[R.fields["id"]]: [R.fields["name"]]
"
//Foreach goto(132)
dat += text("
Back", src)
if(3.0)
dat += text("Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack", src, src, src, src)
if(4.0)
dat += "Medical Record
"
- if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
+ if(active1 in data_core.general)
dat += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.active1.fields["id"], src, src.active1.fields["sex"], src, src.active1.fields["age"], src, src.active1.fields["fingerprint"], src, src.active1.fields["p_stat"], src, src.active1.fields["m_stat"])
else
dat += "General Record Lost!
"
- if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
+ if(active2 in data_core.medical)
dat += text("
\nMedical Data
\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src, src.active2.fields["blood_type"], src, src.active2.fields["b_dna"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, src.active2.fields["notes"])
var/counter = 1
while(src.active2.fields[text("com_[]", counter)])
@@ -114,10 +114,11 @@
/obj/machinery/computer/med_data/Topic(href, href_list)
if(..())
return
- if (!( data_core.general.Find(src.active1) ))
+ if(!(active1 in data_core.general))
src.active1 = null
- if (!( data_core.medical.Find(src.active2) ))
+ if(!(active2 in data_core.medical))
src.active2 = null
+
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
if (href_list["temp"])
@@ -161,7 +162,7 @@
src.active1 = null
src.active2 = null
- if(href_list["vir"])
+ else if(href_list["vir"])
var/type = href_list["vir"]
var/datum/disease/Dis = new type(0)
var/AfS = ""
@@ -177,111 +178,108 @@
Severity: [Dis.severity]"}
- if (href_list["del_all"])
+ else if (href_list["del_all"])
src.temp = text("Are you sure you wish to delete all records?
\n\tYes
\n\tNo
", src, src)
- if (href_list["del_all2"])
- for(var/datum/data/record/R in data_core.medical)
- //R = null
- del(R)
- //Foreach goto(494)
+ else if (href_list["del_all2"])
+ data_core.medical.Cut()
src.temp = "All records deleted."
- if (href_list["field"])
+ else if (href_list["field"])
var/a1 = src.active1
var/a2 = src.active2
switch(href_list["field"])
if("fingerprint")
- if (istype(src.active1, /datum/data/record))
+ if(active1)
var/t1 = copytext(sanitize(input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null) as text),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
return
src.active1.fields["fingerprint"] = t1
if("sex")
- if (istype(src.active1, /datum/data/record))
+ if(active1)
if (src.active1.fields["sex"] == "Male")
src.active1.fields["sex"] = "Female"
else
src.active1.fields["sex"] = "Male"
if("age")
- if (istype(src.active1, /datum/data/record))
+ if(active1)
var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
return
src.active1.fields["age"] = t1
if("mi_dis")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["mi_dis"] = t1
if("mi_dis_d")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["mi_dis_d"] = t1
if("ma_dis")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["ma_dis"] = t1
if("ma_dis_d")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["ma_dis_d"] = t1
if("alg")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["alg"] = t1
if("alg_d")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["alg_d"] = t1
if("cdi")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["cdi"] = t1
if("cdi_d")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["cdi_d"] = t1
if("notes")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
var/t1 = copytext(sanitize(input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null) as message),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["notes"] = t1
if("p_stat")
- if (istype(src.active1, /datum/data/record))
+ if(active1)
src.temp = text("Physical Condition:
\n\t*Deceased*
\n\t*Unconscious*
\n\tActive
\n\tPhysically Unfit
", src, src, src, src)
if("m_stat")
- if (istype(src.active1, /datum/data/record))
+ if(active1)
src.temp = text("Mental Condition:
\n\t*Insane*
\n\t*Unstable*
\n\t*Watch*
\n\tStable
", src, src, src, src)
if("blood_type")
- if (istype(src.active2, /datum/data/record))
+ if(active2)
src.temp = text("Blood Type:
\n\tA- A+
\n\tB- B+
\n\tAB- AB+
\n\tO- O+
", src, src, src, src, src, src, src, src)
if("b_dna")
- if (istype(src.active1, /datum/data/record))
+ if(active1)
var/t1 = copytext(sanitize(input("Please input DNA hash:", "Med. records", src.active1.fields["dna"], null) as text),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
return
src.active1.fields["dna"] = t1
else
- if (href_list["p_stat"])
- if (src.active1)
+ else if (href_list["p_stat"])
+ if(active1)
switch(href_list["p_stat"])
if("deceased")
src.active1.fields["p_stat"] = "*Deceased*"
@@ -292,8 +290,8 @@
if("unfit")
src.active1.fields["p_stat"] = "Physically Unfit"
- if (href_list["m_stat"])
- if (src.active1)
+ else if (href_list["m_stat"])
+ if(active1)
switch(href_list["m_stat"])
if("insane")
src.active1.fields["m_stat"] = "*Insane*"
@@ -305,8 +303,8 @@
src.active1.fields["m_stat"] = "Stable"
- if (href_list["blood_type"])
- if (src.active2)
+ else if (href_list["blood_type"])
+ if(active2)
switch(href_list["blood_type"])
if("an")
src.active2.fields["blood_type"] = "A-"
@@ -326,31 +324,24 @@
src.active2.fields["blood_type"] = "O+"
- if (href_list["del_r"])
- if (src.active2)
+ else if (href_list["del_r"])
+ if(active2)
src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
\n\tYes
\n\tNo
", src, src)
- if (href_list["del_r2"])
- if (src.active2)
- //src.active2 = null
- del(src.active2)
+ else if (href_list["del_r2"])
+ if(active2)
+ data_core.medical -= active2
+ active2 = null
- if (href_list["d_rec"])
- var/datum/data/record/R = locate(href_list["d_rec"])
- var/datum/data/record/M = locate(href_list["d_rec"])
- if (!( data_core.general.Find(R) ))
- src.temp = "Record Not Found!"
- return
- for(var/datum/data/record/E in data_core.medical)
- if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- M = E
- else
- //Foreach continue //goto(2540)
- src.active1 = R
- src.active2 = M
- src.screen = 4
+ else if (href_list["d_rec"])
+ active1 = find_record("id", href_list["d_rec"], data_core.general)
+ if(active1)
+ active2 = find_record("id", href_list["d_rec"], data_core.medical)
+ if(!active2)
+ active1 = null
+ screen = 4
- if (href_list["new"])
+ else if (href_list["new"])
if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) )))
var/datum/data/record/R = new /datum/data/record( )
R.fields["name"] = src.active1.fields["name"]
@@ -371,8 +362,8 @@
src.active2 = R
src.screen = 4
- if (href_list["add_c"])
- if (!( istype(src.active2, /datum/data/record) ))
+ else if (href_list["add_c"])
+ if(!(active2 in data_core.medical))
return
var/a2 = src.active2
var/t1 = copytext(sanitize(input("Add Comment:", "Med. records", null, null) as message),1,MAX_MESSAGE_LEN)
@@ -383,11 +374,11 @@
counter++
src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [], 2053
[]", src.authenticated, src.rank, time2text(world.realtime, "DDD MMM DD hh:mm:ss"), t1)
- if (href_list["del_c"])
+ else if (href_list["del_c"])
if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted"
- if (href_list["search"])
+ else if (href_list["search"])
var/t1 = input("Search String: (Name, DNA, or ID)", "Med. records", null, null) as text
if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!in_range(src, usr)) && (!istype(usr, /mob/living/silicon)))))
return
@@ -409,17 +400,17 @@
//Foreach continue //goto(3334)
src.screen = 4
- if (href_list["print_p"])
+ else if (href_list["print_p"])
if (!( src.printing ))
src.printing = 1
sleep(50)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
P.info = "Medical Record
"
- if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
+ if(active1 in data_core.general)
P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"], src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"])
else
P.info += "General Record Lost!
"
- if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
+ if(active2 in data_core.medical)
P.info += text("
\nMedical Data
\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src.active2.fields["blood_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"])
var/counter = 1
while(src.active2.fields[text("com_[]", counter)])
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 0c2a6ed6b07..0baa0912377 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -552,18 +552,10 @@
threatcount += 2
if(check_records) //if the turret can check the records, check if they are set to *Arrest* on records
- for(var/datum/data/record/E in data_core.general)
- var/perpname = perp.name
- if(perp.wear_id)
- var/obj/item/weapon/card/id/id = perp.wear_id.GetID()
- if(id)
- perpname = id.registered_name
-
- if(E.fields["name"] == perpname)
- for(var/datum/data/record/R in data_core.security)
- if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
- threatcount = 4
- break
+ var/perpname = perp.get_face_name(perp.get_id_name())
+ var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ if(!R || (R.fields["criminal"] == "*Arrest*"))
+ threatcount += 4
return threatcount
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index bcb0becb287..6b947bedfed 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -273,7 +273,7 @@ Code:
menu = "
Crew Manifest
"
menu += "Entries cannot be modified from this terminal.
"
- if(!isnull(data_core.general))
+ if(data_core.general)
for (var/datum/data/record/t in sortRecord(data_core.general))
menu += "[t.fields["name"]] - [t.fields["rank"]]
"
menu += "
"
@@ -347,14 +347,14 @@ Code:
if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working.
menu = "
Medical Record List
"
- if(!isnull(data_core.general))
- for (var/datum/data/record/R in sortRecord(data_core.general))
- menu += "[R.fields["id"]]: [R.fields["name"]]
"
+ if(data_core.general)
+ for(var/datum/data/record/R in sortRecord(data_core.general))
+ menu += "[R.fields["id"]]: [R.fields["name"]]
"
menu += "
"
if(441)
menu = "
Medical Record
"
- if (istype(active1, /datum/data/record) && (active1 in data_core.general))
+ if(active1 in data_core.general)
menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
"
menu += "Sex: [active1.fields["sex"]]
"
menu += "Age: [active1.fields["age"]]
"
@@ -368,7 +368,7 @@ Code:
menu += "
"
menu += "
Medical Data
"
- if (istype(active2, /datum/data/record) && (active2 in data_core.medical))
+ if(active2 in data_core.medical)
menu += "Blood Type: [active2.fields["blood_type"]]
"
menu += "Minor Disabilities: [active2.fields["mi_dis"]]
"
@@ -390,15 +390,15 @@ Code:
menu += "
"
if (45) //security records
menu = "
Security Record List
"
- if(!isnull(data_core.general))
+ if(data_core.general)
for (var/datum/data/record/R in sortRecord(data_core.general))
- menu += "[R.fields["id"]]: [R.fields["name"]]
"
+ menu += "[R.fields["id"]]: [R.fields["name"]]
"
menu += "
"
if(451)
menu = "
Security Record
"
- if (istype(active1, /datum/data/record) && (active1 in data_core.general))
+ if(active1 in data_core.general)
menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
"
menu += "Sex: [active1.fields["sex"]]
"
menu += "Age: [active1.fields["age"]]
"
@@ -412,7 +412,7 @@ Code:
menu += "
"
menu += "
Security Data
"
- if (istype(active3, /datum/data/record) && (active3 in data_core.security))
+ if(active3 in data_core.security)
menu += "Criminal Status: [active3.fields["criminal"]]
"
menu += "Minor Crimes: [active3.fields["mi_crim"]]
"
@@ -624,30 +624,22 @@ Code:
switch(href_list["choice"])
if("Medical Records")
- var/datum/data/record/R = locate(href_list["target"])
- var/datum/data/record/M = locate(href_list["target"])
+ active1 = find_record("id", href_list["target"], data_core.general)
+ if(active1)
+ active2 = find_record("id", href_list["target"], data_core.medical)
loc:mode = 441
mode = 441
- if (R in data_core.general)
- for (var/datum/data/record/E in data_core.medical)
- if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- M = E
- break
- active1 = R
- active2 = M
+ if(!active2)
+ active1 = null
if("Security Records")
- var/datum/data/record/R = locate(href_list["target"])
- var/datum/data/record/S = locate(href_list["target"])
+ active1 = find_record("id", href_list["target"], data_core.general)
+ if(active1)
+ active3 = find_record("id", href_list["target"], data_core.security)
loc:mode = 451
mode = 451
- if (R in data_core.general)
- for (var/datum/data/record/E in data_core.security)
- if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- S = E
- break
- active1 = R
- active3 = S
+ if(!active3)
+ active1 = null
if("Send Signal")
spawn( 0 )
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 1a0ffa821f6..ba3f735f151 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -262,11 +262,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
// --- Human: use their job as seen on the crew manifest - makes it unneeded to carry an ID for an AI to see their job
if (ishuman(M))
var/voice = M.GetVoice() // Why reinvent the wheel when there is a proc that does nice things already
- var/datum/data/record/findjob
- for (var/datum/data/record/t in data_core.general)
- if(t.fields["name"] == voice)
- findjob = t
- break
+ var/datum/data/record/findjob = find_record("name", voice, data_core.general)
if(voice != real_name)
displayname = voice
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index d0e4d15b2ba..fe69df3e180 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2082,7 +2082,7 @@
var/dat = "Showing Crew Manifest.
"
dat += "| Name | Position |
"
for(var/datum/data/record/t in data_core.general)
- dat += text("| [] | [] |
", t.fields["name"], t.fields["rank"])
+ dat += "| [t.fields["name"]] | [t.fields["rank"]] |
"
dat += "
"
usr << browse(dat, "window=manifest;size=440x410")
if("DNA")
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 8d4119c0da4..dcd267b8a63 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -297,10 +297,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
/*Try and locate a record for the person being respawned through data_core.
This isn't an exact science but it does the trick more often than not.*/
var/id = md5("[G_found.real_name][G_found.mind.assigned_role]")
- for(var/datum/data/record/t in data_core.locked)
- if(t.fields["id"]==id)
- record_found = t//We shall now reference the record.
- break
+
+ record_found = find_record("id", id, data_core.locked)
if(record_found)//If they have a record we can determine a few things.
new_character.real_name = record_found.fields["name"]
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index 1561bf2ab0d..ca72119dc57 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -104,55 +104,38 @@
var/client/C = M.client
var/image/holder
for(var/mob/living/carbon/human/perp in view(M))
- if(!C) continue
- var/perpname = "wot"
holder = perp.hud_list[ID_HUD]
+ holder.icon_state = "hudno_id"
if(perp.wear_id)
- var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
- if(I)
- perpname = I.registered_name
- holder.icon_state = "hud[ckey(I.GetJobName())]"
- C.images += holder
- else
- perpname = perp.name
- holder.icon_state = "hudno_id"
- C.images += holder
- else
- perpname = perp.name
- holder.icon_state = "hudno_id"
- C.images += holder
+ holder.icon_state = "hud[ckey(perp.wear_id.GetJobName())]"
+ C.images += holder
+
- for(var/datum/data/record/E in data_core.general)
- if(E.fields["name"] == perpname)
- holder = perp.hud_list[WANTED_HUD]
- for (var/datum/data/record/R in data_core.security)
- if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
- holder.icon_state = "hudwanted"
- C.images += holder
- break
- else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
- holder.icon_state = "hudincarcerated"
- C.images += holder
- break
- else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
- holder.icon_state = "hudparolled"
- C.images += holder
- break
- else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
- holder.icon_state = "hudreleased"
- C.images += holder
- break
for(var/obj/item/weapon/implant/I in perp)
if(I.implanted)
if(istype(I,/obj/item/weapon/implant/tracking))
holder = perp.hud_list[IMPTRACK_HUD]
holder.icon_state = "hud_imp_tracking"
- C.images += holder
- if(istype(I,/obj/item/weapon/implant/loyalty))
+ else if(istype(I,/obj/item/weapon/implant/loyalty))
holder = perp.hud_list[IMPLOYAL_HUD]
holder.icon_state = "hud_imp_loyal"
- C.images += holder
- if(istype(I,/obj/item/weapon/implant/chem))
+ else if(istype(I,/obj/item/weapon/implant/chem))
holder = perp.hud_list[IMPCHEM_HUD]
holder.icon_state = "hud_imp_chem"
- C.images += holder
\ No newline at end of file
+ else
+ continue
+ C.images += holder
+
+ var/perpname = perp.get_face_name(perp.get_id_name(""))
+ if(perpname)
+ var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ if(R)
+ holder = perp.hud_list[WANTED_HUD]
+ switch(R.fields["criminal"])
+ if("*Arrest*") holder.icon_state = "hudwanted"
+ if("Incarcerated") holder.icon_state = "hudincarcerated"
+ if("Parolled") holder.icon_state = "hudparolled"
+ if("Released") holder.icon_state = "hudreleased"
+ else
+ return
+ C.images += holder
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index e292afcceed..608cef17e34 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -276,25 +276,13 @@
if(usr.stat || H != usr) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten
- var/perpname = "wot"
var/criminal = "None"
- if(wear_id)
- var/obj/item/weapon/card/id/I = wear_id.GetID()
- if(I)
- perpname = I.registered_name
- else
- perpname = name
- else
- perpname = name
-
+ var/perpname = H.get_face_name(H.get_id_name(""))
if(perpname)
- for (var/datum/data/record/E in data_core.general)
- if(E.fields["name"] == perpname)
- for (var/datum/data/record/R in data_core.security)
- if(R.fields["id"] == E.fields["id"])
- criminal = R.fields["criminal"]
-
+ var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ if(R)
+ criminal = R.fields["criminal"]
msg += "Criminal status: \[[criminal]\]\n"
//msg += "\[Set Hostile Identification\]\n"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index fa14e72d7b6..3262f5e2df2 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -396,74 +396,65 @@
//gets assignment from ID or ID inside PDA or PDA itself
//Useful when player do something with computers
/mob/living/carbon/human/proc/get_assignment(var/if_no_id = "No id", var/if_no_job = "No job")
- var/obj/item/device/pda/pda = wear_id
- var/obj/item/weapon/card/id/id = wear_id
- if (istype(pda))
- if (pda.id && istype(pda.id, /obj/item/weapon/card/id))
- . = pda.id.assignment
- else
- . = pda.ownjob
- else if (istype(id))
+ var/obj/item/weapon/card/id/id = get_idcard()
+ if(id)
. = id.assignment
else
- return if_no_id
- if (!.)
- . = if_no_job
- return
+ var/obj/item/device/pda/pda = wear_id
+ if(istype(pda))
+ . = pda.ownjob
+ else
+ return if_no_id
+ if(!.)
+ return if_no_job
//gets name from ID or ID inside PDA or PDA itself
//Useful when player do something with computers
/mob/living/carbon/human/proc/get_authentification_name(var/if_no_id = "Unknown")
+ var/obj/item/weapon/card/id/id = get_idcard()
+ if(id)
+ return id.registered_name
var/obj/item/device/pda/pda = wear_id
- var/obj/item/weapon/card/id/id = wear_id
- if (istype(pda))
- if (pda.id)
- . = pda.id.registered_name
- else
- . = pda.owner
- else if (istype(id))
- . = id.registered_name
- else
- return if_no_id
- return
+ if(istype(pda))
+ return pda.owner
+ return if_no_id
//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
/mob/living/carbon/human/proc/get_visible_name()
- if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible
- return get_id_name("Unknown")
- if( head && (head.flags_inv&HIDEFACE) )
- return get_id_name("Unknown") //Likewise for hats
var/face_name = get_face_name()
var/id_name = get_id_name("")
+
if(id_name && (id_name != face_name))
return "[face_name] (as [id_name])"
return face_name
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
-/mob/living/carbon/human/proc/get_face_name()
+/mob/living/carbon/human/proc/get_face_name(if_no_face="Unknown")
+ if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible
+ return if_no_face
+ if( head && (head.flags_inv&HIDEFACE) )
+ return if_no_face //Likewise for hats
var/datum/limb/O = get_organ("head")
if( (status_flags&DISFIGURED) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name ) //disfigured. use id-name if possible
- return "Unknown"
+ return if_no_face
return real_name
//gets name from ID or PDA itself, ID inside PDA doesn't matter
//Useful when player is being seen by other mobs
/mob/living/carbon/human/proc/get_id_name(var/if_no_id = "Unknown")
+ var/obj/item/weapon/storage/wallet/wallet = wear_id
var/obj/item/device/pda/pda = wear_id
var/obj/item/weapon/card/id/id = wear_id
- if(istype(pda)) . = pda.owner
- else if(istype(id)) . = id.registered_name
- if(!.) . = if_no_id //to prevent null-names making the mob unclickable
+ if(istype(wallet)) id = wallet.front_id
+ if(istype(id)) . = id.registered_name
+ else if(istype(pda)) . = pda.owner
+ if(!.) . = if_no_id //to prevent null-names making the mob unclickable
return
//gets ID card object from special clothes slot or null.
/mob/living/carbon/human/proc/get_idcard()
- var/obj/item/weapon/card/id/id = wear_id
- var/obj/item/device/pda/pda = wear_id
- if (istype(pda) && pda.id)
- id = pda.id
- if (istype(id))
- return id
+ if(wear_id)
+ return wear_id.GetID()
//Added a safety check in case you want to shock a human mob directly through electrocute_act.
/mob/living/carbon/human/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/safety = 0)
@@ -535,31 +526,19 @@
var/modified = 0
- var/perpname = "wot"
- if(wear_id)
- var/obj/item/weapon/card/id/I = wear_id.GetID()
- if(I)
- perpname = I.registered_name
- else
- perpname = name
- else
- perpname = name
-
+ var/perpname = H.get_face_name(H.get_id_name(""))
if(perpname)
- for (var/datum/data/record/E in data_core.general)
- if (E.fields["name"] == perpname)
- for (var/datum/data/record/R in data_core.security)
- if (R.fields["id"] == E.fields["id"])
+ var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ if(R)
+ var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Released", "Cancel")
+ if(R)
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud))
+ if(setcriminal != "Cancel")
+ R.fields["criminal"] = setcriminal
+ modified = 1
- var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Released", "Cancel")
-
- if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud))
- if(setcriminal != "Cancel")
- R.fields["criminal"] = setcriminal
- modified = 1
-
- spawn()
- H.handle_regular_hud_updates()
+ spawn()
+ H.handle_regular_hud_updates()
if(!modified)
usr << "\red Unable to locate a data core entry for this person."
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index eb051aca74a..4a1efcfe614 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -214,12 +214,8 @@ var/list/ai_list = list()
set name = "Show Crew Manifest"
var/dat = "Crew RosterCrew Roster:
"
- var/list/L = list()
- for (var/datum/data/record/t in data_core.general)
- var/R = t.fields["name"] + " - " + t.fields["rank"]
- L += R
- for(var/R in sortList(L))
- dat += "[R]
"
+ for(var/datum/data/record/t in sortRecord(data_core.general))
+ dat += t.fields["name"] + " - " + t.fields["rank"] + "
"
dat += ""
src << browse(dat, "window=airoster")
diff --git a/code/modules/mob/living/silicon/pai/hud.dm b/code/modules/mob/living/silicon/pai/hud.dm
index f374aebbc78..07ea2fbc9e1 100644
--- a/code/modules/mob/living/silicon/pai/hud.dm
+++ b/code/modules/mob/living/silicon/pai/hud.dm
@@ -9,42 +9,25 @@
var/image/holder
var/turf/T = get_turf(src.loc)
for(var/mob/living/carbon/human/perp in view(T))
- var/perpname = "wot"
holder = perp.hud_list[ID_HUD]
+ holder.icon_state = "hudno_id"
if(perp.wear_id)
- var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
- if(I)
- perpname = I.registered_name
- holder.icon_state = "hud[ckey(perp:wear_id:GetJobName())]"
- client.images += holder
- else
- perpname = perp.name
- holder.icon_state = "hudno_id"
- client.images += holder
- else
- holder.icon_state = "hudno_id"
- client.images += holder
+ holder.icon_state = "hud[ckey(perp:wear_id:GetJobName())]"
+ client.images += holder
- for(var/datum/data/record/E in data_core.general)
- if(E.fields["name"] == perpname)
+ var/perpname = perp.get_face_name(perp.get_id_name(""))
+ if(perpname)
+ var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ if(R)
holder = perp.hud_list[WANTED_HUD]
- for (var/datum/data/record/R in data_core.security)
- if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
- holder.icon_state = "hudwanted"
- client.images += holder
- break
- else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
- holder.icon_state = "hudincarcerated"
- client.images += holder
- break
- else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
- holder.icon_state = "hudparolled"
- client.images += holder
- break
- else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
- holder.icon_state = "hudreleased"
- client.images += holder
- break
+ switch(R.fields["criminal"])
+ if("*Arrest*") holder.icon_state = "hudwanted"
+ if("Incarcerated") holder.icon_state = "hudincarcerated"
+ if("Parolled") holder.icon_state = "hudparolled"
+ if("Released") holder.icon_state = "hudreleased"
+ else
+ return
+ client.images += holder
/mob/living/silicon/pai/proc/medicalHUD()
if(client)
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 3d076b547d8..544e8fe5610 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -218,33 +218,22 @@
// Accessing medical records
if("medicalrecord")
- if(src.subscreen == 1)
- var/datum/data/record/record = locate(href_list["med_rec"])
- if(record)
- var/datum/data/record/R = record
- var/datum/data/record/M = record
- if (!( data_core.general.Find(R) ))
- src.temp = "Unable to locate requested medical record. Record may have been deleted, or never have existed."
- else
- for(var/datum/data/record/E in data_core.medical)
- if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- M = E
- src.medicalActive1 = R
- src.medicalActive2 = M
+ if(subscreen == 1)
+ medicalActive1 = find_record("id", href_list["med_rec"], data_core.general)
+ if(medicalActive1)
+ medicalActive2 = find_record("id", href_list["med_rec"], data_core.medical)
+ if(!medicalActive2)
+ medicalActive1 = null
+ temp = "Unable to locate requested security record. Record may have been deleted, or never have existed."
+
if("securityrecord")
- if(src.subscreen == 1)
- var/datum/data/record/record = locate(href_list["sec_rec"])
- if(record)
- var/datum/data/record/R = record
- var/datum/data/record/M = record
- if (!( data_core.general.Find(R) ))
- src.temp = "Unable to locate requested security record. Record may have been deleted, or never have existed."
- else
- for(var/datum/data/record/E in data_core.security)
- if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- M = E
- src.securityActive1 = R
- src.securityActive2 = M
+ if(subscreen == 1)
+ securityActive1 = find_record("id", href_list["sec_rec"], data_core.general)
+ if(securityActive1)
+ securityActive2 = find_record("id", href_list["sec_rec"], data_core.security)
+ if(!securityActive2)
+ securityActive1 = null
+ temp = "Unable to locate requested security record. Record may have been deleted, or never have existed."
if("securityhud")
if(href_list["toggle"])
src.secHUD = !src.secHUD
@@ -410,70 +399,64 @@
// Crew Manifest
/mob/living/silicon/pai/proc/softwareManifest()
- var/dat = ""
- dat += "Crew Manifest
"
- var/list/L = list()
- if(!isnull(data_core.general))
- for (var/datum/data/record/t in sortRecord(data_core.general))
- var/R = t.fields["name"] + " - " + t.fields["rank"]
- L += R
- for(var/R in sortList(L))
- dat += "[R]
"
- dat += "