mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
Merge pull request #7257 from Lo6a4evskiy/Sec_record_photo
Adds photos and some other stuff to security and medical records
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
var/global/obj/effect/datacore/data_core = null
|
||||
var/global/datum/datacore/data_core = null
|
||||
//var/global/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event
|
||||
//Noble idea, but doing this made GC fail. The gains from waiting on deffering are lost by using del()
|
||||
|
||||
|
||||
+188
-21
@@ -1,6 +1,5 @@
|
||||
|
||||
/obj/effect/datacore
|
||||
name = "datacore"
|
||||
/datum/datacore
|
||||
var/medical[] = list()
|
||||
var/medicalPrintCount = 0
|
||||
var/general[] = list()
|
||||
@@ -25,7 +24,7 @@
|
||||
var/time = ""
|
||||
var/dataId = 0
|
||||
|
||||
/obj/effect/datacore/proc/createCrimeEntry(cname = "", cdetails = "", author = "", time = "")
|
||||
/datum/datacore/proc/createCrimeEntry(cname = "", cdetails = "", author = "", time = "")
|
||||
var/datum/data/crime/c = new /datum/data/crime
|
||||
c.crimeName = cname
|
||||
c.crimeDetails = cdetails
|
||||
@@ -34,14 +33,14 @@
|
||||
c.dataId = ++securityCrimeCounter
|
||||
return c
|
||||
|
||||
/obj/effect/datacore/proc/addMinorCrime(id = "", var/datum/data/crime/crime)
|
||||
/datum/datacore/proc/addMinorCrime(id = "", var/datum/data/crime/crime)
|
||||
for(var/datum/data/record/R in security)
|
||||
if(R.fields["id"] == id)
|
||||
var/list/crimes = R.fields["mi_crim"]
|
||||
crimes |= crime
|
||||
return
|
||||
|
||||
/obj/effect/datacore/proc/removeMinorCrime(id, cDataId)
|
||||
/datum/datacore/proc/removeMinorCrime(id, cDataId)
|
||||
for(var/datum/data/record/R in security)
|
||||
if(R.fields["id"] == id)
|
||||
var/list/crimes = R.fields["mi_crim"]
|
||||
@@ -50,7 +49,7 @@
|
||||
crimes -= crime
|
||||
return
|
||||
|
||||
/obj/effect/datacore/proc/removeMajorCrime(id, cDataId)
|
||||
/datum/datacore/proc/removeMajorCrime(id, cDataId)
|
||||
for(var/datum/data/record/R in security)
|
||||
if(R.fields["id"] == id)
|
||||
var/list/crimes = R.fields["ma_crim"]
|
||||
@@ -59,14 +58,14 @@
|
||||
crimes -= crime
|
||||
return
|
||||
|
||||
/obj/effect/datacore/proc/addMajorCrime(id = "", var/datum/data/crime/crime)
|
||||
/datum/datacore/proc/addMajorCrime(id = "", var/datum/data/crime/crime)
|
||||
for(var/datum/data/record/R in security)
|
||||
if(R.fields["id"] == id)
|
||||
var/list/crimes = R.fields["ma_crim"]
|
||||
crimes |= crime
|
||||
return
|
||||
|
||||
/obj/effect/datacore/proc/manifest(var/nosleep = 0)
|
||||
/datum/datacore/proc/manifest(var/nosleep = 0)
|
||||
spawn()
|
||||
if(!nosleep)
|
||||
sleep(40)
|
||||
@@ -74,12 +73,12 @@
|
||||
manifest_inject(H)
|
||||
return
|
||||
|
||||
/obj/effect/datacore/proc/manifest_modify(var/name, var/assignment)
|
||||
/datum/datacore/proc/manifest_modify(var/name, var/assignment)
|
||||
var/datum/data/record/foundrecord = find_record("name", name, data_core.general)
|
||||
if(foundrecord)
|
||||
foundrecord.fields["rank"] = assignment
|
||||
|
||||
/obj/effect/datacore/proc/get_manifest(monochrome, OOC)
|
||||
/datum/datacore/proc/get_manifest(monochrome, OOC)
|
||||
var/list/heads = list()
|
||||
var/list/sec = list()
|
||||
var/list/eng = list()
|
||||
@@ -135,49 +134,49 @@
|
||||
misc[name] = rank
|
||||
if(heads.len > 0)
|
||||
dat += "<tr><th colspan=3>Heads</th></tr>"
|
||||
for(name in heads)
|
||||
for(var/name in heads)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[heads[name]]</td></tr>"
|
||||
even = !even
|
||||
if(sec.len > 0)
|
||||
dat += "<tr><th colspan=3>Security</th></tr>"
|
||||
for(name in sec)
|
||||
for(var/name in sec)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sec[name]]</td></tr>"
|
||||
even = !even
|
||||
if(eng.len > 0)
|
||||
dat += "<tr><th colspan=3>Engineering</th></tr>"
|
||||
for(name in eng)
|
||||
for(var/name in eng)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[eng[name]]</td></tr>"
|
||||
even = !even
|
||||
if(med.len > 0)
|
||||
dat += "<tr><th colspan=3>Medical</th></tr>"
|
||||
for(name in med)
|
||||
for(var/name in med)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[med[name]]</td></tr>"
|
||||
even = !even
|
||||
if(sci.len > 0)
|
||||
dat += "<tr><th colspan=3>Science</th></tr>"
|
||||
for(name in sci)
|
||||
for(var/name in sci)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sci[name]]</td></tr>"
|
||||
even = !even
|
||||
if(sup.len > 0)
|
||||
dat += "<tr><th colspan=3>Supply</th></tr>"
|
||||
for(name in sup)
|
||||
for(var/name in sup)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sup[name]]</td></tr>"
|
||||
even = !even
|
||||
if(civ.len > 0)
|
||||
dat += "<tr><th colspan=3>Civilian</th></tr>"
|
||||
for(name in civ)
|
||||
for(var/name in civ)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[civ[name]]</td></tr>"
|
||||
even = !even
|
||||
// in case somebody is insane and added them to the manifest, why not
|
||||
if(bot.len > 0)
|
||||
dat += "<tr><th colspan=3>Silicon</th></tr>"
|
||||
for(name in bot)
|
||||
for(var/name in bot)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[bot[name]]</td></tr>"
|
||||
even = !even
|
||||
// misc guys
|
||||
if(misc.len > 0)
|
||||
dat += "<tr><th colspan=3>Miscellaneous</th></tr>"
|
||||
for(name in misc)
|
||||
for(var/name in misc)
|
||||
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[misc[name]]</td></tr>"
|
||||
even = !even
|
||||
|
||||
@@ -188,7 +187,7 @@
|
||||
|
||||
|
||||
var/record_id_num = 1001
|
||||
/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
|
||||
/datum/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
|
||||
if(H.mind && (H.mind.assigned_role != "MODE"))
|
||||
var/assignment
|
||||
if(H.mind.assigned_role)
|
||||
@@ -199,6 +198,11 @@ var/record_id_num = 1001
|
||||
assignment = "Unassigned"
|
||||
|
||||
var/id = num2hex(record_id_num++,6)
|
||||
var/image = get_id_photo(H)
|
||||
var/obj/item/weapon/photo/photo_front = new()
|
||||
var/obj/item/weapon/photo/photo_side = new()
|
||||
photo_front.photocreate(null, icon(image, dir = SOUTH))
|
||||
photo_side.photocreate(null, icon(image, dir = WEST))
|
||||
|
||||
//These records should ~really~ be merged or something
|
||||
//General Record
|
||||
@@ -207,10 +211,14 @@ var/record_id_num = 1001
|
||||
G.fields["name"] = H.real_name
|
||||
G.fields["rank"] = assignment
|
||||
G.fields["age"] = H.age
|
||||
if(config.mutant_races)
|
||||
G.fields["species"] = H.dna.species.name
|
||||
G.fields["fingerprint"] = md5(H.dna.uni_identity)
|
||||
G.fields["p_stat"] = "Active"
|
||||
G.fields["m_stat"] = "Stable"
|
||||
G.fields["sex"] = H.gender
|
||||
G.fields["photo_front"] = photo_front
|
||||
G.fields["photo_side"] = photo_side
|
||||
general += G
|
||||
|
||||
//Medical Record
|
||||
@@ -251,7 +259,166 @@ var/record_id_num = 1001
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
L.fields["identity"] = H.dna.uni_identity
|
||||
L.fields["image"] = getFlatIcon(H) //This is god-awful
|
||||
L.fields["image"] = image
|
||||
locked += L
|
||||
return
|
||||
|
||||
/datum/datacore/proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
var/icon/photo = null
|
||||
var/g = (H.gender == FEMALE) ? "f" : "m"
|
||||
if(!config.mutant_races || H.dna.species.use_skintones)
|
||||
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]_s")
|
||||
else
|
||||
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]_s")
|
||||
photo.Blend("#[H.dna.mutant_color]", ICON_MULTIPLY)
|
||||
|
||||
var/icon/eyes_s
|
||||
if(EYECOLOR in H.dna.species.specflags)
|
||||
eyes_s = icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[H.dna.species.eyes]_s")
|
||||
eyes_s.Blend("#[H.eye_color]", ICON_MULTIPLY)
|
||||
|
||||
var/datum/sprite_accessory/S
|
||||
S = hair_styles_list[H.hair_style]
|
||||
if(S && (HAIR in H.dna.species.specflags))
|
||||
var/icon/hair_s = icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
|
||||
hair_s.Blend("#[H.hair_color]", ICON_MULTIPLY)
|
||||
eyes_s.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
S = facial_hair_styles_list[H.facial_hair_style]
|
||||
if(S && (FACEHAIR in H.dna.species.specflags))
|
||||
var/icon/facial_s = icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
|
||||
facial_s.Blend("#[H.facial_hair_color]", ICON_MULTIPLY)
|
||||
eyes_s.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
if(eyes_s)
|
||||
photo.Blend(eyes_s, ICON_OVERLAY)
|
||||
|
||||
var/icon/clothes_s = null
|
||||
switch(H.mind.assigned_role)
|
||||
if("Assistant")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "grey_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Scientist")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "toxinswhite_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_tox"), ICON_OVERLAY)
|
||||
if("Station Engineer")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "engine_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Security Officer")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "security_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY)
|
||||
if("Medical Doctor")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
|
||||
if("Cargo Technician")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "cargo_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Shaft Miner")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "miner_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Atmospheric Technician")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "atmos_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Botanist")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "hydroponics_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY)
|
||||
if("Chemist")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "chemistrywhite_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_chem"), ICON_OVERLAY)
|
||||
if("Cook")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "chef_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "chef"), ICON_OVERLAY)
|
||||
if("Janitor")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "janitor_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Geneticist")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "geneticswhite_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_gen"), ICON_OVERLAY)
|
||||
if("Virologist")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "virologywhite_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_vir"), ICON_OVERLAY)
|
||||
if("Roboticist")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "robotics_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
|
||||
if("Lawyer")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "bluesuit_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY)
|
||||
if("Clown")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "clown_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY)
|
||||
if("Mime")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "mime_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY)
|
||||
if("Bartender")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "ba_suit_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "armoralt"), ICON_OVERLAY)
|
||||
if("Quartermaster")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "qm_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Chaplain")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "chapblack_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Research Director")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "director_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
|
||||
if("Chief Medical Officer")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "cmo_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_cmo"), ICON_OVERLAY)
|
||||
if("Captain")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "captain_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "capcarapace"), ICON_OVERLAY)
|
||||
if("Head of Security")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "hos_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "hostrench"), ICON_OVERLAY)
|
||||
if("Warden")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "warden_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "warden_jacket"), ICON_OVERLAY)
|
||||
if("Detective")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "detective_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
|
||||
if("Chief Engineer")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "chief_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Head of Personnel")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "hop_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Librarian")
|
||||
clothes_s = icon('icons/mob/uniform.dmi', "red_suit_s")
|
||||
clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
|
||||
if(clothes_s)
|
||||
photo.Blend(clothes_s, ICON_OVERLAY)
|
||||
|
||||
return photo
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
if(..())
|
||||
return
|
||||
var/dat
|
||||
if (src.temp)
|
||||
if(src.temp)
|
||||
dat = text("<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>")
|
||||
else
|
||||
dat = text("Confirm Identity: <A href='?src=\ref[];scan=1'>[]</A><HR>", src, (src.scan ? text("[]", src.scan.name) : "----------"))
|
||||
if (src.authenticated)
|
||||
if(src.authenticated)
|
||||
switch(src.screen)
|
||||
if(1.0)
|
||||
dat += {"
|
||||
@@ -73,7 +73,7 @@
|
||||
var/blood_type = ""
|
||||
var/b_dna = ""
|
||||
for(var/datum/data/record/E in data_core.medical)
|
||||
if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
|
||||
if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
|
||||
blood_type = E.fields["blood_type"]
|
||||
b_dna = E.fields["b_dna"]
|
||||
var/background
|
||||
@@ -105,10 +105,20 @@
|
||||
|
||||
dat += "<table><tr><td><b><font size='4'>Medical Record</font></b></td></tr>"
|
||||
if(active1 in data_core.general)
|
||||
dat += "<tr><td>Name:</td><td>[active1.fields["name"]]</td></tr>"
|
||||
if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P1 = active1.fields["photo_front"]
|
||||
user << browse_rsc(P1.img, "photo_front")
|
||||
if(istype(active1.fields["photo_side"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P2 = active1.fields["photo_side"]
|
||||
user << browse_rsc(P2.img, "photo_side")
|
||||
dat += "<tr><td>Name:</td><td>[active1.fields["name"]]</td>"
|
||||
dat += "<td><a href='?src=\ref[src];field=show_photo_front'><img src=photo_front height=80 width=80 border=4></a></td>"
|
||||
dat += "<td><a href='?src=\ref[src];field=show_photo_side'><img src=photo_side height=80 width=80 border=4></a></td></tr>"
|
||||
dat += "<tr><td>ID:</td><td>[active1.fields["id"]]</td></tr>"
|
||||
dat += "<tr><td>Sex:</td><td><A href='?src=\ref[src];field=sex'> [active1.fields["sex"]] </A></td></tr>"
|
||||
dat += "<tr><td>Age:</td><td><A href='?src=\ref[src];field=age'> [active1.fields["age"]] </A></td></tr>"
|
||||
if(config.mutant_races)
|
||||
dat += "<tr><td>Species:</td><td><A href='?src=\ref[src];field=species'> [active1.fields["species"]] </A></td></tr>"
|
||||
dat += "<tr><td>Fingerprint:</td><td><A href='?src=\ref[src];field=fingerprint'> [active1.fields["fingerprint"]] </A></td></tr>"
|
||||
dat += "<tr><td>Physical Status:</td><td><A href='?src=\ref[src];field=p_stat'> [active1.fields["p_stat"]] </A></td></tr>"
|
||||
dat += "<tr><td>Mental Status:</td><td><A href='?src=\ref[src];field=m_stat'> [active1.fields["m_stat"]] </A></td></tr>"
|
||||
@@ -185,33 +195,34 @@
|
||||
return
|
||||
|
||||
/obj/machinery/computer/med_data/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
. = ..()
|
||||
if(.)
|
||||
return .
|
||||
if(!(active1 in data_core.general))
|
||||
src.active1 = null
|
||||
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)))
|
||||
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"])
|
||||
if(href_list["temp"])
|
||||
src.temp = null
|
||||
if (href_list["scan"])
|
||||
if (src.scan)
|
||||
if(href_list["scan"])
|
||||
if(src.scan)
|
||||
src.scan.loc = src.loc
|
||||
src.scan = null
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/card/id))
|
||||
if(istype(I, /obj/item/weapon/card/id))
|
||||
usr.drop_item()
|
||||
I.loc = src
|
||||
src.scan = I
|
||||
else if (href_list["logout"])
|
||||
else if(href_list["logout"])
|
||||
src.authenticated = null
|
||||
src.screen = null
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
else if (href_list["choice"])
|
||||
else if(href_list["choice"])
|
||||
// SORTING!
|
||||
if(href_list["choice"] == "Sorting")
|
||||
// Reverse the order if clicked twice
|
||||
@@ -224,21 +235,21 @@
|
||||
// New sorting order!
|
||||
sortBy = href_list["sort"]
|
||||
order = initial(order)
|
||||
else if (href_list["login"])
|
||||
if (istype(usr, /mob/living/silicon))
|
||||
else if(href_list["login"])
|
||||
if(istype(usr, /mob/living/silicon))
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
src.authenticated = 1
|
||||
src.rank = "AI"
|
||||
src.screen = 1
|
||||
else if (istype(src.scan, /obj/item/weapon/card/id))
|
||||
else if(istype(src.scan, /obj/item/weapon/card/id))
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
if (src.check_access(src.scan))
|
||||
if(src.check_access(src.scan))
|
||||
src.authenticated = src.scan.registered_name
|
||||
src.rank = src.scan.assignment
|
||||
src.screen = 1
|
||||
if (src.authenticated)
|
||||
if(src.authenticated)
|
||||
|
||||
if(href_list["screen"])
|
||||
src.screen = text2num(href_list["screen"])
|
||||
@@ -264,88 +275,94 @@
|
||||
<BR>
|
||||
<BR><b>Severity:</b> [Dis.severity]"}
|
||||
|
||||
else if (href_list["del_all"])
|
||||
else if(href_list["del_all"])
|
||||
src.temp = text("Are you sure you wish to delete all records?<br>\n\t<A href='?src=\ref[];temp=1;del_all2=1'>Yes</A><br>\n\t<A href='?src=\ref[];temp=1'>No</A><br>", src, src)
|
||||
|
||||
else if (href_list["del_all2"])
|
||||
else if(href_list["del_all2"])
|
||||
investigate_log("[usr.name] ([usr.key]) has deleted all medical records.", "records")
|
||||
data_core.medical.Cut()
|
||||
src.temp = "All records deleted."
|
||||
|
||||
else if (href_list["field"])
|
||||
else if(href_list["field"])
|
||||
var/a1 = src.active1
|
||||
var/a2 = src.active2
|
||||
switch(href_list["field"])
|
||||
if("fingerprint")
|
||||
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))
|
||||
var/t1 = stripped_input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
src.active1.fields["fingerprint"] = t1
|
||||
if("sex")
|
||||
if(active1)
|
||||
if (src.active1.fields["sex"] == "Male")
|
||||
if(src.active1.fields["sex"] == "Male")
|
||||
src.active1.fields["sex"] = "Female"
|
||||
else
|
||||
src.active1.fields["sex"] = "Male"
|
||||
if("age")
|
||||
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))
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
src.active1.fields["age"] = t1
|
||||
if("species")
|
||||
if(active1)
|
||||
var/t1 = stripped_input("Please input species name", "Med. records", src.active1.fields["species"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
active1.fields["species"] = t1
|
||||
if("mi_dis")
|
||||
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))
|
||||
var/t1 = stripped_input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["mi_dis"] = t1
|
||||
if("mi_dis_d")
|
||||
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))
|
||||
var/t1 = stripped_multiline_input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["mi_dis_d"] = t1
|
||||
if("ma_dis")
|
||||
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))
|
||||
var/t1 = stripped_input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["ma_dis"] = t1
|
||||
if("ma_dis_d")
|
||||
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))
|
||||
var/t1 = stripped_multiline_input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["ma_dis_d"] = t1
|
||||
if("alg")
|
||||
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))
|
||||
var/t1 = stripped_input("Please state allergies:", "Med. records", src.active2.fields["alg"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["alg"] = t1
|
||||
if("alg_d")
|
||||
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))
|
||||
var/t1 = stripped_multiline_input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["alg_d"] = t1
|
||||
if("cdi")
|
||||
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))
|
||||
var/t1 = stripped_input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["cdi"] = t1
|
||||
if("cdi_d")
|
||||
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))
|
||||
var/t1 = stripped_multiline_input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["cdi_d"] = t1
|
||||
if("notes")
|
||||
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))
|
||||
var/t1 = stripped_multiline_input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["notes"] = t1
|
||||
if("p_stat")
|
||||
@@ -359,13 +376,25 @@
|
||||
src.temp = text("<B>Blood Type:</B><BR>\n\t<A href='?src=\ref[];temp=1;blood_type=an'>A-</A> <A href='?src=\ref[];temp=1;blood_type=ap'>A+</A><BR>\n\t<A href='?src=\ref[];temp=1;blood_type=bn'>B-</A> <A href='?src=\ref[];temp=1;blood_type=bp'>B+</A><BR>\n\t<A href='?src=\ref[];temp=1;blood_type=abn'>AB-</A> <A href='?src=\ref[];temp=1;blood_type=abp'>AB+</A><BR>\n\t<A href='?src=\ref[];temp=1;blood_type=on'>O-</A> <A href='?src=\ref[];temp=1;blood_type=op'>O+</A><BR>", src, src, src, src, src, src, src, src)
|
||||
if("b_dna")
|
||||
if(active2)
|
||||
var/t1 = copytext(sanitize(input("Please input DNA hash:", "Med. records", src.active2.fields["b_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.active2 != a2))
|
||||
var/t1 = stripped_input("Please input DNA hash:", "Med. records", src.active2.fields["b_dna"], null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
src.active2.fields["b_dna"] = t1
|
||||
if("show_photo_front")
|
||||
if(active1)
|
||||
if(active1.fields["photo_front"])
|
||||
if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P = active1.fields["photo_front"]
|
||||
P.show(usr)
|
||||
if("show_photo_side")
|
||||
if(active1)
|
||||
if(active1.fields["photo_side"])
|
||||
if(istype(active1.fields["photo_side"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P = active1.fields["photo_side"]
|
||||
P.show(usr)
|
||||
else
|
||||
|
||||
else if (href_list["p_stat"])
|
||||
else if(href_list["p_stat"])
|
||||
if(active1)
|
||||
switch(href_list["p_stat"])
|
||||
if("deceased")
|
||||
@@ -377,7 +406,7 @@
|
||||
if("unfit")
|
||||
src.active1.fields["p_stat"] = "Physically Unfit"
|
||||
|
||||
else if (href_list["m_stat"])
|
||||
else if(href_list["m_stat"])
|
||||
if(active1)
|
||||
switch(href_list["m_stat"])
|
||||
if("insane")
|
||||
@@ -390,7 +419,7 @@
|
||||
src.active1.fields["m_stat"] = "Stable"
|
||||
|
||||
|
||||
else if (href_list["blood_type"])
|
||||
else if(href_list["blood_type"])
|
||||
if(active2)
|
||||
switch(href_list["blood_type"])
|
||||
if("an")
|
||||
@@ -411,17 +440,17 @@
|
||||
src.active2.fields["blood_type"] = "O+"
|
||||
|
||||
|
||||
else if (href_list["del_r"])
|
||||
else if(href_list["del_r"])
|
||||
if(active2)
|
||||
src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?<br>\n\t<A href='?src=\ref[];temp=1;del_r2=1'>Yes</A><br>\n\t<A href='?src=\ref[];temp=1'>No</A><br>", src, src)
|
||||
|
||||
else if (href_list["del_r2"])
|
||||
else if(href_list["del_r2"])
|
||||
investigate_log("[usr.name] ([usr.key]) has deleted the medical records for [active1.fields["name"]].", "records")
|
||||
if(active2)
|
||||
data_core.medical -= active2
|
||||
active2 = null
|
||||
|
||||
else if (href_list["d_rec"])
|
||||
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)
|
||||
@@ -429,8 +458,8 @@
|
||||
active1 = null
|
||||
screen = 4
|
||||
|
||||
else if (href_list["new"])
|
||||
if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) )))
|
||||
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"]
|
||||
R.fields["id"] = src.active1.fields["id"]
|
||||
@@ -450,46 +479,46 @@
|
||||
src.active2 = R
|
||||
src.screen = 4
|
||||
|
||||
else if (href_list["add_c"])
|
||||
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)
|
||||
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||
var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null)
|
||||
if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
var/counter = 1
|
||||
while(src.active2.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
|
||||
|
||||
else if (href_list["del_c"])
|
||||
if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", 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"])] = "<B>Deleted</B>"
|
||||
|
||||
else if (href_list["search"])
|
||||
else if(href_list["search"])
|
||||
var/t1 = stripped_input(usr, "Search String: (Name, DNA, or ID)", "Med. records")
|
||||
if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!in_range(src, usr)) && (!istype(usr, /mob/living/silicon)))))
|
||||
if(!canUseMedicalRecordsConsole(usr, t1))
|
||||
return
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
t1 = lowertext(t1)
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])))
|
||||
if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])))
|
||||
src.active2 = R
|
||||
else
|
||||
//Foreach continue //goto(3229)
|
||||
if (!( src.active2 ))
|
||||
if(!( src.active2 ))
|
||||
src.temp = text("Could not locate record [].", t1)
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.general)
|
||||
if ((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"]))
|
||||
if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"]))
|
||||
src.active1 = E
|
||||
else
|
||||
//Foreach continue //goto(3334)
|
||||
src.screen = 4
|
||||
|
||||
else if (href_list["print_p"])
|
||||
if (!( src.printing ))
|
||||
else if(href_list["print_p"])
|
||||
if(!( src.printing ))
|
||||
src.printing = 1
|
||||
data_core.medicalPrintCount++
|
||||
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
|
||||
@@ -497,7 +526,10 @@
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
|
||||
P.info = "<CENTER><B>Medical Record - (MR-[data_core.medicalPrintCount])</B></CENTER><BR>"
|
||||
if(active1 in data_core.general)
|
||||
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", 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"])
|
||||
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"])
|
||||
if(config.mutant_races)
|
||||
P.info += "\nSpecies: [active1.fields["species"]]<BR>"
|
||||
P.info += text("\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"])
|
||||
else
|
||||
P.info += "<B>General Record Lost!</B><BR>"
|
||||
if(active2 in data_core.medical)
|
||||
@@ -545,6 +577,15 @@
|
||||
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/computer/med_data/proc/canUseMedicalRecordsConsole(mob/user, message = 1, record1, record2)
|
||||
if(user)
|
||||
if(message)
|
||||
if(authenticated)
|
||||
if(user.canUseTopic(src))
|
||||
if(!record1 || record1 == active1)
|
||||
if(!record2 || record2 == active2)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/computer/med_data/laptop
|
||||
name = "medical laptop"
|
||||
|
||||
@@ -36,16 +36,16 @@
|
||||
/obj/machinery/computer/secure_data/attack_hand(mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if (src.z > 6)
|
||||
if(src.z > 6)
|
||||
user << "<span class='userdanger'>Unable to establish a connection</span>: \black You're too far away from the station!"
|
||||
return
|
||||
var/dat
|
||||
|
||||
if (temp)
|
||||
if(temp)
|
||||
dat = text("<TT>[]</TT><BR><BR><A href='?src=\ref[];choice=Clear Screen'>Clear Screen</A>", temp, src)
|
||||
else
|
||||
dat = text("Confirm Identity: <A href='?src=\ref[];choice=Confirm Identity'>[]</A><HR>", src, (scan ? text("[]", scan.name) : "----------"))
|
||||
if (authenticated)
|
||||
if(authenticated)
|
||||
switch(screen)
|
||||
if(1.0)
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
|
||||
var/crimstat = ""
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
if ((E.fields["name"] == R.fields["name"]) && (E.fields["id"] == R.fields["id"]))
|
||||
if((E.fields["name"] == R.fields["name"]) && (E.fields["id"] == R.fields["id"]))
|
||||
crimstat = E.fields["criminal"]
|
||||
var/background
|
||||
switch(crimstat)
|
||||
@@ -159,21 +159,34 @@
|
||||
dat += "<BR><A href='?src=\ref[src];choice=Delete All Records'>Delete All Records</A><BR><BR><A href='?src=\ref[src];choice=Return'>Back</A>"
|
||||
if(3.0)
|
||||
dat += "<font size='4'><b>Security Record</b></font><br>"
|
||||
if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
|
||||
dat += {"<table>
|
||||
if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
|
||||
if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P1 = active1.fields["photo_front"]
|
||||
user << browse_rsc(P1.img, "photo_front")
|
||||
if(istype(active1.fields["photo_side"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P2 = active1.fields["photo_side"]
|
||||
user << browse_rsc(P2.img, "photo_side")
|
||||
dat += {"<table><tr><td><table>
|
||||
<tr><td>Name:</td><td><A href='?src=\ref[src];choice=Edit Field;field=name'> [active1.fields["name"]] </A></td></tr>
|
||||
<tr><td>ID:</td><td><A href='?src=\ref[src];choice=Edit Field;field=id'> [active1.fields["id"]] </A></td></tr>
|
||||
<tr><td>Sex:</td><td><A href='?src=\ref[src];choice=Edit Field;field=sex'> [active1.fields["sex"]] </A></td></tr>
|
||||
<tr><td>Age:</td><td><A href='?src=\ref[src];choice=Edit Field;field=age'> [active1.fields["age"]] </A></td></tr>
|
||||
<tr><td>Rank:</td><td><A href='?src=\ref[src];choice=Edit Field;field=rank'> [active1.fields["rank"]] </A></td></tr>
|
||||
<tr><td>Age:</td><td><A href='?src=\ref[src];choice=Edit Field;field=age'> [active1.fields["age"]] </A></td></tr>"}
|
||||
if(config.mutant_races)
|
||||
dat += "<tr><td>Species:</td><td><A href ='?src=\ref[src];choice=Edit Field;field=species'> [active1.fields["species"]] </A></td></tr>"
|
||||
dat += {"<tr><td>Rank:</td><td><A href='?src=\ref[src];choice=Edit Field;field=rank'> [active1.fields["rank"]] </A></td></tr>
|
||||
<tr><td>Fingerprint:</td><td><A href='?src=\ref[src];choice=Edit Field;field=fingerprint'> [active1.fields["fingerprint"]] </A></td></tr>
|
||||
<tr><td>Physical Status:</td><td> [active1.fields["p_stat"]] </td></tr>
|
||||
<tr><td>Mental Status:</td><td> [active1.fields["m_stat"]] </td></tr>
|
||||
</table>"}
|
||||
</table></td>
|
||||
<td><table><td align = center><a href='?src=\ref[src];choice=Edit Field;field=show_photo_front'><img src=photo_front height=80 width=80 border=4></a><br>
|
||||
<a href='?src=\ref[src];choice=Edit Field;field=upd_photo_front'>Update front photo</a></td>
|
||||
<td align = center><a href='?src=\ref[src];choice=Edit Field;field=show_photo_side'><img src=photo_side height=80 width=80 border=4></a><br>
|
||||
<a href='?src=\ref[src];choice=Edit Field;field=upd_photo_side'>Update side photo</a></td></table>
|
||||
</td></tr></table></td></tr></table>"}
|
||||
else
|
||||
dat += "General Record Lost!<br>"
|
||||
if ((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
|
||||
dat += "<br><font size='4'><b>Security Data</b></font>"
|
||||
dat += "<br>General Record Lost!<br>"
|
||||
if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
|
||||
dat += "<font size='4'><b>Security Data</b></font>"
|
||||
dat += "<br>Criminal Status: <A href='?src=\ref[src];choice=Edit Field;field=criminal'>[active2.fields["criminal"]]</A>"
|
||||
dat += "<br><br>Minor Crimes: <A href='?src=\ref[src];choice=Edit Field;field=mi_crim_add'>Add New</A>"
|
||||
|
||||
@@ -244,13 +257,14 @@
|
||||
I can't be bothered to look more of the actual code outside of switch but that probably needs revising too.
|
||||
What a mess.*/
|
||||
/obj/machinery/computer/secure_data/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if (!( data_core.general.Find(active1) ))
|
||||
. = ..()
|
||||
if(.)
|
||||
return .
|
||||
if(!( data_core.general.Find(active1) ))
|
||||
active1 = null
|
||||
if (!( data_core.security.Find(active2) ))
|
||||
if(!( data_core.security.Find(active2) ))
|
||||
active2 = null
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
switch(href_list["choice"])
|
||||
// SORTING!
|
||||
@@ -269,13 +283,13 @@ What a mess.*/
|
||||
if("Clear Screen")
|
||||
temp = null
|
||||
|
||||
if ("Return")
|
||||
if("Return")
|
||||
screen = 1
|
||||
active1 = null
|
||||
active2 = null
|
||||
|
||||
if("Confirm Identity")
|
||||
if (scan)
|
||||
if(scan)
|
||||
if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand())
|
||||
usr.put_in_hands(scan)
|
||||
else
|
||||
@@ -283,7 +297,7 @@ What a mess.*/
|
||||
scan = null
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/card/id))
|
||||
if(istype(I, /obj/item/weapon/card/id))
|
||||
usr.drop_item()
|
||||
I.loc = src
|
||||
scan = I
|
||||
@@ -295,14 +309,14 @@ What a mess.*/
|
||||
active2 = null
|
||||
|
||||
if("Log In")
|
||||
if (istype(usr, /mob/living/silicon))
|
||||
if(istype(usr, /mob/living/silicon))
|
||||
var/mob/living/silicon/borg = usr
|
||||
active1 = null
|
||||
active2 = null
|
||||
authenticated = borg.name
|
||||
rank = "AI"
|
||||
screen = 1
|
||||
else if (istype(scan, /obj/item/weapon/card/id))
|
||||
else if(istype(scan, /obj/item/weapon/card/id))
|
||||
active1 = null
|
||||
active2 = null
|
||||
if(check_access(scan))
|
||||
@@ -315,50 +329,53 @@ What a mess.*/
|
||||
active1 = null
|
||||
active2 = null
|
||||
|
||||
if ("Browse Record")
|
||||
if("Browse Record")
|
||||
var/datum/data/record/R = locate(href_list["d_rec"])
|
||||
var/S = locate(href_list["d_rec"])
|
||||
if (!( data_core.general.Find(R) ))
|
||||
if(!( data_core.general.Find(R) ))
|
||||
temp = "Record Not Found!"
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
S = E
|
||||
active1 = R
|
||||
active2 = S
|
||||
screen = 3
|
||||
|
||||
/* if ("Search Fingerprints")
|
||||
/* if("Search Fingerprints")
|
||||
var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text
|
||||
if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))
|
||||
if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))
|
||||
return
|
||||
active1 = null
|
||||
active2 = null
|
||||
t1 = lowertext(t1)
|
||||
for(var/datum/data/record/R in data_core.general)
|
||||
if (lowertext(R.fields["fingerprint"]) == t1)
|
||||
if(lowertext(R.fields["fingerprint"]) == t1)
|
||||
active1 = R
|
||||
if (!( active1 ))
|
||||
if(!( active1 ))
|
||||
temp = text("Could not locate record [].", t1)
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
if ((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"]))
|
||||
if((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"]))
|
||||
active2 = E
|
||||
screen = 3 */
|
||||
|
||||
if ("Print Record")
|
||||
if (!( printing ))
|
||||
if("Print Record")
|
||||
if(!( printing ))
|
||||
printing = 1
|
||||
data_core.securityPrintCount++
|
||||
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
|
||||
sleep(30)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
|
||||
P.info = "<CENTER><B>Security Record - (SR-[data_core.securityPrintCount])</B></CENTER><BR>"
|
||||
if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
|
||||
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"], active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
|
||||
if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
|
||||
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"])
|
||||
if(config.mutant_races)
|
||||
P.info += "\nSpecies: [active1.fields["species"]]<BR>"
|
||||
P.info += text("\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
|
||||
else
|
||||
P.info += "<B>General Record Lost!</B><BR>"
|
||||
if ((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
|
||||
if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
|
||||
P.info += text("<BR>\n<CENTER><B>Security Data</B></CENTER><BR>\nCriminal Status: []", active2.fields["criminal"])
|
||||
|
||||
P.info += "<BR>\n<BR>\nMinor Crimes:<BR>\n"
|
||||
@@ -406,49 +423,49 @@ What a mess.*/
|
||||
P.info += "</TT>"
|
||||
printing = null
|
||||
//RECORD DELETE
|
||||
if ("Delete All Records")
|
||||
if("Delete All Records")
|
||||
temp = ""
|
||||
temp += "Are you sure you wish to delete all Security records?<br>"
|
||||
temp += "<a href='?src=\ref[src];choice=Purge All Records'>Yes</a><br>"
|
||||
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
|
||||
|
||||
if ("Purge All Records")
|
||||
if("Purge All Records")
|
||||
investigate_log("[usr.name] ([usr.key]) has purged all the security records.", "records")
|
||||
for(var/datum/data/record/R in data_core.security)
|
||||
del(R)
|
||||
data_core.security.Cut()
|
||||
temp = "All Security records deleted."
|
||||
|
||||
if ("Add Entry")
|
||||
if (!( istype(active2, /datum/data/record) ))
|
||||
if("Add Entry")
|
||||
if(!( istype(active2, /datum/data/record) ))
|
||||
return
|
||||
var/a2 = active2
|
||||
var/t1 = copytext(sanitize(input("Add Comment:", "Secure. records", null, null) as message),1,MAX_MESSAGE_LEN)
|
||||
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||
var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null)
|
||||
if(!canUseSecurityRecordsConsole(t1, usr, null, a2))
|
||||
return
|
||||
var/counter = 1
|
||||
while(active2.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
|
||||
|
||||
if ("Delete Record (ALL)")
|
||||
if (active1)
|
||||
if("Delete Record (ALL)")
|
||||
if(active1)
|
||||
temp = "<h5>Are you sure you wish to delete the record (ALL)?</h5>"
|
||||
temp += "<a href='?src=\ref[src];choice=Delete Record (ALL) Execute'>Yes</a><br>"
|
||||
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
|
||||
|
||||
if ("Delete Record (Security)")
|
||||
if (active2)
|
||||
if("Delete Record (Security)")
|
||||
if(active2)
|
||||
temp = "<h5>Are you sure you wish to delete the record (Security Portion Only)?</h5>"
|
||||
temp += "<a href='?src=\ref[src];choice=Delete Record (Security) Execute'>Yes</a><br>"
|
||||
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
|
||||
|
||||
if ("Delete Entry")
|
||||
if ((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
|
||||
if("Delete Entry")
|
||||
if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
|
||||
active2.fields[text("com_[]", href_list["del_c"])] = "<B>Deleted</B>"
|
||||
//RECORD CREATE
|
||||
if ("New Record (Security)")
|
||||
if ((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) )))
|
||||
if("New Record (Security)")
|
||||
if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) )))
|
||||
var/datum/data/record/R = new /datum/data/record()
|
||||
R.fields["name"] = active1.fields["name"]
|
||||
R.fields["id"] = active1.fields["id"]
|
||||
@@ -461,7 +478,7 @@ What a mess.*/
|
||||
active2 = R
|
||||
screen = 3
|
||||
|
||||
if ("New Record (General)")
|
||||
if("New Record (General)")
|
||||
//General Record
|
||||
var/datum/data/record/G = new /datum/data/record()
|
||||
G.fields["name"] = "New Record"
|
||||
@@ -469,6 +486,10 @@ What a mess.*/
|
||||
G.fields["rank"] = "Unassigned"
|
||||
G.fields["sex"] = "Male"
|
||||
G.fields["age"] = "Unknown"
|
||||
if(config.mutant_races)
|
||||
G.fields["species"] = "Human"
|
||||
G.fields["photo_front"] = new /icon()
|
||||
G.fields["photo_side"] = new /icon()
|
||||
G.fields["fingerprint"] = "?????"
|
||||
G.fields["p_stat"] = "Active"
|
||||
G.fields["m_stat"] = "Stable"
|
||||
@@ -507,15 +528,15 @@ What a mess.*/
|
||||
|
||||
|
||||
//FIELD FUNCTIONS
|
||||
if ("Edit Field")
|
||||
if("Edit Field")
|
||||
var/a1 = active1
|
||||
var/a2 = active2
|
||||
|
||||
switch(href_list["field"])
|
||||
if("name")
|
||||
if (istype(active1, /datum/data/record) || istype(active2, /datum/data/record))
|
||||
if(istype(active1, /datum/data/record) || istype(active2, /datum/data/record))
|
||||
var/t1 = stripped_input(usr, "Please input name:", "Secure. records", active1.fields["name"], null)
|
||||
if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, null, a1))
|
||||
return
|
||||
if(istype(active1, /datum/data/record))
|
||||
active1.fields["name"] = t1
|
||||
@@ -523,67 +544,93 @@ What a mess.*/
|
||||
active2.fields["name"] = t1
|
||||
if("id")
|
||||
if(istype(active2,/datum/data/record) || istype(active1,/datum/data/record))
|
||||
var/t1 = copytext(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text),1,MAX_MESSAGE_LEN)
|
||||
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
|
||||
var/t1 = stripped_input(usr, "Please input id:", "Secure. records", active1.fields["id"], null)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, null, a1))
|
||||
return
|
||||
if(istype(active1,/datum/data/record))
|
||||
active1.fields["id"] = t1
|
||||
if(istype(active2,/datum/data/record))
|
||||
active2.fields["id"] = t1
|
||||
if("fingerprint")
|
||||
if (istype(active1, /datum/data/record))
|
||||
var/t1 = copytext(sanitize(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text),1,MAX_MESSAGE_LEN)
|
||||
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = stripped_input(usr, "Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, null, a1))
|
||||
return
|
||||
active1.fields["fingerprint"] = t1
|
||||
if("sex")
|
||||
if (istype(active1, /datum/data/record))
|
||||
if (active1.fields["sex"] == "Male")
|
||||
if(istype(active1, /datum/data/record))
|
||||
if(active1.fields["sex"] == "Male")
|
||||
active1.fields["sex"] = "Female"
|
||||
else
|
||||
active1.fields["sex"] = "Male"
|
||||
if("age")
|
||||
if (istype(active1, /datum/data/record))
|
||||
var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
|
||||
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
|
||||
if(!canUseSecurityRecordsConsole(usr, null, null, a1) || !t1)
|
||||
return
|
||||
active1.fields["age"] = t1
|
||||
if("species")
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = input("Select a species", "Species Selection") as null|anything in roundstart_species
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, null, a1))
|
||||
return
|
||||
active1.fields["species"] = t1
|
||||
if("show_photo_front")
|
||||
if(active1.fields["photo_front"])
|
||||
if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P = active1.fields["photo_front"]
|
||||
P.show(usr)
|
||||
if("upd_photo_front")
|
||||
var/icon/photo = get_photo(usr)
|
||||
if(photo)
|
||||
qdel(active1.fields["photo_front"])
|
||||
active1.fields["photo_front"] = photo
|
||||
if("show_photo_side")
|
||||
if(active1.fields["photo_side"])
|
||||
if(istype(active1.fields["photo_side"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P = active1.fields["photo_side"]
|
||||
P.show(usr)
|
||||
if("upd_photo_side")
|
||||
var/icon/photo = get_photo(usr)
|
||||
if(photo)
|
||||
qdel(active1.fields["photo_side"])
|
||||
active1.fields["photo_side"] = photo
|
||||
if("mi_crim_add")
|
||||
if (istype(active1, /datum/data/record))
|
||||
var/t1 = copytext(sanitize(input("Please input minor crime names:", "Secure. records", "", null) as text),1,MAX_MESSAGE_LEN)
|
||||
var/t2 = copytext(sanitize(input("Please input minor crime details:", "Secure. records", "", null) as message),1,MAX_MESSAGE_LEN)
|
||||
if ((!( t1 ) || !( t2 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = stripped_input(usr, "Please input minor crime names:", "Secure. records", "", null)
|
||||
var/t2 = stripped_multiline_input(usr, "Please input minor crime details:", "Secure. records", "", null)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, t2, null, a2))
|
||||
return
|
||||
var/crime = data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text())
|
||||
data_core.addMinorCrime(active1.fields["id"], crime)
|
||||
if("mi_crim_delete")
|
||||
if (istype(active1, /datum/data/record))
|
||||
if (href_list["cdataid"])
|
||||
if ((!( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||
if(istype(active1, /datum/data/record))
|
||||
if(href_list["cdataid"])
|
||||
if(!canUseSecurityRecordsConsole(usr, null, null, a2))
|
||||
return
|
||||
data_core.removeMinorCrime(active1.fields["id"], href_list["cdataid"])
|
||||
if("ma_crim_add")
|
||||
if (istype(active1, /datum/data/record))
|
||||
var/t1 = copytext(sanitize(input("Please input major crime names:", "Secure. records", "", null) as text),1,MAX_MESSAGE_LEN)
|
||||
var/t2 = copytext(sanitize(input("Please input major crime details:", "Secure. records", "", null) as message),1,MAX_MESSAGE_LEN)
|
||||
if ((!( t1 ) || !( t2 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = stripped_input(usr, "Please input major crime names:", "Secure. records", "", null)
|
||||
var/t2 = stripped_multiline_input(usr, "Please input major crime details:", "Secure. records", "", null)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, t2, a2))
|
||||
return
|
||||
var/crime = data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text())
|
||||
data_core.addMajorCrime(active1.fields["id"], crime)
|
||||
if("ma_crim_delete")
|
||||
if (istype(active1, /datum/data/record))
|
||||
if (href_list["cdataid"])
|
||||
if ((!( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||
if(istype(active1, /datum/data/record))
|
||||
if(href_list["cdataid"])
|
||||
if(!canUseSecurityRecordsConsole(usr, null, null, a2))
|
||||
return
|
||||
data_core.removeMajorCrime(active1.fields["id"], href_list["cdataid"])
|
||||
if("notes")
|
||||
if (istype(active2, /datum/data/record))
|
||||
var/t1 = copytext(sanitize(input("Please summarize notes:", "Secure. records", active2.fields["notes"], null) as message),1,MAX_MESSAGE_LEN)
|
||||
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||
if(istype(active2, /datum/data/record))
|
||||
var/t1 = stripped_input(usr, "Please summarize notes:", "Secure. records", active2.fields["notes"], null)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
active2.fields["notes"] = t1
|
||||
if("criminal")
|
||||
if (istype(active2, /datum/data/record))
|
||||
if(istype(active2, /datum/data/record))
|
||||
temp = "<h5>Criminal Status:</h5>"
|
||||
temp += "<ul>"
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=none'>None</a></li>"
|
||||
@@ -595,7 +642,7 @@ What a mess.*/
|
||||
if("rank")
|
||||
var/list/L = list( "Head of Personnel", "Captain", "AI" )
|
||||
//This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
|
||||
if ((istype(active1, /datum/data/record) && L.Find(rank)))
|
||||
if((istype(active1, /datum/data/record) && L.Find(rank)))
|
||||
temp = "<h5>Rank:</h5>"
|
||||
temp += "<ul>"
|
||||
for(var/rank in get_all_jobs())
|
||||
@@ -607,14 +654,14 @@ What a mess.*/
|
||||
else//To properly clear as per clear screen.
|
||||
temp=null
|
||||
switch(href_list["choice"])
|
||||
if ("Change Rank")
|
||||
if (active1)
|
||||
if("Change Rank")
|
||||
if(active1)
|
||||
active1.fields["rank"] = href_list["rank"]
|
||||
if(href_list["rank"] in get_all_jobs())
|
||||
active1.fields["real_rank"] = href_list["real_rank"]
|
||||
|
||||
if ("Change Criminal Status")
|
||||
if (active2)
|
||||
if("Change Criminal Status")
|
||||
if(active2)
|
||||
var/old_field = active2.fields["criminal"]
|
||||
switch(href_list["criminal2"])
|
||||
if("none")
|
||||
@@ -630,24 +677,24 @@ What a mess.*/
|
||||
investigate_log("[active1.fields["name"]] has been set from [old_field] to [active2.fields["criminal"]] by [usr.name] ([usr.key]).", "records")
|
||||
for(var/mob/living/carbon/human/H in mob_list) //thanks for forcing me to do this, whoever wrote this shitty records system
|
||||
H.sec_hud_set_security_status()
|
||||
if ("Delete Record (Security) Execute")
|
||||
if("Delete Record (Security) Execute")
|
||||
investigate_log("[usr.name] ([usr.key]) has deleted the security records for [active1.fields["name"]].", "records")
|
||||
if (active2)
|
||||
if(active2)
|
||||
data_core.security -= active2
|
||||
del(active2)
|
||||
|
||||
if ("Delete Record (ALL) Execute")
|
||||
if (active1)
|
||||
if("Delete Record (ALL) Execute")
|
||||
if(active1)
|
||||
investigate_log("[usr.name] ([usr.key]) has deleted all records for [active1.fields["name"]].", "records")
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
|
||||
if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
|
||||
data_core.medical -= R
|
||||
del(R)
|
||||
break
|
||||
data_core.general -= active1
|
||||
del(active1)
|
||||
|
||||
if (active2)
|
||||
if(active2)
|
||||
data_core.security -= active2
|
||||
del(active2)
|
||||
else
|
||||
@@ -657,6 +704,18 @@ What a mess.*/
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/secure_data/proc/get_photo(var/mob/user)
|
||||
var/obj/item/weapon/photo/P = null
|
||||
if(istype(user, /mob/living/silicon))
|
||||
var/mob/living/silicon/tempAI = user
|
||||
var/datum/picture/selection = tempAI.GetPhoto()
|
||||
if(selection)
|
||||
P = new()
|
||||
P.photocreate(selection.fields["icon"], selection.fields["img"], selection.fields["desc"])
|
||||
else if(istype(user.get_active_hand(), /obj/item/weapon/photo))
|
||||
P = user.get_active_hand()
|
||||
return P
|
||||
|
||||
/obj/machinery/computer/secure_data/emp_act(severity)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
..(severity)
|
||||
@@ -664,11 +723,11 @@ What a mess.*/
|
||||
|
||||
for(var/datum/data/record/R in data_core.security)
|
||||
if(prob(10/severity))
|
||||
switch(rand(1,6))
|
||||
switch(rand(1,8))
|
||||
if(1)
|
||||
R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]"
|
||||
if(2)
|
||||
R.fields["sex"] = pick("Male", "Female")
|
||||
R.fields["sex"] = pick("Male", "Female")
|
||||
if(3)
|
||||
R.fields["age"] = rand(5, 85)
|
||||
if(4)
|
||||
@@ -677,6 +736,12 @@ What a mess.*/
|
||||
R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit")
|
||||
if(6)
|
||||
R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable")
|
||||
if(7)
|
||||
R.fields["species"] = pick(roundstart_species)
|
||||
if(8)
|
||||
var/datum/data/record/G = pick(data_core.general)
|
||||
R.fields["photo_front"] = G.fields["photo_front"]
|
||||
R.fields["photo_side"] = G.fields["photo_side"]
|
||||
continue
|
||||
|
||||
else if(prob(1))
|
||||
@@ -685,6 +750,17 @@ What a mess.*/
|
||||
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 1, message2 = 1, record1, record2)
|
||||
if(user)
|
||||
if(trim(message1))
|
||||
if(trim(message2))
|
||||
if(authenticated)
|
||||
if(user.canUseTopic(src))
|
||||
if(!record1 || record1 == active1)
|
||||
if(!record2 || record2 == active2)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/computer/secure_data/detective_computer
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "messyfiles"
|
||||
|
||||
@@ -260,21 +260,37 @@
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
|
||||
if(!user.stat && user != src) //|| !user.canmove || user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
|
||||
var/criminal = "None"
|
||||
|
||||
var/perpname = get_face_name(get_id_name(""))
|
||||
if(perpname)
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud))
|
||||
var/perpname = get_face_name(get_id_name(""))
|
||||
if(perpname)
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.general)
|
||||
if(R)
|
||||
msg += "<span class = 'deptradio'>Rank:</span> [R.fields["rank"]]<br>"
|
||||
msg += "<a href='?src=\ref[src];hud=1;photo_front=1'>\[Front photo\]</a> "
|
||||
msg += "<a href='?src=\ref[src];hud=1;photo_side=1'>\[Side photo\]</a><br>"
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/health))
|
||||
if(R)
|
||||
criminal = R.fields["criminal"]
|
||||
var/health = R.fields["p_stat"]
|
||||
msg += "<a href='?src=\ref[src];hud=m;p_stat=1'>\[[health]\]</a>"
|
||||
health = R.fields["m_stat"]
|
||||
msg += "<a href='?src=\ref[src];hud=m;m_stat=1'>\[[health]\]</a><br>"
|
||||
R = find_record("name", perpname, data_core.medical)
|
||||
if(R)
|
||||
msg += "<a href='?src=\ref[src];hud=m;evaluation=1'>\[Medical evaluation\]</a><br>"
|
||||
|
||||
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];criminal=1;status=1'>\[[criminal]\]</a>\n"
|
||||
msg += "<span class = 'deptradio'>Security record:</span> <a href='?src=\ref[src];criminal=1;view=1'>\[View\]</a> "
|
||||
msg += "<a href='?src=\ref[src];criminal=1;add_crime=1'>\[Add crime\]</a> "
|
||||
msg += "<a href='?src=\ref[src];criminal=1;view_comment=1'>\[View comment log\]</a> "
|
||||
msg += "<a href='?src=\ref[src];criminal=1;add_comment=1'>\[Add comment\]</a>\n"
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
if(!user.stat && user != src) //|| !user.canmove || user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
|
||||
var/criminal = "None"
|
||||
|
||||
R = find_record("name", perpname, data_core.security)
|
||||
if(R)
|
||||
criminal = R.fields["criminal"]
|
||||
|
||||
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];hud=s;status=1'>\[[criminal]\]</a>\n"
|
||||
msg += "<span class = 'deptradio'>Security record:</span> <a href='?src=\ref[src];hud=s;view=1'>\[View\]</a> "
|
||||
msg += "<a href='?src=\ref[src];hud=s;add_crime=1'>\[Add crime\]</a> "
|
||||
msg += "<a href='?src=\ref[src];hud=s;view_comment=1'>\[View comment log\]</a> "
|
||||
msg += "<a href='?src=\ref[src];hud=s;add_comment=1'>\[Add comment\]</a>\n"
|
||||
|
||||
msg += "*---------*</span>"
|
||||
|
||||
|
||||
@@ -249,7 +249,6 @@
|
||||
siemens_coeff = G.siemens_coefficient
|
||||
return ..(shock_damage,source,siemens_coeff)
|
||||
|
||||
|
||||
/mob/living/carbon/human/Topic(href, href_list)
|
||||
if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
|
||||
if(href_list["item"])
|
||||
@@ -295,113 +294,194 @@
|
||||
..()
|
||||
|
||||
|
||||
if(href_list["criminal"])
|
||||
///////HUDs///////
|
||||
if(href_list["hud"])
|
||||
if(istype(usr, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
if(usr.stat || usr == src) //|| !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
|
||||
// Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access
|
||||
var/allowed_access = null
|
||||
var/obj/item/clothing/glasses/G = H.glasses
|
||||
if (!G.emagged)
|
||||
if(H.wear_id)
|
||||
var/list/access = H.wear_id.GetAccess()
|
||||
if(access_sec_doors in access)
|
||||
allowed_access = H.get_authentification_name()
|
||||
else
|
||||
allowed_access = "@%&ERROR_%$*"
|
||||
|
||||
|
||||
if(!allowed_access)
|
||||
H << "<span class='warning'>ERROR: Invalid Access</span>"
|
||||
return
|
||||
|
||||
var/perpname = get_face_name(get_id_name(""))
|
||||
if(perpname)
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
var/perpname = get_face_name(get_id_name(""))
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud))
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.general)
|
||||
if(href_list["photo_front"] || href_list["photo_side"])
|
||||
if(R)
|
||||
if(href_list["status"])
|
||||
var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
|
||||
if(!H.canUseHUD()) return
|
||||
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud)) return
|
||||
var/obj/item/weapon/photo/P = null
|
||||
if(href_list["photo_front"])
|
||||
P = R.fields["photo_front"]
|
||||
else if(href_list["photo_side"])
|
||||
P = R.fields["photo_side"]
|
||||
if(P)
|
||||
P.show(H)
|
||||
|
||||
if(href_list["hud"] == "m")
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/health))
|
||||
if(href_list["p_stat"])
|
||||
var/health = input(usr, "Specify a new physical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("Active", "Physically Unfit", "*Unconscious*", "*Deceased*", "Cancel")
|
||||
if(R)
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
if(!H.canUseHUD()) return
|
||||
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health)) return
|
||||
if(health && health != "Cancel")
|
||||
R.fields["p_stat"] = health
|
||||
return
|
||||
if(href_list["m_stat"])
|
||||
var/health = input(usr, "Specify a new mental status for this person.", "Medical HUD", R.fields["m_stat"]) in list("Stable", "*Watch*", "*Unstable*", "*Insane*", "Cancel")
|
||||
if(R)
|
||||
if(!H.canUseHUD()) return
|
||||
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health)) return
|
||||
if(health && health != "Cancel")
|
||||
R.fields["m_stat"] = health
|
||||
return
|
||||
if(href_list["evaluation"])
|
||||
if(!getBruteLoss() && !getFireLoss() && !getOxyLoss() && getToxLoss() < 20)
|
||||
usr << "<span class='notice'>No external injuries detected.</span><br>"
|
||||
return
|
||||
var/span = "notice"
|
||||
var/status = ""
|
||||
if(getBruteLoss())
|
||||
usr << "<b>Physical trauma analysis:</b>"
|
||||
for(var/obj/item/organ/limb/org in organs)
|
||||
var/brutedamage = org.brute_dam
|
||||
if(brutedamage > 0)
|
||||
status = "received minor physical injuries."
|
||||
span = "notice"
|
||||
if(brutedamage > 20)
|
||||
status = "been seriously damaged."
|
||||
span = "danger"
|
||||
if(brutedamage > 40)
|
||||
status = "sustained major trauma!"
|
||||
span = "userdanger"
|
||||
if(brutedamage)
|
||||
usr << "<span class='[span]'>The [org.getDisplayName()] appears to have [status]</span>"
|
||||
if(getFireLoss())
|
||||
usr << "<b>Analysis of skin burns:</b>"
|
||||
for(var/obj/item/organ/limb/org in organs)
|
||||
var/burndamage = org.burn_dam
|
||||
if(burndamage > 0)
|
||||
status = "signs of minor burns."
|
||||
span = "notice"
|
||||
if(burndamage > 20)
|
||||
status = "serious burns."
|
||||
span = "danger"
|
||||
if(burndamage > 40)
|
||||
status = "major burns!"
|
||||
span = "userdanger"
|
||||
if(burndamage)
|
||||
usr << "<span class='[span]'>The [org.getDisplayName()] appears to have [status]</span>"
|
||||
if(getOxyLoss())
|
||||
usr << "<span class='danger'>Patient has signs of suffocation, emergency treatment may be required!</span>"
|
||||
if(getToxLoss() > 20)
|
||||
usr << "<span class='danger'>Gathered data is inconsistent with the analysis, possible cause: poisoning.</span>"
|
||||
|
||||
if(href_list["hud"] == "s")
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
if(usr.stat || usr == src) //|| !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
|
||||
// Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access
|
||||
var/allowed_access = null
|
||||
var/obj/item/clothing/glasses/G = H.glasses
|
||||
if (!G.emagged)
|
||||
if(H.wear_id)
|
||||
var/list/access = H.wear_id.GetAccess()
|
||||
if(access_sec_doors in access)
|
||||
allowed_access = H.get_authentification_name()
|
||||
else
|
||||
allowed_access = "@%&ERROR_%$*"
|
||||
|
||||
|
||||
if(!allowed_access)
|
||||
H << "<span class='warning'>ERROR: Invalid Access</span>"
|
||||
return
|
||||
|
||||
if(perpname)
|
||||
R = find_record("name", perpname, data_core.security)
|
||||
if(R)
|
||||
if(href_list["status"])
|
||||
var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
|
||||
if(setcriminal != "Cancel")
|
||||
investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records")
|
||||
R.fields["criminal"] = setcriminal
|
||||
sec_hud_set_security_status()
|
||||
return
|
||||
|
||||
if(href_list["view"])
|
||||
if(R)
|
||||
if(usr.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
return
|
||||
usr << "<b>Name:</b> [R.fields["name"]] <b>Criminal Status:</b> [R.fields["criminal"]]"
|
||||
usr << "<b>Minor Crimes:</b>"
|
||||
for(var/datum/data/crime/c in R.fields["mi_crim"])
|
||||
usr << "<b>Crime:</b> [c.crimeName]"
|
||||
usr << "<b>Details:</b> [c.crimeDetails]"
|
||||
usr << "Added by [c.author] at [c.time]"
|
||||
usr << "----------"
|
||||
usr << "<b>Major Crimes:</b>"
|
||||
for(var/datum/data/crime/c in R.fields["ma_crim"])
|
||||
usr << "<b>Crime:</b> [c.crimeName]"
|
||||
usr << "<b>Details:</b> [c.crimeDetails]"
|
||||
usr << "Added by [c.author] at [c.time]"
|
||||
usr << "----------"
|
||||
usr << "<b>Notes:</b> [R.fields["notes"]]"
|
||||
return
|
||||
|
||||
if(href_list["add_crime"])
|
||||
switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel"))
|
||||
if("Minor Crime")
|
||||
if(R)
|
||||
var/t1 = copytext(sanitize(input("Please input minor crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
|
||||
var/t2 = copytext(sanitize(input("Please input minor crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
|
||||
if(R)
|
||||
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
return
|
||||
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
|
||||
data_core.addMinorCrime(R.fields["id"], crime)
|
||||
usr << "<span class='notice'>Successfully added a minor crime.</span>"
|
||||
return
|
||||
if("Major Crime")
|
||||
if(R)
|
||||
var/t1 = copytext(sanitize(input("Please input major crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
|
||||
var/t2 = copytext(sanitize(input("Please input major crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
|
||||
if(R)
|
||||
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
return
|
||||
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
|
||||
data_core.addMajorCrime(R.fields["id"], crime)
|
||||
usr << "<span class='notice'>Successfully added a major crime.</span>"
|
||||
return
|
||||
else return
|
||||
|
||||
if(href_list["view_comment"])
|
||||
if(R)
|
||||
if(H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
if(H.canUseHUD())
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records")
|
||||
R.fields["criminal"] = setcriminal
|
||||
sec_hud_set_security_status()
|
||||
return
|
||||
usr << "<b>Comments/Log:</b>"
|
||||
var/counter = 1
|
||||
while(R.fields[text("com_[]", counter)])
|
||||
usr << R.fields[text("com_[]", counter)]
|
||||
usr << "----------"
|
||||
counter++
|
||||
return
|
||||
|
||||
if(href_list["add_comment"])
|
||||
if(R)
|
||||
var/t1 = copytext(sanitize(input("Add Comment:", "Secure. records", null, null) as message),1,MAX_MESSAGE_LEN)
|
||||
if(R)
|
||||
if (!t1 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
|
||||
if(href_list["view"])
|
||||
if(R)
|
||||
if(!H.canUseHUD()) return
|
||||
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
|
||||
usr << "<b>Name:</b> [R.fields["name"]] <b>Criminal Status:</b> [R.fields["criminal"]]"
|
||||
usr << "<b>Minor Crimes:</b>"
|
||||
for(var/datum/data/crime/c in R.fields["mi_crim"])
|
||||
usr << "<b>Crime:</b> [c.crimeName]"
|
||||
usr << "<b>Details:</b> [c.crimeDetails]"
|
||||
usr << "Added by [c.author] at [c.time]"
|
||||
usr << "----------"
|
||||
usr << "<b>Major Crimes:</b>"
|
||||
for(var/datum/data/crime/c in R.fields["ma_crim"])
|
||||
usr << "<b>Crime:</b> [c.crimeName]"
|
||||
usr << "<b>Details:</b> [c.crimeDetails]"
|
||||
usr << "Added by [c.author] at [c.time]"
|
||||
usr << "----------"
|
||||
usr << "<b>Notes:</b> [R.fields["notes"]]"
|
||||
return
|
||||
|
||||
if(href_list["add_crime"])
|
||||
switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel"))
|
||||
if("Minor Crime")
|
||||
if(R)
|
||||
var/t1 = stripped_input("Please input minor crime names:", "Security HUD", "", null)
|
||||
var/t2 = stripped_multiline_input("Please input minor crime details:", "Security HUD", "", null)
|
||||
if(R)
|
||||
if (!t1 || !t2 || !allowed_access) return
|
||||
else if(!H.canUseHUD()) return
|
||||
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
|
||||
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
|
||||
data_core.addMinorCrime(R.fields["id"], crime)
|
||||
usr << "<span class='notice'>Successfully added a minor crime.</span>"
|
||||
return
|
||||
if("Major Crime")
|
||||
if(R)
|
||||
var/t1 = stripped_input("Please input major crime names:", "Security HUD", "", null)
|
||||
var/t2 = stripped_multiline_input("Please input major crime details:", "Security HUD", "", null)
|
||||
if(R)
|
||||
if (!t1 || !t2 || !allowed_access) return
|
||||
else if (!H.canUseHUD()) return
|
||||
else if (!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
|
||||
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
|
||||
data_core.addMajorCrime(R.fields["id"], crime)
|
||||
usr << "<span class='notice'>Successfully added a major crime.</span>"
|
||||
return
|
||||
|
||||
if(href_list["view_comment"])
|
||||
if(R)
|
||||
if(!H.canUseHUD()) return
|
||||
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
|
||||
usr << "<b>Comments/Log:</b>"
|
||||
var/counter = 1
|
||||
while(R.fields[text("com_[]", counter)])
|
||||
usr << R.fields[text("com_[]", counter)]
|
||||
usr << "----------"
|
||||
counter++
|
||||
return
|
||||
var/counter = 1
|
||||
while(R.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []<BR>[]", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
|
||||
usr << "<span class='notice'>Successfully added comment.</span>"
|
||||
return
|
||||
usr << "<span class='warning'>Unable to locate a data core entry for this person.</span>"
|
||||
|
||||
if(href_list["add_comment"])
|
||||
if(R)
|
||||
var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null)
|
||||
if(R)
|
||||
if (!t1 || !allowed_access) return
|
||||
else if(!H.canUseHUD()) return
|
||||
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
|
||||
var/counter = 1
|
||||
while(R.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []<BR>[]", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
|
||||
usr << "<span class='notice'>Successfully added comment.</span>"
|
||||
return
|
||||
usr << "<span class='warning'>Unable to locate a data core entry for this person.</span>"
|
||||
|
||||
/mob/living/carbon/human/proc/canUseHUD()
|
||||
return !(src.stat || src.weakened || src.stunned || src.restrained())
|
||||
|
||||
/mob/living/carbon/human/proc/play_xylophone()
|
||||
if(!src.xylophone)
|
||||
|
||||
@@ -34,7 +34,6 @@ var/list/ai_list = list()
|
||||
radiomod = ";" //AIs will, by default, state their laws on the internal radio.
|
||||
var/obj/item/device/pda/ai/aiPDA = null
|
||||
var/obj/item/device/multitool/aiMulti = null
|
||||
var/obj/item/device/camera/siliconcam/aicamera = null
|
||||
var/obj/machinery/bot/Bot
|
||||
|
||||
//MALFUNCTION
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
|
||||
var/obj/item/weapon/tank/internal = null //Hatred. Used if a borg has a jetpack.
|
||||
var/obj/item/robot_parts/robot_suit/robot_suit = null //Used for deconstruction to remember what the borg was constructed out of..
|
||||
var/obj/item/device/camera/siliconcam/aicamera = null //photography
|
||||
var/toner = 0
|
||||
var/tonermax = 40
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
var/list/alarms_to_clear = list()
|
||||
var/designation = ""
|
||||
var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all.
|
||||
var/obj/item/device/camera/siliconcam/aicamera = null //photography
|
||||
|
||||
var/obj/item/device/radio/borg/radio = null //AIs dont use this but this is at the silicon level to advoid copypasta in say()
|
||||
|
||||
@@ -413,4 +414,8 @@
|
||||
return
|
||||
|
||||
/mob/living/silicon/setEarDamage()
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/silicon/proc/GetPhoto()
|
||||
if (aicamera)
|
||||
return aicamera.selectpicture(aicamera)
|
||||
@@ -332,22 +332,22 @@
|
||||
else
|
||||
injectaialbum(icon, img, desc, pixel_x, pixel_y, blueprintsinject)
|
||||
|
||||
|
||||
obj/item/device/camera/siliconcam/proc/viewpichelper(var/obj/item/device/camera/siliconcam/targetloc)
|
||||
obj/item/device/camera/siliconcam/proc/selectpicture(var/obj/item/device/camera/siliconcam/targetloc)
|
||||
var/list/nametemp = list()
|
||||
var/find
|
||||
var/datum/picture/selection
|
||||
if(targetloc.aipictures.len == 0)
|
||||
usr << "<span class='userdanger'>No images saved</span>"
|
||||
return
|
||||
for(var/datum/picture/t in targetloc.aipictures)
|
||||
nametemp += t.fields["name"]
|
||||
find = input("Select image (numbered in order taken)") in nametemp
|
||||
var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
|
||||
for(var/datum/picture/q in targetloc.aipictures)
|
||||
if(q.fields["name"] == find)
|
||||
selection = q
|
||||
break // just in case some AI decides to take 10 thousand pictures in a round
|
||||
return q
|
||||
|
||||
obj/item/device/camera/siliconcam/proc/viewpichelper(var/obj/item/device/camera/siliconcam/targetloc)
|
||||
var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
|
||||
var/datum/picture/selection = selectpicture(targetloc)
|
||||
P.photocreate(selection.fields["icon"], selection.fields["img"], selection.fields["desc"])
|
||||
P.pixel_x = selection.fields["pixel_x"]
|
||||
P.pixel_y = selection.fields["pixel_y"]
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@
|
||||
world.log << "Database connection established."
|
||||
|
||||
|
||||
data_core = new /obj/effect/datacore()
|
||||
data_core = new /datum/datacore()
|
||||
|
||||
|
||||
spawn(-1)
|
||||
|
||||
@@ -77,3 +77,4 @@ thurgatar = Game Master
|
||||
xerux = Game Master
|
||||
dannno = Game Master
|
||||
allura = Game Master
|
||||
lo6a4evskiy = Game Master
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscdel (general adding of nice things)
|
||||
# rscadd (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
# tgs (TG-ported fixes?)
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Lo6a4evskiy
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
|
||||
# Please surround your changes in single (') or double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "General record now contains a species field and a photo of the crewmember. Security record consoles allow you to update it with a photo taken in-game (with detective's camera, for example, or AI's)."
|
||||
- rscadd: "Expanded functionality of security HUDs to display rank and photos."
|
||||
- rscadd: "Medical HUDs allow user to change others' mental and physical status. Currently has no gameplay effect other than changing records."
|
||||
- rscadd: "Medical HUDs can perform an examination at the distance, similrarly to how attacking yourself with help intent works. Has limited ability to detect suffocation and toxin damage."
|
||||
Reference in New Issue
Block a user