/obj/machinery/computer/card name = "Identification Computer" icon_state = "id" var/obj/item/card/id/scan = null var/obj/item/card/id/modify = null var/authenticated = 0.0 var/mode = 0.0 var/printing = null var/list/scan_access = null req_access = list(access_change_ids) desc = "A computer that allows an authorized user to change the identification of other ID cards." /obj/machinery/computer/card/attack_ai(var/mob/user as mob) return src.attack_hand(user) /obj/machinery/computer/card/attack_hand(var/mob/user as mob) if(..()) return user.machine = src var/dat if (!( ticker )) return if (src.mode) // accessing crew manifest var/crew = "" for(var/datum/data/record/t in data_core.general) crew += "[t.fields["name"]] - [t.fields["rank"]]
" dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print

Access ID modification console.
" else var/header = "Identification Card Modifier
Please insert the cards into the slots
" var/target_name var/target_owner var/target_rank if(src.modify) target_name = src.modify.name else target_name = "--------" if(src.modify && src.modify.registered) target_owner = src.modify.registered else target_owner = "--------" if(src.modify && src.modify.assignment) target_rank = src.modify.assignment else target_rank = "Unassigned" header += "Target: [target_name]
" var/scan_name if(src.scan) scan_name = src.scan.name else scan_name = "--------" header += "Confirm Identity: [scan_name]
" header += "
" var/body //When both IDs are inserted if (src.authenticated && src.modify) body = "Registered: [target_owner]
" body += "Assignment: [replacetext(target_rank, " ", " ")]" //Jobs organised into sections var/list/civilianjobs = list("Staff Assistant", "Barman", "Chef", "Botanist", "Chaplain", "Janitor", "Clown") var/list/maintainencejobs = list("Engineer", "Mechanic", "Miner", "Quartermaster") var/list/researchjobs = list("Scientist", "Medical Doctor", "Geneticist", "Roboticist") var/list/securityjobs = list("Security Officer", "Detective") var/list/commandjobs = list("Head of Personnel", "Chief Engineer", "Research Director", "Medical Director", "Captain") body += "

Jobs" body += "
Civilian:" for(var/job in civilianjobs) body += " [replacetext(job, " ", " ")]" //make sure there isn't a line break in the middle of a job body += "
Supply and Maintainence:" for(var/job in maintainencejobs) body += " [replacetext(job, " ", " ")]" body += "
Research and Medical:" for(var/job in researchjobs) body += " [replacetext(job, " ", " ")]" body += "
Security:" for(var/job in securityjobs) body += " [replacetext(job, " ", " ")]" body += "
Command:" for(var/job in commandjobs) body += " [replacetext(job, " ", " ")]" //Change access to individual areas body += "

Access" //Organised into sections var/civilian_access = "
Staff:" var/list/civilian_access_list = list(6, 12, 22, 23, 25, 26, 27, 28, 35) var/engineering_access = "
Engineering:" /* Conor12: I removed some unused accesses as the page is large enough, add these if they ever get used: 3 (access_armory). Replaced by HoS-exclusive access_maxsec. 21 (access_all_personal_lockers). Current personal lockers don't have a master key. 36 (access_mail) 42 (access_engineering_eva)*/ var/list/engineering_access_list = list(13, 32, 40, 41, 43, 44, 45, 46, 47, 48) var/supply_access = "
Supply:" var/list/supply_access_list = list(30, 31, 47, 50, 51) var/research_access = "
Science and Medical:" var/list/research_access_list = list(5, 7, 8, 9, 10, 24, 29, 33) var/security_access = "
Security:" var/list/security_access_list = list(1, 2, 4, 37, 38, 39) var/command_access = "
Command:" var/list/command_access_list = list(11, 14, 15, 16, 17, 18, 19, 20, 49, 53, 55, 56) for(var/A in access_name_lookup) if(access_name_lookup[A] in src.modify.access) //Click these to remove access if (access_name_lookup[A] in civilian_access_list) civilian_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in engineering_access_list) engineering_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in supply_access_list) supply_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in research_access_list) research_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in security_access_list) security_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in command_access_list) command_access += " [replacetext(A, " ", " ")]" else//Click these to add access if (access_name_lookup[A] in civilian_access_list) civilian_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in engineering_access_list) engineering_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in supply_access_list) supply_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in research_access_list) research_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in security_access_list) security_access += " [replacetext(A, " ", " ")]" if (access_name_lookup[A] in command_access_list) command_access += " [replacetext(A, " ", " ")]" body+= "[civilian_access]
[engineering_access]
[supply_access]
[research_access]
[security_access]
[command_access]" body += "

Customise ID
" body += "Plain " body += "Civilian " body += "Engineering " body += "Research " body += "Security " body += "Command" user.unlock_medal("Identity Theft", 1) else body = "{Log in}" dat = "[header][body]
Access Crew Manifest
" user << browse(dat, "window=id_com;size=725x500") onclose(user, "id_com") return /obj/machinery/computer/card/Topic(href, href_list) if(..()) return usr.machine = src if (href_list["modify"]) if (src.modify) src.modify.update_name() src.modify.set_loc(src.loc) src.modify = null else var/obj/item/I = usr.equipped() if (istype(I, /obj/item/card/id)) usr.drop_item() I.set_loc(src) src.modify = I src.authenticated = 0 src.scan_access = 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 src.authenticated = 0 src.scan_access = null if (href_list["auth"]) if ((!( src.authenticated ) && (src.scan || (issilicon(usr) && !isghostdrone(usr))) && (src.modify || src.mode))) if (src.check_access(src.scan)) src.authenticated = 1 src.scan_access = src.scan.access else if ((!( src.authenticated ) && (istype(usr, /mob/living/silicon))) && (!src.modify)) boutput(usr, "You can't modify an ID without an ID inserted to modify. Once one is in the modify slot on the computer, you can log in.") if(href_list["access"] && href_list["allowed"]) if(src.authenticated) var/access_type = text2num(href_list["access"]) var/access_allowed = text2num(href_list["allowed"]) if(access_type in get_all_accesses()) src.modify.access -= access_type if(access_allowed == 1) src.modify.access += access_type if (href_list["assign"]) if (src.authenticated && src.modify) var/t1 = href_list["assign"] if (t1 == "Custom Assignment") t1 = input(usr, "Enter a custom job assignment.", "Assignment") t1 = strip_html(t1, 100, 1) else src.modify.access = get_access(t1) src.modify.assignment = t1 if (href_list["reg"]) if (src.authenticated) var/t2 = src.modify var/t1 = input(usr, "What name?", "ID computer", null) t1 = strip_html(t1, 100, 1) if ((src.authenticated && src.modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(src.loc, /turf))) src.modify.registered = t1 if (href_list["mode"]) src.mode = text2num(href_list["mode"]) if (href_list["print"]) if (!( src.printing )) src.printing = 1 sleep(50) var/obj/item/paper/P = new /obj/item/paper( src.loc ) var/t1 = "Crew Manifest:
" for(var/datum/data/record/t in data_core.general) t1 += "[t.fields["name"]] - [t.fields["rank"]]
" P.info = t1 P.name = "paper- 'Crew Manifest'" src.printing = null if (href_list["mode"]) src.authenticated = 0 src.scan_access = null src.mode = text2num(href_list["mode"]) if (href_list["colour"]) if(src.modify && src.modify.icon_state != "gold" && src.modify.icon_state != "id_clown") var/newcolour = href_list["colour"] if (newcolour == "none") src.modify.icon_state = "id" if (newcolour == "blue") src.modify.icon_state = "id_civ" if (newcolour == "yellow") src.modify.icon_state = "id_eng" if (newcolour == "purple") src.modify.icon_state = "id_res" if (newcolour == "red") src.modify.icon_state = "id_sec" if (newcolour == "green") src.modify.icon_state = "id_com" if (src.modify) src.modify.name = "[src.modify.registered]'s ID Card ([src.modify.assignment])" src.updateUsrDialog() return /obj/machinery/computer/card/attackby(obj/item/I as obj, mob/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/card/M = new /obj/item/circuitboard/card( 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/card/M = new /obj/item/circuitboard/card( 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 if (istype(I, /obj/item/card/id)) if (!src.scan) boutput(user, "You insert [I] into the authentication card slot.") user.drop_item() I.set_loc(src) src.scan = I else if (!src.modify) boutput(user, "You insert [I] into the target card slot.") user.drop_item() I.set_loc(src) src.modify = I src.updateUsrDialog() else src.attack_hand(user) return