GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) //TODO: someone please get rid of this shit /datum/datacore var/list/medical = list() var/medicalPrintCount = 0 var/list/general = list() var/list/security = list() var/securityPrintCount = 0 var/securityCrimeCounter = 0 ///This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character(). var/list/locked = list() /datum/data var/name = "data" /datum/data/record name = "record" var/list/fields = list() /datum/data/record/Destroy() if(src in GLOB.data_core.medical) GLOB.data_core.medical -= src if(src in GLOB.data_core.security) GLOB.data_core.security -= src if(src in GLOB.data_core.general) GLOB.data_core.general -= src if(src in GLOB.data_core.locked) GLOB.data_core.locked -= src . = ..() /datum/data/crime name = "crime" var/crimeName = "" var/crimeDetails = "" var/author = "" var/time = "" var/fine = 0 var/paid = 0 var/dataId = 0 /datum/datacore/proc/createCrimeEntry(cname = "", cdetails = "", author = "", time = "", fine = 0) var/datum/data/crime/c = new /datum/data/crime c.crimeName = cname c.crimeDetails = cdetails c.author = author c.time = time c.fine = fine c.paid = 0 c.dataId = ++securityCrimeCounter return c /datum/datacore/proc/addCitation(id = "", datum/data/crime/crime) for(var/datum/data/record/R in security) if(R.fields["id"] == id) var/list/crimes = R.fields["citation"] crimes |= crime return /datum/datacore/proc/removeCitation(id, cDataId) for(var/datum/data/record/R in security) if(R.fields["id"] == id) var/list/crimes = R.fields["citation"] for(var/datum/data/crime/crime in crimes) if(crime.dataId == text2num(cDataId)) crimes -= crime return /datum/datacore/proc/payCitation(id, cDataId, amount) for(var/datum/data/record/R in security) if(R.fields["id"] == id) var/list/crimes = R.fields["citation"] for(var/datum/data/crime/crime in crimes) if(crime.dataId == text2num(cDataId)) crime.paid = crime.paid + amount var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_SEC) D.adjust_money(amount) return /** * Adds crime to security record. * * Is used to add single crime to someone's security record. * Arguments: * * id - record id. * * datum/data/crime/crime - premade array containing every variable, usually created by createCrimeEntry. */ /datum/datacore/proc/addCrime(id = "", datum/data/crime/crime) for(var/datum/data/record/R in security) if(R.fields["id"] == id) var/list/crimes = R.fields["crim"] crimes |= crime return /** * Deletes crime from security record. * * Is used to delete single crime to someone's security record. * Arguments: * * id - record id. * * cDataId - id of already existing crime. */ /datum/datacore/proc/removeCrime(id, cDataId) for(var/datum/data/record/R in security) if(R.fields["id"] == id) var/list/crimes = R.fields["crim"] for(var/datum/data/crime/crime in crimes) if(crime.dataId == text2num(cDataId)) crimes -= crime return /** * Adds details to a crime. * * Is used to add or replace details to already existing crime. * Arguments: * * id - record id. * * cDataId - id of already existing crime. * * details - data you want to add. */ /datum/datacore/proc/addCrimeDetails(id, cDataId, details) for(var/datum/data/record/R in security) if(R.fields["id"] == id) var/list/crimes = R.fields["crim"] for(var/datum/data/crime/crime in crimes) if(crime.dataId == text2num(cDataId)) crime.crimeDetails = details return /datum/datacore/proc/manifest() for(var/i in GLOB.new_player_list) var/mob/dead/new_player/N = i if(N.new_character) log_manifest(N.ckey,N.new_character.mind,N.new_character) if(ishuman(N.new_character)) manifest_inject(N.new_character, N.client) CHECK_TICK /datum/datacore/proc/manifest_modify(name, assignment) var/datum/data/record/foundrecord = find_record("name", name, GLOB.data_core.general) if(foundrecord) foundrecord.fields["rank"] = assignment /datum/datacore/proc/get_manifest() // First we build up the order in which we want the departments to appear in. var/list/manifest_out = list() for(var/datum/job_department/department as anything in SSjob.joinable_departments) manifest_out[department.department_name] = list() manifest_out[DEPARTMENT_UNASSIGNED] = list() var/list/departments_by_type = SSjob.joinable_departments_by_type for(var/datum/data/record/record as anything in GLOB.data_core.general) var/name = record.fields["name"] var/rank = record.fields["rank"] var/datum/job/job = SSjob.GetJob(rank) if(!job || !(job.job_flags & JOB_CREW_MANIFEST) || !LAZYLEN(job.departments_list)) // In case an unlawful custom rank is added. var/list/misc_list = manifest_out[DEPARTMENT_UNASSIGNED] misc_list[++misc_list.len] = list( "name" = name, "rank" = rank, ) continue for(var/department_type as anything in job.departments_list) var/datum/job_department/department = departments_by_type[department_type] if(!department) stack_trace("get_manifest() failed to get job department for [department_type] of [job.type]") continue var/list/entry = list( "name" = name, "rank" = rank, ) var/list/department_list = manifest_out[department.department_name] if(istype(job, department.department_head)) department_list.Insert(1, null) department_list[1] = entry else department_list[++department_list.len] = entry // Trim the empty categories. for (var/department in manifest_out) if(!length(manifest_out[department])) manifest_out -= department return manifest_out /datum/datacore/proc/get_manifest_html(monochrome = FALSE) var/list/manifest = get_manifest() var/dat = {"
| Name | Rank | |
|---|---|---|
| [department] | ||
| [entry_list["name"]] | [entry_list["rank"]] | |