/obj/machinery/computer/secure_data name = "Security Records" icon_state = "datasec" req_access = list(access_security) var/obj/item/card/id/scan = null var/authenticated = null var/rank = null var/screen = null var/datum/data/record/active1 = null var/datum/data/record/active2 = null var/a_id = null var/temp = null var/printing = null var/can_change_id = 0 var/require_login = 1 desc = "A computer that allows an authorized user to set warrants, view fingerprints, and add notes to various crewmembers." /obj/machinery/computer/secure_data/detective_computer icon = 'icons/obj/computer.dmi' icon_state = "messyfiles" req_access = list(access_forensics_lockers) /obj/machinery/computer/secure_data/attackby(I as obj, user as mob) if(istype(I, /obj/item/screwdriver)) playsound(src.loc, "sound/items/Screwdriver.ogg", 50, 1) if(do_after(user, 20)) if (src.stat & BROKEN) boutput(user, "The broken glass falls out.") var/obj/computerframe/A = new /obj/computerframe( src.loc ) if(src.material) A.setMaterial(src.material) new /obj/item/raw_material/shard/glass( src.loc ) var/obj/item/circuitboard/secure_data/M = new /obj/item/circuitboard/secure_data( A ) for (var/obj/C in src) C.set_loc(src.loc) A.circuit = M A.state = 3 A.icon_state = "3" A.anchored = 1 qdel(src) else boutput(user, "You disconnect the monitor.") var/obj/computerframe/A = new /obj/computerframe( src.loc ) if(src.material) A.setMaterial(src.material) var/obj/item/circuitboard/secure_data/M = new /obj/item/circuitboard/secure_data( A ) for (var/obj/C in src) C.set_loc(src.loc) A.circuit = M A.state = 4 A.icon_state = "4" A.anchored = 1 qdel(src) else src.attack_hand(user) return /obj/machinery/computer/secure_data/attack_ai(mob/user as mob) return src.attack_hand(user) /obj/machinery/computer/secure_data/attack_hand(mob/user as mob) if(..()) return var/dat if (src.temp) dat = text("[]

Clear Screen", src.temp, src) else dat = text("Confirm Identity: []
", src, (src.scan ? text("[]", src.scan.name) : "----------")) if (src.authenticated) switch(src.screen) if(1.0) dat += text("Search Records

List Records

Search Fingerprints

New Record



Record Maintenance

{Log Out}

", src, src, src, src, src, src) if(2.0) dat += "Record List:
" for(var/datum/data/record/R in data_core.general) dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) //Foreach goto(136) dat += text("
Back", src) if(3.0) dat += text("Records Maintenance

Backup To Disk

Upload From disk

Delete All Records



Back", src, src, src, src) if(4.0) dat += "
Security Record

" if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) dat += text("Name: [] ID: []

Sex: []

Age: []

Rank: []

Fingerprint: []

DNA: []

Physical Status: []

Mental Status: []
", src, src.active1.fields["name"], src, src.active1.fields["id"], src, src.active1.fields["sex"], src, src.active1.fields["age"], src, src.active1.fields["rank"], src, src.active1.fields["fingerprint"], src.active1.fields["dna"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) else dat += "General Record Lost!
" if ((istype(src.active2, /datum/data/record) && data_core.security.Find(src.active2))) dat += text("

Security Data


Criminal Status: []



Minor Crimes: []

Details: []



Major Crimes: []

Details: []



Important Notes:

[]



Comments/Log

", src, src.active2.fields["criminal"], src, src.active2.fields["mi_crim"], src, src.active2.fields["mi_crim_d"], src, src.active2.fields["ma_crim"], src, src.active2.fields["ma_crim_d"], src, src.active2.fields["notes"]) var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) dat += text("[]
Delete Entry

", src.active2.fields[text("com_[]", counter)], src, counter) counter++ dat += text("Add Entry

", src) dat += text("Delete Record (Security Only)

", src) else dat += "Security Record Lost!
" dat += text("New Record

", src) dat += text("
Delete Record (ALL)


Print Record

Back
", src, src, src) else else dat += text("{Log In}", src) user << browse(text("Security Records[]", dat), "window=secure_rec") onclose(user, "secure_rec") return /obj/machinery/computer/secure_data/Topic(href, href_list) if(..()) return if (!( data_core.general.Find(src.active1) )) src.active1 = null if (!( data_core.security.Find(src.active2) )) src.active2 = null if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.machine = src if (href_list["temp"]) src.temp = null if (href_list["scan"]) if (src.scan) src.scan.set_loc(src.loc) src.scan = null else var/obj/item/I = usr.equipped() if (istype(I, /obj/item/card/id)) usr.drop_item() I.set_loc(src) src.scan = I else if (href_list["logout"] && require_login) src.authenticated = null src.screen = null src.active1 = null src.active2 = null else if (href_list["login"]) if (!require_login || (issilicon(usr) && !isghostdrone(usr))) src.active1 = null src.active2 = null src.authenticated = 1 src.rank = "AI" src.screen = 1 if (istype(src.scan, /obj/item/card/id)) src.active1 = null src.active2 = null if(check_access(src.scan)) src.authenticated = src.scan.registered src.rank = src.scan.assignment src.screen = 1 if (src.authenticated) if (href_list["list"]) src.screen = 2 src.active1 = null src.active2 = null else if (href_list["rec_m"]) src.screen = 3 src.active1 = null src.active2 = null else if (href_list["del_all"]) src.temp = text("Are you sure you wish to delete all records?

Yes

No
", src, src) else if (href_list["del_all2"]) for(var/datum/data/record/R in data_core.security) //R = null qdel(R) //Foreach goto(497) src.temp = "All records deleted." else if (href_list["main"]) src.screen = 1 src.active1 = null src.active2 = null else if (href_list["field"]) var/a1 = src.active1 var/a2 = src.active2 switch(href_list["field"]) if("name") //todo: sanitize these fucking inputs jesus christ if (istype(src.active1, /datum/data/record)) var/t1 = input("Please input name:", "Secure. records", src.active1.fields["name"], null) as text t1 = copytext(adminscrub(t1), 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["name"] = t1 if("id") if (istype(src.active2, /datum/data/record)) var/t1 = input("Please input id:", "Secure. records", src.active1.fields["id"], null) as text t1 = copytext(adminscrub(t1), 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["id"] = t1 if("fingerprint") if (istype(src.active1, /datum/data/record)) var/t1 = input("Please input fingerprint hash:", "Secure. records", src.active1.fields["fingerprint"], null) as text t1 = copytext(adminscrub(t1), 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 (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)) var/t1 = input("Please input age:", "Secure. records", src.active1.fields["age"], null) as num t1 = max(1, min(t1, 99)) 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_crim") if (istype(src.active2, /datum/data/record)) var/t1 = input("Please input minor disabilities list:", "Secure. records", src.active2.fields["mi_crim"], null) as text t1 = copytext(adminscrub(t1), 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_crim"] = t1 if("mi_crim_d") if (istype(src.active2, /datum/data/record)) var/t1 = input("Please summarize minor dis.:", "Secure. records", src.active2.fields["mi_crim_d"], null) as message t1 = copytext(adminscrub(t1), 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_crim_d"] = t1 if("ma_crim") if (istype(src.active2, /datum/data/record)) var/t1 = input("Please input major diabilities list:", "Secure. records", src.active2.fields["ma_crim"], null) as text t1 = copytext(adminscrub(t1), 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_crim"] = t1 if("ma_crim_d") if (istype(src.active2, /datum/data/record)) var/t1 = input("Please summarize major dis.:", "Secure. records", src.active2.fields["ma_crim_d"], null) as message t1 = copytext(adminscrub(t1), 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_crim_d"] = t1 if("notes") if (istype(src.active2, /datum/data/record)) var/t1 = input("Please summarize notes:", "Secure. records", src.active2.fields["notes"], null) as message t1 = copytext(adminscrub(t1), 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("criminal") if (istype(src.active2, /datum/data/record)) src.temp = text("Criminal Status:

None

*Arrest*

Incarcerated

Parolled

Released
", src, src, src, src, src) if("rank") var/list/L = list( "Head of Personnel", "Captain", "AI" ) if ((istype(src.active1, /datum/data/record) && L.Find(src.rank))) src.temp = text("Rank:

Assistants:

Assistant

Technicians:

Detective

Atmospheric Technician

Station Engineer

Researchers:

Geneticist

Scientist

Officers:

Medical Doctor

Security Officer

Higher Officers:

Head of Security

Head of Personnel

Captain
", src, src, src, src, src, src, src, src, src, src, src) else alert(usr, "You do not have the required rank to do this!") else else if (href_list["rank"]) if (src.active1) switch(href_list["rank"]) if("res_assist") src.active1.fields["rank"] = "Assistant" if("foren_tech") src.active1.fields["rank"] = "Detective" if("atmo_tech") src.active1.fields["rank"] = "Atmospheric Technician" if("engineer") src.active1.fields["rank"] = "Station Engineer" if("med_res") src.active1.fields["rank"] = "Geneticist" if("tox_res") src.active1.fields["rank"] = "Scientist" if("med_doc") src.active1.fields["rank"] = "Medical Doctor" if("secure_off") src.active1.fields["rank"] = "Security Officer" if("hoperson") src.active1.fields["rank"] = "Head of Security" if("hosecurity") src.active1.fields["rank"] = "Head of Personnel" if("captain") src.active1.fields["rank"] = "Captain" if("barman") src.active1.fields["rank"] = "Barman" if("chemist") src.active1.fields["rank"] = "Chemist" if("janitor") src.active1.fields["rank"] = "Janitor" if("clown") src.active1.fields["rank"] = "Clown" else if (href_list["criminal2"]) if (src.active2) switch(href_list["criminal2"]) if("none") src.active2.fields["criminal"] = "None" if("arrest") src.active2.fields["criminal"] = "*Arrest*" if (usr && src.active1.fields["name"]) logTheThing("station", usr, null, "[src.active1.fields["name"]] is set to arrest by [usr] (using the ID card of [src.authenticated]) [log_loc(src)]") if("incarcerated") src.active2.fields["criminal"] = "Incarcerated" if("parolled") src.active2.fields["criminal"] = "Parolled" if("released") src.active2.fields["criminal"] = "Released" else if (href_list["del_r"]) if (src.active2) src.temp = text("Are you sure you wish to delete the record (Security Portion Only)?

Yes

No
", src, src) else if (href_list["del_r2"]) if (src.active2) //src.active2 = null qdel(src.active2) else if (href_list["dela_r"]) if (src.active1) src.temp = text("Are you sure you wish to delete the record (ALL)?

Yes

No
", src, src) else if (href_list["dela_r2"]) for(var/datum/data/record/R in data_core.medical) if ((R.fields["name"] == src.active1.fields["name"] || R.fields["id"] == src.active1.fields["id"])) //R = null qdel(R) else if (src.active2) //src.active2 = null qdel(src.active2) if (src.active1) //src.active1 = null qdel(src.active1) else if (href_list["d_rec"]) var/datum/data/record/R = locate(href_list["d_rec"]) var/S = 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.security) if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) S = E else //Foreach continue //goto(2614) src.active1 = R src.active2 = S src.screen = 4 else if (href_list["new_r"]) var/datum/data/record/G = new /datum/data/record( ) G.fields["name"] = "New Record" G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) G.fields["rank"] = "Unassigned" G.fields["sex"] = "Male" G.fields["age"] = "Unknown" G.fields["fingerprint"] = "Unknown" G.fields["p_stat"] = "Active" G.fields["m_stat"] = "Stable" data_core.general += G src.active1 = G src.active2 = null 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"] R.name = text("Security Record #[]", R.fields["id"]) R.fields["criminal"] = "None" R.fields["mi_crim"] = "None" R.fields["mi_crim_d"] = "No minor crime convictions." R.fields["ma_crim"] = "None" R.fields["ma_crim_d"] = "No major crime convictions." R.fields["notes"] = "No notes." data_core.security += R src.active2 = R src.screen = 4 else if (href_list["add_c"]) if (!( istype(src.active2, /datum/data/record) )) return var/a2 = src.active2 var/t1 = input("Add Comment:", "Secure. records", null, null) as message t1 = copytext(adminscrub(t1), 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 var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) 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) 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" else if (href_list["search_f"]) var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text t1 = copytext(adminscrub(t1), 1, MAX_MESSAGE_LEN) if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon)))) return src.active1 = null src.active2 = null t1 = lowertext(t1) for(var/datum/data/record/R in data_core.general) if (lowertext(R.fields["fingerprint"]) == t1) src.active1 = R else //Foreach continue //goto(3414) if (!( src.active1 )) src.temp = text("Could not locate record [].", t1) else for(var/datum/data/record/E in data_core.security) if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) src.active2 = E else //Foreach continue //goto(3502) src.screen = 4 else if (href_list["search"]) var/t1 = input("Search String: (Name, DNA, or ID)", "Secure. records", null, null) as text t1 = copytext(adminscrub(t1), 1, MAX_MESSAGE_LEN) if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || !in_range(src, usr))) return src.active1 = null src.active2 = null t1 = lowertext(t1) for(var/datum/data/record/R in data_core.general) if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["dna"]) || t1 == lowertext(R.fields["id"]))) src.active1 = R else //Foreach continue //goto(3708) if (!( src.active1 )) src.temp = text("Could not locate record [].", t1) else for(var/datum/data/record/E in data_core.security) if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) src.active2 = E else //Foreach continue //goto(3813) src.screen = 4 else if (href_list["print_p"]) if (!( src.printing )) src.printing = 1 sleep(50) var/obj/item/paper/P = new /obj/item/paper( src.loc ) P.info = "
Security Record

" if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) P.info += text("Name: [] ID: []

Sex: []

Age: []

Fingerprint: []

Physical Status: []

Mental 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.security.Find(src.active2))) P.info += text("

Security Data


Criminal Status: []



Minor Crimes: []

Details: []



Major Crimes: []

Details: []



Important Notes:

 []



Comments/Log

", src.active2.fields["criminal"], src.active2.fields["mi_crim"], src.active2.fields["mi_crim_d"], src.active2.fields["ma_crim"], src.active2.fields["ma_crim_d"], src.active2.fields["notes"]) var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) P.info += text("[]
", src.active2.fields[text("com_[]", counter)]) counter++ else P.info += "Security Record Lost!
" P.info += "" P.name = "paper- 'Security Record'" src.printing = null src.add_fingerprint(usr) src.updateUsrDialog() return