/datum/computer_file/program/card_mod filename = "cardmod" filedesc = "ID card modification program" nanomodule_path = /datum/nano_module/program/card_mod program_icon_state = "id" program_key_state = "id_key" program_menu_icon = "key" extended_desc = "Program for programming crew ID cards." required_access = access_change_ids requires_ntnet = 0 size = 8 /datum/nano_module/program/card_mod name = "ID card modification program" var/mod_mode = 1 var/is_centcom = 0 var/show_assignments = 0 /datum/nano_module/program/card_mod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) var/list/data = host.initial_data() data["src"] = "\ref[src]" data["station_name"] = station_name() data["manifest"] = data_core ? data_core.get_manifest(0) : null data["assignments"] = show_assignments if(program && program.computer) data["have_id_slot"] = !!program.computer.card_slot data["have_printer"] = !!program.computer.nano_printer data["authenticated"] = program.can_run(user) if(!program.computer.card_slot) mod_mode = 0 //We can't modify IDs when there is no card reader else data["have_id_slot"] = 0 data["have_printer"] = 0 data["authenticated"] = 0 data["mmode"] = mod_mode data["centcom_access"] = is_centcom if(program && program.computer && program.computer.card_slot) var/obj/item/weapon/card/id/id_card = program.computer.card_slot.stored_card data["has_id"] = !!id_card data["id_account_number"] = id_card ? id_card.associated_account_number : null data["id_rank"] = id_card && id_card.assignment ? id_card.assignment : "Unassigned" data["id_owner"] = id_card && id_card.registered_name ? id_card.registered_name : "-----" data["id_name"] = id_card ? id_card.name : "-----" var/list/departments = list() for(var/D in SSjob.get_all_department_datums()) var/datum/department/dept = D if(!dept.assignable) // No AI ID cards for you. continue if(dept.centcom_only && !is_centcom) continue departments[++departments.len] = list("department_name" = dept.name, "jobs" = format_jobs(SSjob.get_job_titles_in_department(dept.name)) ) data["departments"] = departments data["all_centcom_access"] = is_centcom ? get_accesses(1) : null data["regions"] = get_accesses() if(program.computer.card_slot && program.computer.card_slot.stored_card) var/obj/item/weapon/card/id/id_card = program.computer.card_slot.stored_card if(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), " ", " "), "ref" = access, "allowed" = (access in id_card.access) ? 1 : 0))) data["all_centcom_access"] = all_centcom_access else 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), " ", " "), "ref" = access, "allowed" = (access in id_card.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, "mod_identification_computer.tmpl", name, 600, 700, state = state) ui.auto_update_layout = 1 ui.set_initial_data(data) ui.open() /datum/nano_module/program/card_mod/proc/format_jobs(list/jobs) var/obj/item/weapon/card/id/id_card = program.computer.card_slot ? program.computer.card_slot.stored_card : null var/list/formatted = list() for(var/job in jobs) formatted.Add(list(list( "display_name" = replacetext(job, " ", " "), "target_rank" = id_card && id_card.assignment ? id_card.assignment : "Unassigned", "job" = job))) return formatted /datum/nano_module/program/card_mod/proc/get_accesses(var/is_centcom = 0) return null /datum/computer_file/program/card_mod/Topic(href, href_list) if(..()) return 1 var/mob/user = usr var/obj/item/weapon/card/id/user_id_card = user.GetIdCard() var/obj/item/weapon/card/id/id_card if (computer.card_slot) id_card = computer.card_slot.stored_card var/datum/nano_module/program/card_mod/module = NM switch(href_list["action"]) if("switchm") if(href_list["target"] == "mod") module.mod_mode = 1 else if (href_list["target"] == "manifest") module.mod_mode = 0 if("togglea") if(module.show_assignments) module.show_assignments = 0 else module.show_assignments = 1 if("print") if(computer && computer.nano_printer) //This option should never be called if there is no printer if(module.mod_mode) if(can_run(user, 1)) var/contents = {"