Files
CHOMPStation2/code/game/machinery/computer/card.dm

301 lines
9.3 KiB
Plaintext

//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/card
name = "\improper ID card modification console"
desc = "Terminal for programming employee ID cards to access parts of the station."
icon_keyboard = "id_key"
icon_screen = "id"
light_color = "#0099ff"
req_access = list(access_change_ids)
circuit = /obj/item/weapon/circuitboard/card
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/card/id/modify = null
var/mode = 0.0
var/printing = null
/obj/machinery/computer/card/proc/is_centcom()
return 0
/obj/machinery/computer/card/proc/is_authenticated()
return scan ? check_access(scan) : 0
/obj/machinery/computer/card/proc/get_target_rank()
return modify && modify.assignment ? modify.assignment : "Unassigned"
/obj/machinery/computer/card/proc/format_jobs(list/jobs)
var/list/formatted = list()
for(var/job in jobs)
formatted.Add(list(list(
"display_name" = replacetext(job, " ", "&nbsp"),
"target_rank" = get_target_rank(),
"job" = job)))
return formatted
/obj/machinery/computer/card/verb/eject_id()
set category = "Object"
set name = "Eject ID Card"
set src in oview(1)
if(!usr || usr.stat || usr.lying) return
if(scan)
to_chat(usr, "You remove \the [scan] from \the [src].")
scan.forceMove(get_turf(src))
if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human))
usr.put_in_hands(scan)
scan = null
else if(modify)
to_chat(usr, "You remove \the [modify] from \the [src].")
modify.forceMove(get_turf(src))
if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human))
usr.put_in_hands(modify)
modify = null
else
to_chat(usr, "There is nothing to remove from the console.")
return
/obj/machinery/computer/card/attackby(obj/item/weapon/card/id/id_card, mob/user)
if(!istype(id_card))
return ..()
if(!scan && (access_change_ids in id_card.access) && (user.unEquip(id_card) || (id_card.loc == user && istype(user,/mob/living/silicon/robot)))) //Grippers. Again. ~Mechoid
user.drop_item()
id_card.forceMove(src)
scan = id_card
else if(!modify)
user.drop_item()
id_card.forceMove(src)
modify = id_card
SSnanoui.update_uis(src)
attack_hand(user)
/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/card/attack_hand(mob/user as mob)
if(..()) return
if(stat & (NOPOWER|BROKEN)) return
ui_interact(user)
/obj/machinery/computer/card/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
if(data_core)
data_core.get_manifest_list()
var/data[0]
data["src"] = "\ref[src]"
data["station_name"] = station_name()
data["mode"] = mode
data["printing"] = printing
data["manifest"] = PDA_Manifest
data["target_name"] = modify ? modify.name : "-----"
data["target_owner"] = modify && modify.registered_name ? modify.registered_name : "-----"
data["target_rank"] = get_target_rank()
data["scan_name"] = scan ? scan.name : "-----"
data["authenticated"] = is_authenticated()
data["has_modify"] = !!modify
data["account_number"] = modify ? modify.associated_account_number : null
data["centcom_access"] = is_centcom()
data["all_centcom_access"] = null
data["regions"] = null
data["jobs"] = list(
list("cat" = "Engineering", "jobs" = format_jobs(engineering_positions)),
list("cat" = "Medical", "jobs" = format_jobs(medical_positions)),
list("cat" = "Science", "jobs" = format_jobs(science_positions)),
list("cat" = "Security", "jobs" = format_jobs(security_positions)),
list("cat" = "Cargo", "jobs" = format_jobs(cargo_positions)),
list("cat" = "Exploration", "jobs" = format_jobs(planet_positions)), //VOREStation Edit
list("cat" = "Civilian", "jobs" = format_jobs(civilian_positions)),
list("cat" = "CentCom", "jobs" = format_jobs(get_all_centcom_jobs()))
)
if (modify && is_centcom())
var/list/all_centcom_access = list()
for(var/access in get_all_centcom_access())
all_centcom_access.Add(list(list(
"desc" = replacetext(get_centcom_access_desc(access), " ", "&nbsp"),
"ref" = access,
"allowed" = (access in modify.access) ? 1 : 0)))
data["all_centcom_access"] = all_centcom_access
else if (modify)
var/list/regions = list()
for(var/i = 1; i <= 7; i++)
var/list/accesses = list()
for(var/access in get_region_accesses(i))
if (get_access_desc(access))
accesses.Add(list(list(
"desc" = replacetext(get_access_desc(access), " ", "&nbsp"),
"ref" = access,
"allowed" = (access in modify.access) ? 1 : 0)))
regions.Add(list(list(
"name" = get_region_accesses_name(i),
"accesses" = accesses)))
data["regions"] = regions
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "identification_computer.tmpl", src.name, 600, 700)
ui.set_initial_data(data)
ui.open()
/obj/machinery/computer/card/Topic(href, href_list)
if(..())
return 1
switch(href_list["choice"])
if ("modify")
if (modify)
data_core.manifest_modify(modify.registered_name, modify.assignment)
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
if(ishuman(usr))
modify.forceMove(get_turf(src))
if(!usr.get_active_hand())
usr.put_in_hands(modify)
modify = null
else
modify.forceMove(get_turf(src))
modify = null
else
var/obj/item/I = usr.get_active_hand()
if (istype(I, /obj/item/weapon/card/id) && usr.unEquip(I))
I.forceMove(src)
modify = I
if ("scan")
if (scan)
if(ishuman(usr))
scan.forceMove(get_turf(src))
if(!usr.get_active_hand())
usr.put_in_hands(scan)
scan = null
else
scan.forceMove(get_turf(src))
scan = null
else
var/obj/item/I = usr.get_active_hand()
if (istype(I, /obj/item/weapon/card/id))
usr.drop_item()
I.forceMove(src)
scan = I
if("access")
if(href_list["allowed"])
if(is_authenticated())
var/access_type = text2num(href_list["access_target"])
var/access_allowed = text2num(href_list["allowed"])
if(access_type in (is_centcom() ? get_all_centcom_access() : get_all_station_access()))
modify.access -= access_type
if(!access_allowed)
modify.access += access_type
if ("assign")
if (is_authenticated() && modify)
var/t1 = href_list["assign_target"]
if(t1 == "Custom")
var/temp_t = sanitize(input("Enter a custom job assignment.","Assignment"), 45)
//let custom jobs function as an impromptu alt title, mainly for sechuds
if(temp_t && modify)
modify.assignment = temp_t
else
var/list/access = list()
if(is_centcom())
access = get_centcom_access(t1)
else
var/datum/job/jobdatum
for(var/jobtype in typesof(/datum/job))
var/datum/job/J = new jobtype
if(ckey(J.title) == ckey(t1))
jobdatum = J
break
if(!jobdatum)
to_chat(usr, "<span class='warning'>No log exists for this job: [t1]</span>")
return
access = jobdatum.get_access()
modify.access = access
modify.assignment = t1
modify.rank = t1
callHook("reassign_employee", list(modify))
if ("reg")
if (is_authenticated())
var/t2 = modify
if ((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
var/temp_name = sanitizeName(href_list["reg"])
if(temp_name)
modify.registered_name = temp_name
else
src.visible_message("<span class='notice'>[src] buzzes rudely.</span>")
SSnanoui.update_uis(src)
if ("account")
if (is_authenticated())
var/t2 = modify
if ((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
var/account_num = text2num(href_list["account"])
modify.associated_account_number = account_num
SSnanoui.update_uis(src)
if ("mode")
mode = text2num(href_list["mode_target"])
if ("print")
if (!printing)
printing = 1
spawn(50)
printing = null
SSnanoui.update_uis(src)
var/obj/item/weapon/paper/P = new(loc)
if (mode)
P.name = text("crew manifest ([])", stationtime2text())
P.info = {"<h4>Crew Manifest</h4>
<br>
[data_core ? data_core.get_manifest(0) : ""]
"}
else if (modify)
P.name = "access report"
P.info = {"<h4>Access Report</h4>
<u>Prepared By:</u> [scan.registered_name ? scan.registered_name : "Unknown"]<br>
<u>For:</u> [modify.registered_name ? modify.registered_name : "Unregistered"]<br>
<hr>
<u>Assignment:</u> [modify.assignment]<br>
<u>Account Number:</u> #[modify.associated_account_number]<br>
<u>Blood Type:</u> [modify.blood_type]<br><br>
<u>Access:</u><br>
"}
for(var/A in modify.access)
P.info += " [get_access_desc(A)]"
if ("terminate")
if (is_authenticated())
modify.assignment = "Dismissed" //VOREStation Edit: setting adjustment
modify.access = list()
callHook("terminate_employee", list(modify))
if (modify)
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
modify.lost_access = list() //VOREStation addition: reset the lost access upon any modifications
return 1
/obj/machinery/computer/card/centcom
name = "\improper CentCom ID card modification console"
circuit = /obj/item/weapon/circuitboard/card/centcom
req_access = list(access_cent_captain)
/obj/machinery/computer/card/centcom/is_centcom()
return 1