/obj/machinery/computer3/card default_prog = /datum/file/program/card_comp spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot/dual) /obj/machinery/computer3/card/hop default_prog = /datum/file/program/card_comp spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot/dual) spawn_files = list(/datum/file/program/arcade, /datum/file/program/security, /datum/file/camnet_key/mining, /datum/file/camnet_key/entertainment,/datum/file/camnet_key/prison) /obj/machinery/computer3/card/centcom default_prog = /datum/file/program/card_comp/centcom /datum/file/program/card_comp name = "identification card console" desc = "Used to modify magnetic strip ID cards." image = 'icons/ntos/cardcomp.png' active_state = "id" var/obj/item/weapon/card/id/reader = null var/obj/item/weapon/card/id/writer = null var/mode = 0 var/auth = 0 var/printing = 0 proc/list_jobs() return get_all_jobs() + "Custom" // creates the block with the script in it // cache the result since it's almost constant but not quite // the list of jobs won't change after all... proc/scriptblock() var/global/dat = null var/counter = 0 var jobs_all = "" jobs_all += "" jobs_all += ""//Captain in special because he is head of heads ~Intercross21 jobs_all += "" jobs_all += "" counter = 0 jobs_all += ""//Red for(var/job in security_positions) counter++ if(counter >= 6) jobs_all += "" counter = 0 jobs_all += "" counter = 0 jobs_all += ""//Orange for(var/job in engineering_positions) counter++ if(counter >= 6) jobs_all += "" counter = 0 jobs_all += "" counter = 0 jobs_all += ""//Green for(var/job in medical_positions) counter++ if(counter >= 6) jobs_all += "" counter = 0 jobs_all += "" counter = 0 jobs_all += ""//Purple for(var/job in science_positions) counter++ if(counter >= 6) jobs_all += "" counter = 0 jobs_all += "" counter = 0 jobs_all += ""//Grey for(var/job in civilian_positions) counter++ if(counter >= 6) jobs_all += "" counter = 0 jobs_all += "" dat = {""} return dat // creates the list of access rights on the card proc/accessblock() var/accesses = "
Access
" accesses += "
Command
SpecialCaptainCustom
Security
[replacetext(job, " ", " ")]
Engineering
[replacetext(job, " ", " ")]
Medical
[replacetext(job, " ", " ")]
Science
[replacetext(job, " ", " ")]
Civilian
[replacetext(job, " ", " ")]
" accesses += "" for(var/i = 1; i <= 7; i++) accesses += "" accesses += "" for(var/i = 1; i <= 7; i++) accesses += "" accesses += "
[get_region_accesses_name(i)]:
" for(var/A in get_region_accesses(i)) if(A in writer.access) accesses += topic_link(src,"access=[A]","[replacetext(get_access_desc(A), " ", " ")]") + " " else accesses += topic_link(src,"access=[A]",replacetext(get_access_desc(A), " ", " ")) + " " accesses += "
" accesses += "
" return accesses proc/card_modify_menu() //assume peripherals and cards, do checks for them in interact // Header var/dat = "

" dat += topic_link(src,"remove=writer","Remove [writer.name]") + " || " dat += topic_link(src,"remove=reader","Remove [reader.name]") + "
" dat += topic_link(src,"mode=1","Access Crew Manifest") + " || " dat += topic_link(src,"logout","Log Out") + "
" dat += "
" + scriptblock() // form for renaming the ID dat += "
" dat += "" dat += "registered_name: " dat += "" dat += "
" // form for changing assignment, taken care of by scriptblock() mostly var/assign_temp = writer.assignment if(!assign_temp || assign_temp == "") assign_temp = "Unassigned" dat += "Assignment: [assign_temp] change" // list of access rights dat += accessblock() return dat proc/login_menu() //assume peripherals and cards, do checks for them in interact var/dat = "
Please insert the cards into the slots
" if(istype(writer)) dat += "Target: [topic_link(src,"remove=writer",writer.name)]
" else dat += "Target: [topic_link(src,"insert=writer","--------")]
" if(istype(reader)) dat += "Confirm Identity: [topic_link(src,"remove=reader",reader.name)]
" else dat += "Confirm Identity: [topic_link(src,"insert=reader","--------")]
" dat += "[topic_link(src,"auth","{Log in}")]

" dat += topic_link(src,"mode=1","Access Crew Manifest") return dat proc/show_manifest() // assume linked_db since called by interact() var/crew = "" var/list/L = list() for (var/datum/data/record/t in data_core.general) var/R = t.fields["name"] + " - " + t.fields["rank"] L += R for(var/R in sortList(L)) crew += "[R]
" return "Crew Manifest:
Please use security record computer to modify entries.

[crew][topic_link(src,"print","Print")]

[topic_link(src,"mode=0","Access ID modification console.")]
" // These are here partly in order to be overwritten by the centcom card computer code proc/authenticate() if(access_change_ids in reader.access) return 1 if(istype(usr,/mob/living/silicon/ai)) return 1 return 0 proc/set_default_access(var/jobname) var/datum/job/jobdatum for(var/jobtype in typesof(/datum/job)) var/datum/job/J = new jobtype if(ckey(J.title) == ckey(jobname)) jobdatum = J break if(jobdatum) writer.access = jobdatum.get_access() // ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) interact() if(!interactable()) return if(!computer.cardslot || !computer.cardslot.dualslot) computer.Crash(MISSING_PERIPHERAL) return reader = computer.cardslot.reader writer = computer.cardslot.writer var/dat switch(mode) if(0) if( !istype(writer) || !istype(reader) ) auth = 0 if( !auth ) dat = login_menu() else dat = card_modify_menu() if(1) dat = show_manifest() popup.width = 940 popup.height = 520 popup.set_content(dat) popup.open() return Topic(href, list/href_list) if(!interactable() || !computer.cardslot || ..(href,href_list)) return // todo distance/disability checks if("mode" in href_list) mode = text2num(href_list["mode"]) if(mode != 0 && mode != 1) mode = 0 auth = 0 // always log out if switching modes just in case if("remove" in href_list) var/which = href_list["remove"] if(which == "writer") computer.cardslot.remove(computer.cardslot.writer) else computer.cardslot.remove(computer.cardslot.reader) auth = 0 if("insert" in href_list) var/obj/item/weapon/card/card = usr.get_active_hand() if(!istype(card)) return var/which = href_list["insert"] if(which == "writer") computer.cardslot.insert(card,1) else computer.cardslot.insert(card,2) if("print" in href_list) if (printing) return printing = 1 sleep(50) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc ) P.info = "Crew Manifest:
" var/list/L = list() for (var/datum/data/record/t in data_core.general) var/R = t.fields["name"] + " - " + t.fields["rank"] L += R for(var/R in sortList(L)) P.info += "[R]
" P.name = "paper- 'Crew Manifest'" printing = 0 if("auth" in href_list) auth = 0 if(istype(reader) && istype(writer) && authenticate()) auth = 1 if("logout" in href_list) auth = 0 // Actual ID changing if("access" in href_list) if(auth) var/access_type = text2num(href_list["access"]) writer.access ^= list(access_type) //logical xor: remove if present, add if not if("assign" in href_list) if(auth) var/t1 = href_list["assign"] if(t1 == "Custom") var/temp_t = copytext(sanitize(input("Enter a custom job assignment.","Assignment")),1,MAX_MESSAGE_LEN) if(temp_t) t1 = temp_t set_default_access(t1) writer.assignment = t1 writer.name = text("[writer.registered_name]'s ID Card ([writer.assignment])") if("reg" in href_list) if(auth) writer.registered_name = href_list["reg"] writer.name = text("[writer.registered_name]'s ID Card ([writer.assignment])") computer.updateUsrDialog() return /datum/file/program/card_comp/centcom name = "CentCom identification console" drm = 1 list_jobs() return get_all_centcom_jobs() + "Custom" accessblock() var/accesses = "
Central Command:
" for(var/A in get_all_centcom_access()) if(A in writer.access) accesses += topic_link(src,"access=[A]","[replacetext(get_centcom_access_desc(A), " ", " ")]") + " " else accesses += topic_link(src,"access=[A]",replacetext(get_centcom_access_desc(A), " ", " ")) + " " return accesses authenticate() if(access_cent_captain in reader.access) return 1 return 0