/var/datum/controller/subsystem/records/SSrecords /datum/controller/subsystem/records name = "Records" flags = SS_NO_FIRE var/list/records var/list/records_locked var/list/warrants var/list/viruses var/list/shuttle_manifests var/list/excluded_fields var/list/localized_fields var/manifest_json var/list/list/manifest var/list/citizenships = list() var/list/religions = list() var/list/accents = list() /datum/controller/subsystem/records/Initialize() ..() for(var/type in localized_fields) localized_fields[type] = compute_localized_field(type) InitializeCitizenships() InitializeReligions() InitializeAccents() /datum/controller/subsystem/records/New() records = list() records_locked = list() warrants = list() viruses = list() shuttle_manifests = list() excluded_fields = list() localized_fields = list() manifest = list() NEW_SS_GLOBAL(SSrecords) var/datum/D = new() for(var/v in D.vars) excluded_fields[v] = v excluded_fields["cmp_field"] = "cmp_field" excluded_fields["excluded_fields"] = "excluded_fields" excluded_fields["excluded_print_fields"] = "excluded_print_fields" localized_fields[/datum/record] = list( "id" = "Id", "notes" = "Notes" ) localized_fields[/datum/record/general] = list( "_parent" = /datum/record, "name" = "Name", "rank" = "Rank", "age" = "Age", "sex" = "Sex", "fingerprint" = "Fingerprint", "physical_status" = "Physical Status", "mental_status" = "Mental Status", "species" = "Species", "citizenship" = "Citizenship", "employer" = "", "religion" = "Religion", "ccia_record" = "CCIA Notes", "notes" = "Employment/skills summary", ) localized_fields[/datum/record/medical] = list( "_parent" = /datum/record, "blood_type" = "Blood type", "blood_dna" = "DNA", "disabilities" = "Disabilities", "allergies" = "Allergies", "diseases" = "Diseases", "comments" = "Comments" ) localized_fields[/datum/record/security] = list( "_parent" = /datum/record, "criminal" = "Criminal Status", "crimes" = "Crimes", "incidents" = "Incidents", "comments" = "Comments" ) localized_fields[/datum/record/virus] = list( "_parent" = /datum/record, "description" = "Description", "antigen" = "", "spread_type" = "", ) /datum/controller/subsystem/records/proc/generate_record(var/mob/living/carbon/human/H) if(H.mind && SSjobs.ShouldCreateRecords(H.mind)) var/datum/record/general/r = new(H) //Locked Data var/datum/record/general/l = r.Copy(new /datum/record/general/locked(H)) add_record(l) add_record(r) /datum/controller/subsystem/records/proc/add_record(var/datum/record/record) switch(record.type) if(/datum/record/general/locked) records_locked += record if(/datum/record/general) records += record reset_manifest() if(/datum/record/warrant) warrants += record if(/datum/record/virus) viruses += record if(/datum/record/shuttle_manifest) shuttle_manifests += record /datum/controller/subsystem/records/proc/update_record(var/datum/record/record) switch(record.type) if(/datum/record/general/locked) records_locked |= record if(/datum/record/general) records |= record reset_manifest() if(/datum/record/warrant) warrants |= record if(/datum/record/virus) viruses |= record if(/datum/record/shuttle_manifest) shuttle_manifests |= record onModify(record) /datum/controller/subsystem/records/proc/remove_record(var/datum/record/record) switch(record.type) if(/datum/record/general/locked) records_locked -= record if(/datum/record/general) records -= record reset_manifest() if(/datum/record/warrant) warrants -= record if(/datum/record/virus) viruses *= record if(/datum/record/shuttle_manifest) shuttle_manifests -= record onDelete(record) qdel(record) /datum/controller/subsystem/records/proc/remove_record_by_field(var/field, var/value, var/record_type = RECORD_GENERAL) . = find_record(field, value, record_type) if(.) remove_record(.) /datum/controller/subsystem/records/proc/find_record(var/field, var/value, var/record_type = RECORD_GENERAL) if(excluded_fields[field]) return var/searchedList = records if(record_type & RECORD_LOCKED) searchedList = records_locked if(record_type & RECORD_WARRANT) for(var/datum/record/warrant/r in warrants) if(r.excluded_fields[field]) continue if(r.vars[field] == value) return r return if(record_type & RECORD_VIRUS) for(var/datum/record/virus/r in viruses) if(r.excluded_fields[field]) continue if(r.vars[field] == value) return r return for(var/datum/record/general/r in searchedList) if(r.excluded_fields[field]) continue if(record_type & RECORD_GENERAL) if(r.vars[field] == value) return r if(record_type & RECORD_MEDICAL) if(r.medical.vars[field] == value) return r if(record_type & RECORD_SECURITY) if(r.security.vars[field] == value) return r /datum/controller/subsystem/records/proc/build_records() for(var/mob/living/carbon/human/H in player_list) generate_record(H) /datum/controller/subsystem/records/proc/reset_manifest() manifest.Cut() update_static_data_for_all_viewers() /datum/controller/subsystem/records/ui_state(mob/user) return always_state /datum/controller/subsystem/records/ui_status(mob/user, datum/ui_state/state) return (isnewplayer(user) || isobserver(user) || issilicon(user)) ? UI_INTERACTIVE : UI_CLOSE /datum/controller/subsystem/records/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return if(action == "follow") var/mob/abstract/observer/O = usr if(istype(O)) for(var/mob/living/M in human_mob_list) if(istype(M) && M.real_name == params["name"]) O.ManualFollow(M) break . = ..() /datum/controller/subsystem/records/ui_static_data(mob/user) var/list/data = list() data["manifest"] = SSrecords.get_manifest_list() data["allow_follow"] = isobserver(usr) return data /datum/controller/subsystem/records/proc/open_manifest_tgui(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "CrewManifest", "Crew Manifest") ui.open() /datum/controller/subsystem/records/proc/get_manifest_text() var/dat = "