/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