| | "
counter = 0
jobs_all += "[replacetext(job, " ", " ")] | "
dat = {""}
return dat
// creates the list of access rights on the card
proc/accessblock()
var/accesses = "Access
"
accesses += ""
accesses += ""
for(var/i = 1; i <= 7; i++)
accesses += "| [get_region_accesses_name(i)]: | "
accesses += "
"
for(var/i = 1; i <= 7; i++)
accesses += ""
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 += " | "
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 += ""
// 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(2)
else
computer.cardslot.remove(1)
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,2)
else
computer.cardslot.insert(card,1)
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