/datum/category_item/player_setup_item/occupation
name = "Occupation"
sort_order = 1
/datum/category_item/player_setup_item/occupation/load_character(list/save_data)
pref.alternate_option = save_data["alternate_option"]
pref.job_civilian_high = save_data["job_civilian_high"]
pref.job_civilian_med = save_data["job_civilian_med"]
pref.job_civilian_low = save_data["job_civilian_low"]
pref.job_medsci_high = save_data["job_medsci_high"]
pref.job_medsci_med = save_data["job_medsci_med"]
pref.job_medsci_low = save_data["job_medsci_low"]
pref.job_engsec_high = save_data["job_engsec_high"]
pref.job_engsec_med = save_data["job_engsec_med"]
pref.job_engsec_low = save_data["job_engsec_low"]
//VOREStation Add
pref.job_talon_low = save_data["job_talon_low"]
pref.job_talon_med = save_data["job_talon_med"]
pref.job_talon_high = save_data["job_talon_high"]
//VOREStation Add End
pref.player_alt_titles = check_list_copy(save_data["player_alt_titles"])
//CHOMPStation Add
pref.job_other_low = save_data["job_other_low"]
pref.job_other_med = save_data["job_other_med"]
pref.job_other_high = save_data["job_other_high"]
//CHOMPStation Add End
/datum/category_item/player_setup_item/occupation/save_character(list/save_data)
save_data["alternate_option"] = pref.alternate_option
save_data["job_civilian_high"] = pref.job_civilian_high
save_data["job_civilian_med"] = pref.job_civilian_med
save_data["job_civilian_low"] = pref.job_civilian_low
save_data["job_medsci_high"] = pref.job_medsci_high
save_data["job_medsci_med"] = pref.job_medsci_med
save_data["job_medsci_low"] = pref.job_medsci_low
save_data["job_engsec_high"] = pref.job_engsec_high
save_data["job_engsec_med"] = pref.job_engsec_med
save_data["job_engsec_low"] = pref.job_engsec_low
//VOREStation Add
save_data["job_talon_low"] = pref.job_talon_low
save_data["job_talon_med"] = pref.job_talon_med
save_data["job_talon_high"] = pref.job_talon_high
//VOREStation Add End
save_data["player_alt_titles"] = check_list_copy(pref.player_alt_titles)
//CHOMPStation Add
save_data["job_other_low"] = pref.job_other_low
save_data["job_other_med"] = pref.job_other_med
save_data["job_other_high"] = pref.job_other_high
//CHOMPStation Add Endarkens/revert-16279-revert-16253-reprefs
/datum/category_item/player_setup_item/occupation/sanitize_character()
pref.alternate_option = sanitize_integer(pref.alternate_option, 0, 2, initial(pref.alternate_option))
pref.job_civilian_high = sanitize_integer(pref.job_civilian_high, 0, 65535, initial(pref.job_civilian_high))
pref.job_civilian_med = sanitize_integer(pref.job_civilian_med, 0, 65535, initial(pref.job_civilian_med))
pref.job_civilian_low = sanitize_integer(pref.job_civilian_low, 0, 65535, initial(pref.job_civilian_low))
pref.job_medsci_high = sanitize_integer(pref.job_medsci_high, 0, 65535, initial(pref.job_medsci_high))
pref.job_medsci_med = sanitize_integer(pref.job_medsci_med, 0, 65535, initial(pref.job_medsci_med))
pref.job_medsci_low = sanitize_integer(pref.job_medsci_low, 0, 65535, initial(pref.job_medsci_low))
pref.job_engsec_high = sanitize_integer(pref.job_engsec_high, 0, 65535, initial(pref.job_engsec_high))
pref.job_engsec_med = sanitize_integer(pref.job_engsec_med, 0, 65535, initial(pref.job_engsec_med))
pref.job_engsec_low = sanitize_integer(pref.job_engsec_low, 0, 65535, initial(pref.job_engsec_low))
//VOREStation Add
pref.job_talon_high = sanitize_integer(pref.job_talon_high, 0, 65535, initial(pref.job_talon_high))
pref.job_talon_med = sanitize_integer(pref.job_talon_med, 0, 65535, initial(pref.job_talon_med))
pref.job_talon_low = sanitize_integer(pref.job_talon_low, 0, 65535, initial(pref.job_talon_low))
//VOREStation Add End
//CHOMPStation Add
pref.job_other_high = sanitize_integer(pref.job_other_high, 0, 65535, initial(pref.job_other_high))
pref.job_other_med = sanitize_integer(pref.job_other_med, 0, 65535, initial(pref.job_other_med))
pref.job_other_low = sanitize_integer(pref.job_other_low, 0, 65535, initial(pref.job_other_low))
//CHOMPStation Add End
if(!(pref.player_alt_titles)) pref.player_alt_titles = new()
if(!job_master)
return
for(var/datum/job/job in job_master.occupations)
var/alt_title = pref.player_alt_titles[job.title]
if(alt_title && !(alt_title in job.alt_titles))
pref.player_alt_titles -= job.title
/datum/category_item/player_setup_item/occupation/content(mob/user, limit = 25, list/splitJobs = list())
if(!job_master)
return
. = list()
. += "
Unavailable occupations are crossed out.
"
. += ""
. += "" // Table within a table for alignment, also allows you to easily add more columns.
. += " "
var/index = -1
//The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows.
var/datum/job/lastJob
var/datum/department/last_department = null // Used to avoid repeating the look-ahead check for if a whole department can fit.
var/list/all_valid_jobs = list()
// If the occupation window gets opened before SSJob initializes, then it'll just be blank, with no runtimes.
// It will work once init is finished.
for(var/D in SSjob.department_datums)
var/datum/department/department = SSjob.department_datums[D]
if(department.centcom_only) // No joining as a centcom role, if any are ever added.
continue
for(var/J in department.primary_jobs)
all_valid_jobs += department.jobs[J]
for(var/datum/job/job in all_valid_jobs)
if(job.latejoin_only) continue //VOREStation Code
var/datum/department/current_department = SSjob.get_primary_department_of_job(job)
// Should we add a new column?
var/make_new_column = FALSE
if(++index > limit)
// Ran out of rows, make a new column.
make_new_column = TRUE
else if(job.title in splitJobs)
// Is hardcoded to split at this job title.
make_new_column = TRUE
else if(current_department != last_department)
// If the department is bigger than the limit then we have to split.
if(limit >= current_department.primary_jobs.len)
// Look ahead to see if we would need to split, and if so, avoid it.
if(index + current_department.primary_jobs.len > limit)
// Looked ahead, and determined that a new column is needed to avoid splitting the department into two.
make_new_column = TRUE
if(make_new_column)
/*******
if((index < limit) && (lastJob != null))
//If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with
//the last job's selection color and blank buttons that do nothing. Creating a rather nice effect.
for(var/i = 0, i < (limit - index), i++)
. += "
"
*******/
. += "//>    "
index = 0
last_department = current_department
. += "
"
. += " "
continue
else
. += ""
var/rank = job.title
lastJob = job
. += ""
if(jobban_isbanned(user, rank))
if(CONFIG_GET(flag/usewhitelist) && !check_whitelist(user)) // CHOMPedit start
. += " [rank] \[WHITELISTED] [rank] \[BANNED] "
continue // CHOMPedit end
if(!job.player_old_enough(user.client))
var/available_in_days = job.available_in_days(user.client)
. += "[rank] \[IN [(available_in_days)] DAYS] "
continue
//VOREStation Add
if(!job.player_has_enough_playtime(user.client))
var/available_in_hours = job.available_in_playhours(user.client)
. += "[rank] \[IN [round(available_in_hours, 0.1)] DEPTHOURS] "
continue
if(!is_job_whitelisted(user,rank))
. += "[rank] \[WHITELIST ONLY] "
continue
//VOREStation Add End
if(job.is_species_banned(user.client.prefs.species, user.client.prefs.organ_data["brain"]) == TRUE)
. += "[rank] \[THIS RACE/BRAIN TYPE CANNOT TAKE THIS ROLE.\] "
continue
if((job.minimum_character_age || job.min_age_by_species) && user.client && (user.read_preference(/datum/preference/numeric/human/age) < job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])))
. += "[rank] \[MINIMUM CHARACTER AGE FOR SELECTED RACE/BRAIN TYPE: [job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])]\] "
continue
if((pref.job_civilian_low & ASSISTANT) && job.type != /datum/job/assistant)
. += "[rank]"
continue
if((rank in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND) ) || (rank == JOB_AI))//Bold head jobs
. += span_bold("[rank]") + ""
else
. += "[rank]"
. += " "
var/prefLevelLabel = "ERROR"
var/prefLevelColor = "pink"
var/prefUpperLevel = -1 // level to assign on left click
var/prefLowerLevel = -1 // level to assign on right click
if(pref.GetJobDepartment(job, 1) & job.flag)
prefLevelLabel = "High"
prefLevelColor = "55cc55"
prefUpperLevel = 4
prefLowerLevel = 2
else if(pref.GetJobDepartment(job, 2) & job.flag)
prefLevelLabel = "Medium"
prefLevelColor = "eecc22"
prefUpperLevel = 1
prefLowerLevel = 3
else if(pref.GetJobDepartment(job, 3) & job.flag)
prefLevelLabel = "Low"
prefLevelColor = "cc5555"
prefUpperLevel = 2
prefLowerLevel = 4
else
prefLevelLabel = "NEVER"
prefLevelColor = "black"
prefUpperLevel = 3
prefLowerLevel = 1
. += ""
if(job.type == /datum/job/assistant)//Assistant is special
if(pref.job_civilian_low & ASSISTANT)
. += " \[Yes]"
else
. += " \[No]"
if(LAZYLEN(job.alt_titles)) //Blatantly cloned from a few lines down.
. += " "
. += ""
continue
. += " \[[prefLevelLabel]]"
if(LAZYLEN(job.alt_titles))
. += "  \[[pref.GetPlayerAltTitle(job)]\] "
. += ""
. += "  \[[pref.GetPlayerAltTitle(job)]\]
"
if(job.alt_titles)
dat += span_italics(span_bold("Alternate titles:") + " [english_list(job.alt_titles)].")
send_rsc(user, job.get_job_icon(), "job[ckey(rank)].png")
dat += "
"
if(job.departments)
dat += span_bold("Departments:") + " [english_list(job.departments)]."
if(LAZYLEN(job.departments_managed))
dat += "You manage these departments: [english_list(job.departments_managed)]"
dat += "You answer to [job.supervisors] normally."
dat += "