[MIRROR] Job refactor 2: less hardcoded lists (#7410)

* Job refactor 2: less hardcoded lists

* CRITICAL DEP 1

* CRITCAL DEP 2

* Update nanotrasen_admiral.dm

* Update nanotrasen_admiral.dm

* Update nanotrasen_admiral.dm

Co-authored-by: Rohesie <rohesie@gmail.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
This commit is contained in:
SkyratBot
2021-08-06 02:42:53 +02:00
committed by GitHub
parent 5fcedca6e5
commit 91070a797c
82 changed files with 852 additions and 664 deletions

View File

@@ -14,6 +14,7 @@
#define PAYCHECK_MEDIUM 100 //SKYRAT EDIT ORIGINAL = (75) - Pay Raise #define PAYCHECK_MEDIUM 100 //SKYRAT EDIT ORIGINAL = (75) - Pay Raise
#define PAYCHECK_HARD 125 //SKYRAT EDIT ORIGINAL = (100) - Pay Raise #define PAYCHECK_HARD 125 //SKYRAT EDIT ORIGINAL = (100) - Pay Raise
#define PAYCHECK_COMMAND 200 #define PAYCHECK_COMMAND 200
#define PAYCHECK_CENTRAL_COMMAND 600 //SKYRAT EDIT ADDITION
#define STATION_TARGET_BUFFER 40 #define STATION_TARGET_BUFFER 40

View File

@@ -51,20 +51,30 @@
#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //SKYRAT EDIT ADDITON #define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //SKYRAT EDIT ADDITON
#define JOB_DISPLAY_ORDER_PRISONER 39 #define JOB_DISPLAY_ORDER_PRISONER 39
#define JOB_DISPLAY_ORDER_BRIGOFF 40 //SKYRAT EDIT ADDITON #define JOB_DISPLAY_ORDER_BRIGOFF 40 //SKYRAT EDIT ADDITON
#define JOB_DISPLAY_ORDER_NANOTRASEN_REPRESENTATIVE 41 //SKYRAT EDIT ADDITON - CENTRAL ROLES BELOW HERE! #define JOB_DISPLAY_ORDER_NANOTRASEN_ADMIRAL 41 //SKYRAT EDIT ADDITON - CENTRAL ROLES BELOW HERE!
#define JOB_DISPLAY_ORDER_BLUESHIELD 42 #define JOB_DISPLAY_ORDER_NANOTRASEN_REPRESENTATIVE 42
#define JOB_DISPLAY_ORDER_BLUESHIELD 43
#define DEPARTMENT_SECURITY (1<<0) #define DEPARTMENT_UNASSIGNED "No department assigned"
#define DEPARTMENT_COMMAND (1<<1) #define DEPARTMENT_BITFLAG_SECURITY (1<<0)
#define DEPARTMENT_SERVICE (1<<2) #define DEPARTMENT_SECURITY "Security"
#define DEPARTMENT_CARGO (1<<3) #define DEPARTMENT_BITFLAG_COMMAND (1<<1)
#define DEPARTMENT_ENGINEERING (1<<4) #define DEPARTMENT_COMMAND "Command"
#define DEPARTMENT_SCIENCE (1<<5) #define DEPARTMENT_BITFLAG_SERVICE (1<<2)
#define DEPARTMENT_MEDICAL (1<<6) #define DEPARTMENT_SERVICE "Service"
#define DEPARTMENT_SILICON (1<<7) #define DEPARTMENT_BITFLAG_CARGO (1<<3)
#define DEPARTMENT_CENTRAL_COMMAND (1<<8) //SKYRAT EDIT CHANGE #define DEPARTMENT_CARGO "Cargo"
#define DEPARTMENT_BITFLAG_ENGINEERING (1<<4)
#define DEPARTMENT_ENGINEERING "Engineering"
#define DEPARTMENT_BITFLAG_SCIENCE (1<<5)
#define DEPARTMENT_SCIENCE "Science"
#define DEPARTMENT_BITFLAG_MEDICAL (1<<6)
#define DEPARTMENT_MEDICAL "Medical"
#define DEPARTMENT_BITFLAG_SILICON (1<<7)
#define DEPARTMENT_SILICON "Silicon"
#define DEPARTMENT_BITFLAG_CENTRAL_COMMAND (1<<8) //SKYRAT EDIT CHANGE
#define DEPARTMENT_CENTRAL_COMMAND "Central Command" //SKYRAT EDIT CHANGE
/* Job datum job_flags */ /* Job datum job_flags */
/// Whether the mob is announced on arrival. /// Whether the mob is announced on arrival.
@@ -77,6 +87,10 @@
#define JOB_CREW_MEMBER (1<<3) #define JOB_CREW_MEMBER (1<<3)
/// Whether this job can be joined through the new_player menu. /// Whether this job can be joined through the new_player menu.
#define JOB_NEW_PLAYER_JOINABLE (1<<4) #define JOB_NEW_PLAYER_JOINABLE (1<<4)
/// Whether this job appears in bold in the job menu.
#define JOB_BOLD_SELECT_TEXT (1<<5)
/// Reopens this position if we lose the player at roundstart.
#define JOB_REOPEN_ON_ROUNDSTART_LOSS (1<<6)
#define FACTION_NONE "None" #define FACTION_NONE "None"
#define FACTION_STATION "Station" #define FACTION_STATION "Station"

View File

@@ -120,7 +120,7 @@
#define INIT_ORDER_STATION 74 //This is high priority because it manipulates a lot of the subsystems that will initialize after it. #define INIT_ORDER_STATION 74 //This is high priority because it manipulates a lot of the subsystems that will initialize after it.
#define INIT_ORDER_EVENTS 70 #define INIT_ORDER_EVENTS 70
#define INIT_ORDER_IDACCESS 66 #define INIT_ORDER_IDACCESS 66
#define INIT_ORDER_JOBS 65 #define INIT_ORDER_JOBS 65 // Must init before atoms, to set up properly the dynamic job lists.
#define INIT_ORDER_QUIRKS 60 #define INIT_ORDER_QUIRKS 60
#define INIT_ORDER_AI_MOVEMENT 56 //We need the movement setup #define INIT_ORDER_AI_MOVEMENT 56 //We need the movement setup
#define INIT_ORDER_AI_CONTROLLERS 55 //So the controller can get the ref #define INIT_ORDER_AI_CONTROLLERS 55 //So the controller can get the ref

View File

@@ -113,6 +113,9 @@ GLOBAL_VAR_INIT(cmp_field, "name")
/proc/cmp_job_display_asc(datum/job/A, datum/job/B) /proc/cmp_job_display_asc(datum/job/A, datum/job/B)
return A.display_order - B.display_order return A.display_order - B.display_order
/proc/cmp_department_display_asc(datum/job_department/A, datum/job_department/B)
return A.display_order - B.display_order
/proc/cmp_reagents_asc(datum/reagent/a, datum/reagent/b) /proc/cmp_reagents_asc(datum/reagent/a, datum/reagent/b)
return sorttext(initial(b.name),initial(a.name)) return sorttext(initial(b.name),initial(a.name))

View File

@@ -57,23 +57,23 @@
var/datum/job/J = new spath() var/datum/job/J = new spath()
if(istype(J, /datum/job/captain)) if(istype(J, /datum/job/captain))
GLOB.captain_alttitles += J.alt_titles GLOB.captain_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_CENTRAL_COMMAND)) if(/datum/job_department/central_command in J.departments_list)
GLOB.central_command_alttitles += J.alt_titles GLOB.central_command_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_COMMAND)) if(/datum/job_department/command in J.departments_list)
GLOB.command_alttitles += J.alt_titles GLOB.command_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_SECURITY)) if(/datum/job_department/security in J.departments_list)
GLOB.security_alttitles += J.alt_titles GLOB.security_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_CARGO)) if(/datum/job_department/cargo in J.departments_list)
GLOB.supply_alttitles += J.alt_titles GLOB.supply_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_SERVICE)) if(/datum/job_department/service in J.departments_list)
GLOB.service_alttitles += J.alt_titles GLOB.service_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_MEDICAL)) if(/datum/job_department/medical in J.departments_list)
GLOB.medical_alttitles += J.alt_titles GLOB.medical_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_SCIENCE)) if(/datum/job_department/science in J.departments_list)
GLOB.science_alttitles += J.alt_titles GLOB.science_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_ENGINEERING)) if(/datum/job_department/engineering in J.departments_list)
GLOB.engineering_alttitles += J.alt_titles GLOB.engineering_alttitles += J.alt_titles
if((J.departments & DEPARTMENT_SILICON)) if(/datum/job_department/silicon in J.departments_list)
GLOB.nonhuman_alttitles += J.alt_titles GLOB.nonhuman_alttitles += J.alt_titles
//SKYRAT EDIT END //SKYRAT EDIT END

View File

@@ -558,7 +558,7 @@
if(!human.client || !human.mind) if(!human.client || !human.mind)
continue continue
var/datum/job/human_job = human.mind.assigned_role var/datum/job/human_job = human.mind.assigned_role
if(!(human_job.departments & DEPARTMENT_SERVICE)) if(!(human_job.departments_bitflags & DEPARTMENT_SERVICE))
continue continue
human_job.award_service(human.client, award) human_job.award_service(human.client, award)

View File

@@ -196,6 +196,7 @@
/datum/config_entry/flag/use_exp_tracking /datum/config_entry/flag/use_exp_tracking
/// Enables head jobs time restrictions.
/datum/config_entry/flag/use_exp_restrictions_heads /datum/config_entry/flag/use_exp_restrictions_heads
/datum/config_entry/number/use_exp_restrictions_heads_hours /datum/config_entry/number/use_exp_restrictions_heads_hours
@@ -205,6 +206,7 @@
/datum/config_entry/flag/use_exp_restrictions_heads_department /datum/config_entry/flag/use_exp_restrictions_heads_department
/// Enables non-head jobs time restrictions.
/datum/config_entry/flag/use_exp_restrictions_other /datum/config_entry/flag/use_exp_restrictions_other
/datum/config_entry/flag/use_exp_restrictions_admin_bypass /datum/config_entry/flag/use_exp_restrictions_admin_bypass

View File

@@ -4,11 +4,22 @@ SUBSYSTEM_DEF(job)
flags = SS_NO_FIRE flags = SS_NO_FIRE
/// List of all jobs. /// List of all jobs.
var/list/all_occupations = list() var/list/datum/job/all_occupations = list()
/// List of jobs that can be joined through the starting menu. /// List of jobs that can be joined through the starting menu.
var/list/joinable_occupations = list() var/list/datum/job/joinable_occupations = list()
var/list/datum/job/name_occupations = list() //Dict of all jobs, keys are titles /// Dictionary of all jobs, keys are titles.
var/list/type_occupations = list() //Dict of all jobs, keys are types var/list/name_occupations = list()
/// Dictionary of all jobs, keys are types.
var/list/datum/job/type_occupations = list()
/// Dictionary of jobs indexed by the experience type they grant.
var/list/experience_jobs_map = list()
/// List of all departments with joinable jobs.
var/list/datum/job_department/joinable_departments = list()
/// List of all joinable departments indexed by their typepath, sorted by their own display order.
var/list/datum/job_department/joinable_departments_by_type = list()
var/list/unassigned = list() //Players who need jobs var/list/unassigned = list() //Players who need jobs
var/initial_players_to_assign = 0 //used for checking against population caps var/initial_players_to_assign = 0 //used for checking against population caps
@@ -90,13 +101,25 @@ SUBSYSTEM_DEF(job)
/datum/controller/subsystem/job/proc/SetupOccupations() /datum/controller/subsystem/job/proc/SetupOccupations()
all_occupations = list() name_occupations = list()
joinable_occupations = list() type_occupations = list()
var/list/all_jobs = subtypesof(/datum/job) var/list/all_jobs = subtypesof(/datum/job)
if(!length(all_jobs)) if(!length(all_jobs))
all_occupations = list()
joinable_occupations = list()
joinable_departments = list()
joinable_departments_by_type = list()
experience_jobs_map = list()
to_chat(world, span_boldannounce("Error setting up jobs, no job datums found")) to_chat(world, span_boldannounce("Error setting up jobs, no job datums found"))
return FALSE return FALSE
var/list/new_all_occupations = list()
var/list/new_joinable_occupations = list()
var/list/new_joinable_departments = list()
var/list/new_joinable_departments_by_type = list()
var/list/new_experience_jobs_map = list()
for(var/job_type in all_jobs) for(var/job_type in all_jobs)
var/datum/job/job = new job_type() var/datum/job/job = new job_type()
if(!job.config_check()) if(!job.config_check())
@@ -104,11 +127,44 @@ SUBSYSTEM_DEF(job)
if(!job.map_check()) //Even though we initialize before mapping, this is fine because the config is loaded at new if(!job.map_check()) //Even though we initialize before mapping, this is fine because the config is loaded at new
testing("Removed [job.type] due to map config") testing("Removed [job.type] due to map config")
continue continue
all_occupations += job new_all_occupations += job
name_occupations[job.title] = job name_occupations[job.title] = job
type_occupations[job_type] = job type_occupations[job_type] = job
if(job.job_flags & JOB_NEW_PLAYER_JOINABLE) if(job.job_flags & JOB_NEW_PLAYER_JOINABLE)
joinable_occupations += job new_joinable_occupations += job
if(!LAZYLEN(job.departments_list))
var/datum/job_department/department = new_joinable_departments_by_type[/datum/job_department/undefined]
if(!department)
department = new /datum/job_department/undefined()
new_joinable_departments_by_type[/datum/job_department/undefined] = department
department.add_job(job)
continue
for(var/department_type in job.departments_list)
var/datum/job_department/department = new_joinable_departments_by_type[department_type]
if(!department)
department = new department_type()
new_joinable_departments_by_type[department_type] = department
department.add_job(job)
sortTim(new_all_occupations, /proc/cmp_job_display_asc)
for(var/datum/job/job as anything in new_all_occupations)
if(!job.exp_granted_type)
continue
new_experience_jobs_map[job.exp_granted_type] += list(job)
sortTim(new_joinable_departments_by_type, /proc/cmp_department_display_asc, associative = TRUE)
for(var/department_type in new_joinable_departments_by_type)
var/datum/job_department/department = new_joinable_departments_by_type[department_type]
sortTim(department.department_jobs, /proc/cmp_job_display_asc)
new_joinable_departments += department
if(department.department_experience_type)
new_experience_jobs_map[department.department_experience_type] = department.department_jobs.Copy()
all_occupations = new_all_occupations
joinable_occupations = sortTim(new_joinable_occupations, /proc/cmp_job_display_asc)
joinable_departments = new_joinable_departments
joinable_departments_by_type = new_joinable_departments_by_type
experience_jobs_map = new_experience_jobs_map
return TRUE return TRUE
@@ -123,6 +179,11 @@ SUBSYSTEM_DEF(job)
SetupOccupations() SetupOccupations()
return type_occupations[jobtype] return type_occupations[jobtype]
/datum/controller/subsystem/job/proc/get_department_type(department_type)
if(!length(all_occupations))
SetupOccupations()
return joinable_departments_by_type[department_type]
/datum/controller/subsystem/job/proc/AssignRole(mob/dead/new_player/player, datum/job/job, latejoin = FALSE) /datum/controller/subsystem/job/proc/AssignRole(mob/dead/new_player/player, datum/job/job, latejoin = FALSE)
JobDebug("Running AR, Player: [player], Rank: [isnull(job) ? "null" : job.type], LJ: [latejoin]") JobDebug("Running AR, Player: [player], Rank: [isnull(job) ? "null" : job.type], LJ: [latejoin]")
@@ -211,11 +272,11 @@ SUBSYSTEM_DEF(job)
if(istype(job, GetJobType(overflow_role))) // We don't want to give him assistant, that's boring! if(istype(job, GetJobType(overflow_role))) // We don't want to give him assistant, that's boring!
continue continue
if(job.title in GLOB.command_positions) //If you want a command position, select it! if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) //If you want a command position, select it!
continue continue
//SKYRAT EDIT ADDITION //SKYRAT EDIT ADDITION
if(job.title in GLOB.central_command_positions) //If you want a CC position, select it! if(job.departments_bitflags & DEPARTMENT_BITFLAG_CENTRAL_COMMAND) //If you want a CC position, select it!
continue continue
//SKYRAT EDIT END //SKYRAT EDIT END
@@ -274,11 +335,11 @@ SUBSYSTEM_DEF(job)
//it locates a head or runs out of levels to check //it locates a head or runs out of levels to check
//This is basically to ensure that there's atleast a few heads in the round //This is basically to ensure that there's atleast a few heads in the round
/datum/controller/subsystem/job/proc/FillHeadPosition() /datum/controller/subsystem/job/proc/FillHeadPosition()
var/datum/job_department/command_department = get_department_type(/datum/job_department/command)
if(!command_department)
return FALSE
for(var/level in level_order) for(var/level in level_order)
for(var/command_position in GLOB.command_positions) for(var/datum/job/job as anything in command_department.department_jobs)
var/datum/job/job = GetJob(command_position)
if(!job)
continue
if((job.current_positions >= job.total_positions) && job.total_positions != -1) if((job.current_positions >= job.total_positions) && job.total_positions != -1)
continue continue
var/list/candidates = FindOccupationCandidates(job, level) var/list/candidates = FindOccupationCandidates(job, level)
@@ -293,10 +354,10 @@ SUBSYSTEM_DEF(job)
//This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level //This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level
//This is also to ensure we get as many heads as possible //This is also to ensure we get as many heads as possible
/datum/controller/subsystem/job/proc/CheckHeadPositions(level) /datum/controller/subsystem/job/proc/CheckHeadPositions(level)
for(var/command_position in GLOB.command_positions) var/datum/job_department/command_department = get_department_type(/datum/job_department/command)
var/datum/job/job = GetJob(command_position) if(!command_department)
if(!job) return
continue for(var/datum/job/job as anything in command_department.department_jobs)
if((job.current_positions >= job.total_positions) && job.total_positions != -1) if((job.current_positions >= job.total_positions) && job.total_positions != -1)
continue continue
var/list/candidates = FindOccupationCandidates(job, level) var/list/candidates = FindOccupationCandidates(job, level)
@@ -762,7 +823,7 @@ SUBSYSTEM_DEF(job)
/datum/controller/subsystem/job/proc/get_living_heads() /datum/controller/subsystem/job/proc/get_living_heads()
. = list() . = list()
for(var/mob/living/carbon/human/player as anything in GLOB.human_list) for(var/mob/living/carbon/human/player as anything in GLOB.human_list)
if(player.stat != DEAD && (player.mind?.assigned_role.departments & DEPARTMENT_COMMAND)) if(player.stat != DEAD && (player.mind?.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND))
. += player.mind . += player.mind
@@ -772,7 +833,7 @@ SUBSYSTEM_DEF(job)
/datum/controller/subsystem/job/proc/get_all_heads() /datum/controller/subsystem/job/proc/get_all_heads()
. = list() . = list()
for(var/mob/living/carbon/human/player as anything in GLOB.human_list) for(var/mob/living/carbon/human/player as anything in GLOB.human_list)
if(player.mind?.assigned_role.departments & DEPARTMENT_COMMAND) if(player.mind?.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
. += player.mind . += player.mind
////////////////////////////////////////////// //////////////////////////////////////////////
@@ -781,7 +842,7 @@ SUBSYSTEM_DEF(job)
/datum/controller/subsystem/job/proc/get_living_sec() /datum/controller/subsystem/job/proc/get_living_sec()
. = list() . = list()
for(var/mob/living/carbon/human/player as anything in GLOB.human_list) for(var/mob/living/carbon/human/player as anything in GLOB.human_list)
if(player.stat != DEAD && (player.mind?.assigned_role.departments & DEPARTMENT_SECURITY)) if(player.stat != DEAD && (player.mind?.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY))
. += player.mind . += player.mind
//////////////////////////////////////// ////////////////////////////////////////
@@ -790,7 +851,7 @@ SUBSYSTEM_DEF(job)
/datum/controller/subsystem/job/proc/get_all_sec() /datum/controller/subsystem/job/proc/get_all_sec()
. = list() . = list()
for(var/mob/living/carbon/human/player as anything in GLOB.human_list) for(var/mob/living/carbon/human/player as anything in GLOB.human_list)
if(player.mind?.assigned_role.departments & DEPARTMENT_SECURITY) if(player.mind?.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY)
. += player.mind . += player.mind
/datum/controller/subsystem/job/proc/JobDebug(message) /datum/controller/subsystem/job/proc/JobDebug(message)

View File

@@ -141,63 +141,49 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
var/datum/data/record/foundrecord = find_record("name", name, GLOB.data_core.general) var/datum/data/record/foundrecord = find_record("name", name, GLOB.data_core.general)
if(foundrecord) if(foundrecord)
foundrecord.fields["rank"] = assignment foundrecord.fields["rank"] = assignment
/* SKYRAT EDIT MOVAL - OVERWRITTEN IN ALTJOBTITLES
/datum/datacore/proc/get_manifest()
var/list/manifest_out = list(
"Command",
"Security",
"Engineering",
"Medical",
"Science",
"Supply",
"Service",
"Silicon"
)
var/list/departments = list(
"Command" = GLOB.command_positions,
"Security" = GLOB.security_positions + GLOB.security_sub_positions,
"Engineering" = GLOB.engineering_positions,
"Medical" = GLOB.medical_positions,
"Science" = GLOB.science_positions,
"Supply" = GLOB.supply_positions,
"Service" = GLOB.service_positions,
"Silicon" = GLOB.nonhuman_positions
)
var/list/heads = GLOB.command_positions + list("Quartermaster")
for(var/datum/data/record/t in GLOB.data_core.general) /datum/datacore/proc/get_manifest()
var/name = t.fields["name"] // First we build up the order in which we want the departments to appear in.
var/rank = t.fields["rank"] var/list/manifest_out = list()
var/has_department = FALSE for(var/datum/job_department/department as anything in SSjob.joinable_departments)
for(var/department in departments) manifest_out[department.department_name] = list()
var/list/jobs = departments[department] manifest_out[DEPARTMENT_UNASSIGNED] = list()
if(rank in jobs)
if(!manifest_out[department]) var/list/departments_by_type = SSjob.joinable_departments_by_type
manifest_out[department] = list() for(var/datum/data/record/record as anything in GLOB.data_core.general)
// Append to beginning of list if captain or department head var/name = record.fields["name"]
if (rank == "Captain" || (department != "Command" && (rank in heads))) var/rank = record.fields["rank"]
manifest_out[department] = list(list( 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, "name" = name,
"rank" = rank "rank" = rank,
)) + manifest_out[department] )
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 else
manifest_out[department] += list(list( department_list[++department_list.len] = entry
"name" = name,
"rank" = rank // Trim the empty categories.
)) for (var/department in manifest_out)
has_department = TRUE if(!length(manifest_out[department]))
if(!has_department)
if(!manifest_out["Misc"])
manifest_out["Misc"] = list()
manifest_out["Misc"] += list(list(
"name" = name,
"rank" = rank
))
for (var/department in departments)
if (!manifest_out[department])
manifest_out -= department manifest_out -= department
return manifest_out return manifest_out
*/
/datum/datacore/proc/get_manifest_html(monochrome = FALSE) /datum/datacore/proc/get_manifest_html(monochrome = FALSE)
var/list/manifest = get_manifest() var/list/manifest = get_manifest()

View File

@@ -80,7 +80,7 @@
var/datum/mind/guilty_conscience = user.mind var/datum/mind/guilty_conscience = user.mind
if(guilty_conscience) //sec and medical are immune to becoming guilty through attack (we don't check holy because holy shouldn't be able to attack eachother anyways) if(guilty_conscience) //sec and medical are immune to becoming guilty through attack (we don't check holy because holy shouldn't be able to attack eachother anyways)
var/datum/job/job = guilty_conscience.assigned_role var/datum/job/job = guilty_conscience.assigned_role
if(job.departments & (DEPARTMENT_MEDICAL | DEPARTMENT_SECURITY)) if(job.departments_bitflags & (DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SECURITY))
return return
if(declaration) if(declaration)
to_chat(owner, span_notice("[user] is now considered guilty by [GLOB.deity] from your declaration.")) to_chat(owner, span_notice("[user] is now considered guilty by [GLOB.deity] from your declaration."))
@@ -109,10 +109,10 @@
var/mob/living/carbon/human/target_human = target_creature var/mob/living/carbon/human/target_human = target_creature
var/datum/job/job = target_human.mind?.assigned_role var/datum/job/job = target_human.mind?.assigned_role
var/is_holy = target_human.mind?.holy_role var/is_holy = target_human.mind?.holy_role
if(is_holy || (job?.departments & DEPARTMENT_SECURITY)) if(is_holy || (job?.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY))
to_chat(honorbound_human, span_warning("There is nothing righteous in attacking the <b>just</b>.")) to_chat(honorbound_human, span_warning("There is nothing righteous in attacking the <b>just</b>."))
return FALSE return FALSE
if(job?.departments & DEPARTMENT_MEDICAL) if(job?.departments_bitflags & DEPARTMENT_BITFLAG_MEDICAL)
to_chat(honorbound_human, span_warning("If you truly think this healer is not <b>innocent</b>, declare them guilty.")) to_chat(honorbound_human, span_warning("If you truly think this healer is not <b>innocent</b>, declare them guilty."))
return FALSE return FALSE
//THE INNOCENT //THE INNOCENT
@@ -272,7 +272,7 @@
if(!silent) if(!silent)
to_chat(user, span_warning("Followers of [GLOB.deity] cannot be evil!")) to_chat(user, span_warning("Followers of [GLOB.deity] cannot be evil!"))
return FALSE return FALSE
if(guilty_conscience.assigned_role.departments & DEPARTMENT_SECURITY) if(guilty_conscience.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY)
if(!silent) if(!silent)
to_chat(user, span_warning("Members of security are uncorruptable! You cannot declare one evil!")) to_chat(user, span_warning("Members of security are uncorruptable! You cannot declare one evil!"))
return FALSE return FALSE

View File

@@ -149,7 +149,7 @@
/datum/station_trait/deathrattle_department/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned, client/player_client) /datum/station_trait/deathrattle_department/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned, client/player_client)
SIGNAL_HANDLER SIGNAL_HANDLER
if(!(job.departments & department_to_apply_to)) if(!(job.departments_bitflags & department_to_apply_to))
return return
var/obj/item/implant/deathrattle/implant_to_give = new() var/obj/item/implant/deathrattle/implant_to_give = new()
@@ -160,43 +160,43 @@
/datum/station_trait/deathrattle_department/service /datum/station_trait/deathrattle_department/service
trait_flags = NONE trait_flags = NONE
weight = 1 weight = 1
department_to_apply_to = DEPARTMENT_SERVICE department_to_apply_to = DEPARTMENT_BITFLAG_SERVICE
department_name = "Service" department_name = "Service"
/datum/station_trait/deathrattle_department/cargo /datum/station_trait/deathrattle_department/cargo
trait_flags = NONE trait_flags = NONE
weight = 1 weight = 1
department_to_apply_to = DEPARTMENT_CARGO department_to_apply_to = DEPARTMENT_BITFLAG_CARGO
department_name = "Cargo" department_name = "Cargo"
/datum/station_trait/deathrattle_department/engineering /datum/station_trait/deathrattle_department/engineering
trait_flags = NONE trait_flags = NONE
weight = 1 weight = 1
department_to_apply_to = DEPARTMENT_ENGINEERING department_to_apply_to = DEPARTMENT_BITFLAG_ENGINEERING
department_name = "Engineering" department_name = "Engineering"
/datum/station_trait/deathrattle_department/command /datum/station_trait/deathrattle_department/command
trait_flags = NONE trait_flags = NONE
weight = 1 weight = 1
department_to_apply_to = DEPARTMENT_COMMAND department_to_apply_to = DEPARTMENT_BITFLAG_COMMAND
department_name = "Command" department_name = "Command"
/datum/station_trait/deathrattle_department/science /datum/station_trait/deathrattle_department/science
trait_flags = NONE trait_flags = NONE
weight = 1 weight = 1
department_to_apply_to = DEPARTMENT_SCIENCE department_to_apply_to = DEPARTMENT_BITFLAG_SCIENCE
department_name = "Science" department_name = "Science"
/datum/station_trait/deathrattle_department/security /datum/station_trait/deathrattle_department/security
trait_flags = NONE trait_flags = NONE
weight = 1 weight = 1
department_to_apply_to = DEPARTMENT_SECURITY department_to_apply_to = DEPARTMENT_BITFLAG_SECURITY
department_name = "Security" department_name = "Security"
/datum/station_trait/deathrattle_department/medical /datum/station_trait/deathrattle_department/medical
trait_flags = NONE trait_flags = NONE
weight = 1 weight = 1
department_to_apply_to = DEPARTMENT_MEDICAL department_to_apply_to = DEPARTMENT_BITFLAG_MEDICAL
department_name = "Medical" department_name = "Medical"
/datum/station_trait/deathrattle_all /datum/station_trait/deathrattle_all

View File

@@ -96,7 +96,7 @@
return FALSE return FALSE
var/head_check = 0 var/head_check = 0
for(var/mob/player in GLOB.alive_player_list) for(var/mob/player in GLOB.alive_player_list)
if (player.mind.assigned_role.departments & DEPARTMENT_COMMAND) if (player.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
head_check++ head_check++
return (head_check >= required_heads_of_staff) return (head_check >= required_heads_of_staff)

View File

@@ -875,8 +875,7 @@
|| candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \ || candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \
|| candidate.stat == DEAD \ || candidate.stat == DEAD \
|| !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \ || !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \
|| !SSjob.GetJob(candidate.mind.assigned_role) \ || !candidate.mind.assigned_role \
|| (candidate.mind.assigned_role in GLOB.nonhuman_positions) \
) )
candidates -= candidate candidates -= candidate

View File

@@ -97,29 +97,17 @@
return return
/proc/reopen_roundstart_suicide_roles() /proc/reopen_roundstart_suicide_roles()
var/list/valid_positions = list() var/include_command = CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_positions)
valid_positions += GLOB.engineering_positions
valid_positions += GLOB.medical_positions
valid_positions += GLOB.science_positions
valid_positions += GLOB.supply_positions
valid_positions += GLOB.service_positions
valid_positions += GLOB.security_positions
if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_positions))
valid_positions += GLOB.command_positions //add any remaining command positions
else
valid_positions -= GLOB.command_positions //remove all command positions that were added from their respective department positions lists.
var/list/reopened_jobs = list() var/list/reopened_jobs = list()
for(var/X in GLOB.suicided_mob_list)
if(!isliving(X)) for(var/mob/living/quitter in GLOB.suicided_mob_list)
var/datum/job/job = SSjob.GetJob(quitter.job)
if(!job || !(job.job_flags & JOB_REOPEN_ON_ROUNDSTART_LOSS))
continue continue
var/mob/living/L = X if(!include_command && job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
if(L.job in valid_positions)
var/datum/job/J = SSjob.GetJob(L.job)
if(!J)
continue continue
J.current_positions = max(J.current_positions-1, 0) job.current_positions = max(job.current_positions - 1, 0)
reopened_jobs += L.job reopened_jobs += quitter.job
if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report)) if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report))
if(reopened_jobs.len) if(reopened_jobs.len)

View File

@@ -546,6 +546,12 @@ DEFINE_BITFIELD(turret_flags, list(
if(!allowed(perp)) if(!allowed(perp))
return 10 return 10
// If we aren't shooting heads then return a threatcount of 0
if (!(turret_flags & TURRET_FLAG_SHOOT_HEADS))
var/datum/job/apparent_job = SSjob.GetJob(perp.get_assignment())
if(apparent_job?.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
return 0
if(turret_flags & TURRET_FLAG_AUTH_WEAPONS) //check for weapon authorization if(turret_flags & TURRET_FLAG_AUTH_WEAPONS) //check for weapon authorization
if(isnull(perp.wear_id) || istype(perp.wear_id.GetID(), /obj/item/card/id/advanced/chameleon)) if(isnull(perp.wear_id) || istype(perp.wear_id.GetID(), /obj/item/card/id/advanced/chameleon))
@@ -566,10 +572,6 @@ DEFINE_BITFIELD(turret_flags, list(
if((turret_flags & TURRET_FLAG_SHOOT_UNSHIELDED) && (!HAS_TRAIT(perp, TRAIT_MINDSHIELD))) if((turret_flags & TURRET_FLAG_SHOOT_UNSHIELDED) && (!HAS_TRAIT(perp, TRAIT_MINDSHIELD)))
threatcount += 4 threatcount += 4
// If we aren't shooting heads then return a threatcount of 0
if (!(turret_flags & TURRET_FLAG_SHOOT_HEADS) && (perp.get_assignment() in GLOB.command_positions))
return 0
return threatcount return threatcount
/obj/machinery/porta_turret/proc/in_faction(mob/target) /obj/machinery/porta_turret/proc/in_faction(mob/target)

View File

@@ -12,8 +12,10 @@
var/inspiration_available = TRUE //If this banner can be used to inspire crew var/inspiration_available = TRUE //If this banner can be used to inspire crew
var/morale_time = 0 var/morale_time = 0
var/morale_cooldown = 600 //How many deciseconds between uses var/morale_cooldown = 600 //How many deciseconds between uses
var/list/job_loyalties //Mobs with any of these assigned roles will be inspired /// Mobs with assigned roles whose department bitflags match these will be inspired.
var/list/role_loyalties //Mobs with any of these special roles will be inspired var/job_loyalties = NONE
/// Mobs with any of these special roles will be inspired
var/list/role_loyalties
var/warcry var/warcry
/obj/item/banner/examine(mob/user) /obj/item/banner/examine(mob/user)
@@ -38,14 +40,14 @@
morale_time = world.time + morale_cooldown morale_time = world.time + morale_cooldown
var/list/inspired = list() var/list/inspired = list()
var/has_job_loyalties = LAZYLEN(job_loyalties) var/has_job_loyalties = job_loyalties != NONE
var/has_role_loyalties = LAZYLEN(role_loyalties) var/has_role_loyalties = LAZYLEN(role_loyalties)
inspired += user //The user is always inspired, regardless of loyalties inspired += user //The user is always inspired, regardless of loyalties
for(var/mob/living/carbon/human/H in range(4, get_turf(src))) for(var/mob/living/carbon/human/H in range(4, get_turf(src)))
if(H.stat == DEAD || H == user) if(H.stat == DEAD || H == user)
continue continue
if(H.mind && (has_job_loyalties || has_role_loyalties)) if(H.mind && (has_job_loyalties || has_role_loyalties))
if(has_job_loyalties && (H.mind.assigned_role.title in job_loyalties)) if(has_job_loyalties && (H.mind.assigned_role.departments_bitflags & job_loyalties))
inspired += H inspired += H
else if(has_role_loyalties && (H.mind.special_role in role_loyalties)) else if(has_role_loyalties && (H.mind.special_role in role_loyalties))
inspired += H inspired += H
@@ -86,7 +88,7 @@
/obj/item/banner/security/Initialize() /obj/item/banner/security/Initialize()
. = ..() . = ..()
job_loyalties = GLOB.security_positions job_loyalties = DEPARTMENT_BITFLAG_SECURITY
/obj/item/banner/security/mundane /obj/item/banner/security/mundane
inspiration_available = FALSE inspiration_available = FALSE
@@ -110,7 +112,7 @@
/obj/item/banner/medical/Initialize() /obj/item/banner/medical/Initialize()
. = ..() . = ..()
job_loyalties = GLOB.medical_positions job_loyalties = DEPARTMENT_BITFLAG_MEDICAL
/obj/item/banner/medical/mundane /obj/item/banner/medical/mundane
inspiration_available = FALSE inspiration_available = FALSE
@@ -142,7 +144,7 @@
/obj/item/banner/science/Initialize() /obj/item/banner/science/Initialize()
. = ..() . = ..()
job_loyalties = GLOB.science_positions job_loyalties = DEPARTMENT_BITFLAG_SCIENCE
/obj/item/banner/science/mundane /obj/item/banner/science/mundane
inspiration_available = FALSE inspiration_available = FALSE
@@ -169,7 +171,7 @@
/obj/item/banner/cargo/Initialize() /obj/item/banner/cargo/Initialize()
. = ..() . = ..()
job_loyalties = GLOB.supply_positions job_loyalties = DEPARTMENT_BITFLAG_CARGO
/obj/item/banner/cargo/mundane /obj/item/banner/cargo/mundane
inspiration_available = FALSE inspiration_available = FALSE
@@ -193,7 +195,7 @@
/obj/item/banner/engineering/Initialize() /obj/item/banner/engineering/Initialize()
. = ..() . = ..()
job_loyalties = GLOB.engineering_positions job_loyalties = DEPARTMENT_BITFLAG_ENGINEERING
/obj/item/banner/engineering/mundane /obj/item/banner/engineering/mundane
inspiration_available = FALSE inspiration_available = FALSE
@@ -217,7 +219,7 @@
/obj/item/banner/command/Initialize() /obj/item/banner/command/Initialize()
. = ..() . = ..()
job_loyalties = GLOB.command_positions + GLOB.central_command_positions //SKYRAT EDIT ADDITION job_loyalties = DEPARTMENT_BITFLAG_COMMAND | DEPARTMENT_BITFLAG_CENTRAL_COMMAND //SKYRAT EDIT ADDITION
/obj/item/banner/command/mundane /obj/item/banner/command/mundane
inspiration_available = FALSE inspiration_available = FALSE

View File

@@ -130,7 +130,8 @@
var/datum/browser/panel = new(usr, "banpanel", "Banning Panel", 910, panel_height) var/datum/browser/panel = new(usr, "banpanel", "Banning Panel", 910, panel_height)
panel.add_stylesheet("admin_panelscss", 'html/admin/admin_panels.css') panel.add_stylesheet("admin_panelscss", 'html/admin/admin_panels.css')
panel.add_stylesheet("banpanelcss", 'html/admin/banpanel.css') panel.add_stylesheet("banpanelcss", 'html/admin/banpanel.css')
if(usr.client.prefs.tgui_fancy) //some browsers (IE8) have trouble with unsupported css3 elements and DOM methods that break the panel's functionality, so we won't load those if a user is in no frills tgui mode since that's for similar compatability support var/tgui_fancy = usr.client.prefs.tgui_fancy
if(tgui_fancy) //some browsers (IE8) have trouble with unsupported css3 elements and DOM methods that break the panel's functionality, so we won't load those if a user is in no frills tgui mode since that's for similar compatability support
panel.add_stylesheet("admin_panelscss3", 'html/admin/admin_panels_css3.css') panel.add_stylesheet("admin_panelscss3", 'html/admin/admin_panels_css3.css')
panel.add_script("banpaneljs", 'html/admin/banpanel.js') panel.add_script("banpaneljs", 'html/admin/banpanel.js')
var/list/output = list("<form method='get' action='?src=[REF(src)]'>[HrefTokenFormField()]") var/list/output = list("<form method='get' action='?src=[REF(src)]'>[HrefTokenFormField()]")
@@ -226,6 +227,7 @@
</div> </div>
</div> </div>
"} "}
if(edit_id) if(edit_id)
output += /* SKYRAT EDIT CHANGE - MULTISERVER */{"<label class='inputlabel checkbox'>Mirror edits to matching bans output += /* SKYRAT EDIT CHANGE - MULTISERVER */{"<label class='inputlabel checkbox'>Mirror edits to matching bans
<input type='checkbox' id='mirroredit' name='mirroredit' value='1'> <input type='checkbox' id='mirroredit' name='mirroredit' value='1'>
@@ -264,62 +266,41 @@
banned_from += query_get_banned_roles.item[1] banned_from += query_get_banned_roles.item[1]
qdel(query_get_banned_roles) qdel(query_get_banned_roles)
var/break_counter = 0 var/break_counter = 0
output += "<div class='row'><div class='column'><label class='rolegroup command'><input type='checkbox' name='Command' class='hidden' [usr.client.prefs.tgui_fancy ? " onClick='toggle_checkboxes(this, \"_dep\")'" : ""]>Command</label><div class='content'>" output += "<div class='row'>"
//all heads are listed twice so have a javascript call to toggle both their checkboxes when one is pressed
//for simplicity this also includes the captain even though it doesn't do anything for(var/datum/job_department/department as anything in SSjob.joinable_departments)
for(var/job in GLOB.command_positions) var/label_class = department.label_class
var/department_name = department.department_name
output += "<div class='column'><label class='rolegroup [label_class]'>[department_name]</label><div class='content'>"
for(var/datum/job/job_datum as anything in department.department_jobs)
if(break_counter > 0 && (break_counter % 3 == 0)) if(break_counter > 0 && (break_counter % 3 == 0))
output += "<br>" output += "<br>"
output += {"<label class='inputlabel checkbox'>[job]
<input type='checkbox' id='[job]_com' name='[job]' class='Command' value='1'[usr.client.prefs.tgui_fancy ? " onClick='toggle_head(this, \"_dep\")'" : ""]>
<div class='inputbox[(job in banned_from) ? " banned" : ""]'></div></label>
"}
break_counter++ break_counter++
output += "</div></div>" var/job_name = job_datum.title
//SKYRAT EDIT ADDITION if(length(job_datum.departments_list) > 1) //This job is in multiple departments, so we need to check all the boxes.
output += "<div class='row'><div class='column'><label class='rolegroup command'><input type='checkbox' name='Central Command' class='hidden' [usr.client.prefs.tgui_fancy ? " onClick='toggle_checkboxes(this, \"_dep\")'" : ""]>Central Command</label><div class='content'>" // Clicking this will also toggle all the other boxes, minus this one.
//all heads are listed twice so have a javascript call to toggle both their checkboxes when one is pressed var/department_index = job_datum.departments_list.Find(department.type)
//for simplicity this also includes the captain even though it doesn't do anything if(!department_index)
for(var/job in GLOB.central_command_positions) stack_trace("Failed to find a department index for [department.type] in the departments_list of [job_datum.type]")
if(break_counter > 0 && (break_counter % 3 == 0)) output += {"<label class='inputlabel checkbox'>[job_name]
output += "<br>" <input type='checkbox' id='[job_name]_[department_index]' name='[job_name]' class='[label_class]' value='1'[tgui_fancy ? " onClick='toggle_other_checkboxes(this, \"[length(job_datum.departments_list)]\", \"[department_index]\")'" : ""]>
output += {"<label class='inputlabel checkbox'>[job] <div class='inputbox[(job_name in banned_from) ? " banned" : ""]'></div></label>
<input type='checkbox' id='[job]_com' name='[job]' class='Command' value='1'[usr.client.prefs.tgui_fancy ? " onClick='toggle_head(this, \"_dep\")'" : ""]>
<div class='inputbox[(job in banned_from) ? " banned" : ""]'></div></label>
"} "}
break_counter++ else
output += "</div></div>" output += {"<label class='inputlabel checkbox'>[job_name]
//SKYRAT EDIT END <input type='checkbox' name='[job_name]' class='[label_class]' value='1'>
//standard departments all have identical handling <div class='inputbox[(job_name in banned_from) ? " banned" : ""]'></div></label>
var/list/job_lists = list("Security" = GLOB.security_positions,
"Engineering" = GLOB.engineering_positions,
"Medical" = GLOB.medical_positions,
"Science" = GLOB.science_positions,
"Supply" = GLOB.supply_positions)
for(var/department in job_lists)
//the first element is the department head so they need the same javascript call as above
output += "<div class='column'><label class='rolegroup [ckey(department)]'><input type='checkbox' name='[department]' class='hidden' [usr.client.prefs.tgui_fancy ? " onClick='toggle_checkboxes(this, \"_com\")'" : ""]>[department]</label><div class='content'>"
output += {"<label class='inputlabel checkbox'>[job_lists[department][1]]
<input type='checkbox' id='[job_lists[department][1]]_dep' name='[job_lists[department][1]]' class='[department]' value='1'[usr.client.prefs.tgui_fancy ? " onClick='toggle_head(this, \"_com\")'" : ""]>
<div class='inputbox[(job_lists[department][1] in banned_from) ? " banned" : ""]'></div></label>
"} "}
break_counter = 1
for(var/job in job_lists[department] - job_lists[department][1]) //skip the first element since it's already been done
if(break_counter % 3 == 0)
output += "<br>"
output += {"<label class='inputlabel checkbox'>[job]
<input type='checkbox' name='[job]' class='[department]' value='1'>
<div class='inputbox[(job in banned_from) ? " banned" : ""]'></div></label>
"}
break_counter++
output += "</div></div>" output += "</div></div>"
//departments/groups that don't have command staff would throw a javascript error since there's no corresponding reference for toggle_head()
var/list/headless_job_lists = list("Silicon" = GLOB.nonhuman_positions,
"Abstract" = list("Appearance", "Emote", "Deadchat", "OOC"))
for(var/department in headless_job_lists)
output += "<div class='column'><label class='rolegroup [ckey(department)]'><input type='checkbox' name='[department]' class='hidden' [usr.client.prefs.tgui_fancy ? " onClick='toggle_checkboxes(this, \"_com\")'" : ""]>[department]</label><div class='content'>"
break_counter = 0 break_counter = 0
for(var/job in headless_job_lists[department])
var/list/other_job_lists = list(
"Abstract" = list("Appearance", "Emote", "Deadchat", "OOC"),
)
for(var/department in other_job_lists)
output += "<div class='column'><label class='rolegroup [ckey(department)]'>[department]</label><div class='content'>"
break_counter = 0
for(var/job in other_job_lists[department])
if(break_counter > 0 && (break_counter % 3 == 0)) if(break_counter > 0 && (break_counter % 3 == 0))
output += "<br>" output += "<br>"
output += {"<label class='inputlabel checkbox'>[job] output += {"<label class='inputlabel checkbox'>[job]
@@ -329,8 +310,8 @@
break_counter++ break_counter++
output += "</div></div>" output += "</div></div>"
var/list/long_job_lists = list( var/list/long_job_lists = list(
"Service" = GLOB.service_positions,
"Ghost and Other Roles" = list( "Ghost and Other Roles" = list(
ROLE_PAI,
ROLE_BRAINWASHED, ROLE_BRAINWASHED,
ROLE_DEATHSQUAD, ROLE_DEATHSQUAD,
ROLE_DRONE, ROLE_DRONE,
@@ -372,7 +353,7 @@
),//SKYRAT EDIT ADDITION - EXTRA_BANS ),//SKYRAT EDIT ADDITION - EXTRA_BANS
) )
for(var/department in long_job_lists) for(var/department in long_job_lists)
output += "<div class='column'><label class='rolegroup long [ckey(department)]'><input type='checkbox' name='[department]' class='hidden' [usr.client.prefs.tgui_fancy ? " onClick='toggle_checkboxes(this, \"_com\")'" : ""]>[department]</label><div class='content'>" output += "<div class='column'><label class='rolegroup long [ckey(department)]'>[department]</label><div class='content'>"
break_counter = 0 break_counter = 0
for(var/job in long_job_lists[department]) for(var/job in long_job_lists[department])
if(break_counter > 0 && (break_counter % 10 == 0)) if(break_counter > 0 && (break_counter % 10 == 0))
@@ -385,9 +366,10 @@
output += "</div></div>" output += "</div></div>"
output += "</div>" output += "</div>"
output += "</form>" output += "</form>"
panel.set_content(jointext(output, "")) panel.set_content(output.Join())
panel.open() panel.open()
/datum/admins/proc/ban_parse_href(list/href_list) /datum/admins/proc/ban_parse_href(list/href_list)
if(!check_rights(R_BAN)) if(!check_rights(R_BAN))
return return

View File

@@ -154,7 +154,7 @@ GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme)
priority_announce("As punishment for this station's poor productivity when compared to neighbor stations, names and identities will be restricted until further notice.", "Finance Report", SSstation.announcer.get_rand_alert_sound()) priority_announce("As punishment for this station's poor productivity when compared to neighbor stations, names and identities will be restricted until further notice.", "Finance Report", SSstation.announcer.get_rand_alert_sound())
/datum/anonymous_theme/employees/anonymous_name(mob/target) /datum/anonymous_theme/employees/anonymous_name(mob/target)
var/is_head_of_staff = target.mind.assigned_role.departments & DEPARTMENT_COMMAND var/is_head_of_staff = target.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND
var/name = "[is_head_of_staff ? "Manager" : "Employee"] " var/name = "[is_head_of_staff ? "Manager" : "Employee"] "
for(var/i in 1 to 6) for(var/i in 1 to 6)
if(prob(30) || i == 1) if(prob(30) || i == 1)

View File

@@ -162,14 +162,14 @@
return return
var/list/viable_coworkers = list() var/list/viable_coworkers = list()
var/list/all_coworkers = list() var/list/all_coworkers = list()
var/our_departments = oldmind.assigned_role.departments var/our_departments = oldmind.assigned_role.departments_bitflags
for(var/mob/living/carbon/human/human_alive in GLOB.alive_mob_list) for(var/mob/living/carbon/human/human_alive in GLOB.alive_mob_list)
if(!human_alive.mind) if(!human_alive.mind)
continue continue
if(human_alive == oldmind.current || human_alive.mind.assigned_role.faction != FACTION_STATION || human_alive.mind.has_antag_datum(/datum/antagonist/obsessed)) if(human_alive == oldmind.current || human_alive.mind.assigned_role.faction != FACTION_STATION || human_alive.mind.has_antag_datum(/datum/antagonist/obsessed))
continue //the jealousy target has to have a job, and not be the obsession or obsessed. continue //the jealousy target has to have a job, and not be the obsession or obsessed.
all_coworkers += human_alive.mind all_coworkers += human_alive.mind
if(!(our_departments & human_alive.mind.assigned_role.departments)) if(!(our_departments & human_alive.mind.assigned_role.departments_bitflags))
continue continue
viable_coworkers += human_alive.mind viable_coworkers += human_alive.mind

View File

@@ -272,7 +272,7 @@
/datum/antagonist/gang/purple/check_gang_objective() /datum/antagonist/gang/purple/check_gang_objective()
for(var/mob/player as anything in GLOB.player_list) for(var/mob/player as anything in GLOB.player_list)
if(!(player.mind.assigned_role.departments & DEPARTMENT_SECURITY)) if(!(player.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY))
continue continue
if(!player.suiciding && !considered_alive(player)) if(!player.suiciding && !considered_alive(player))
return FALSE return FALSE

View File

@@ -22,7 +22,7 @@
/datum/antagonist/rev/can_be_owned(datum/mind/new_owner) /datum/antagonist/rev/can_be_owned(datum/mind/new_owner)
. = ..() . = ..()
if(.) if(.)
if(new_owner.assigned_role.departments & (DEPARTMENT_COMMAND|DEPARTMENT_CENTRAL_COMMAND)) if(new_owner.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_CENTRAL_COMMAND))//SKYRAT EDIT CHANGE
return FALSE return FALSE
if(new_owner.unconvertable) if(new_owner.unconvertable)
return FALSE return FALSE
@@ -417,7 +417,7 @@
if (isnull(mind)) if (isnull(mind))
continue continue
if (!(mind.assigned_role.departments & (DEPARTMENT_SECURITY|DEPARTMENT_COMMAND|DEPARTMENT_CENTRAL_COMMAND))) //SKYRAT EDIT CHANGE if (!(mind.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_CENTRAL_COMMAND)))//SKYRAT EDIT CHANGE
continue continue
if (mind in ex_revs + ex_headrevs) if (mind in ex_revs + ex_headrevs)
@@ -435,8 +435,9 @@
else else
mind.announce_objectives() mind.announce_objectives()
for (var/job_name in GLOB.command_positions + GLOB.security_positions + GLOB.central_command_positions) //SKYRAT EDIT CHANGE for(var/datum/job/job as anything in SSjob.joinable_occupations)
var/datum/job/job = SSjob.GetJob(job_name) if(!(job.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_CENTRAL_COMMAND)))//SKYRAT EDIT CHANGE
continue
job.allow_bureaucratic_error = FALSE job.allow_bureaucratic_error = FALSE
job.total_positions = 0 job.total_positions = 0

View File

@@ -194,7 +194,7 @@
objectives += kill_objective objectives += kill_objective
return return
if(prob(DOWNLOAD_PROB) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role.departments & DEPARTMENT_SCIENCE)) if(prob(DOWNLOAD_PROB) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SCIENCE))
var/datum/objective/download/download_objective = new var/datum/objective/download/download_objective = new
download_objective.owner = owner download_objective.owner = owner
download_objective.gen_amount_goal() download_objective.gen_amount_goal()

View File

@@ -915,7 +915,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/job/lastJob var/datum/job/lastJob
var/datum/job/overflow_role = SSjob.GetJobType(SSjob.overflow_role) var/datum/job/overflow_role = SSjob.GetJobType(SSjob.overflow_role)
for(var/datum/job/job as anything in sortList(SSjob.joinable_occupations, /proc/cmp_job_display_asc)) for(var/datum/job/job as anything in SSjob.joinable_occupations)
index += 1 index += 1
if(index >= limit) if(index >= limit)
@@ -944,7 +944,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if((job_preferences[overflow_role.title] == JP_LOW) && (rank != overflow_role.title) && !is_banned_from(user.ckey, overflow_role.title)) if((job_preferences[overflow_role.title] == JP_LOW) && (rank != overflow_role.title) && !is_banned_from(user.ckey, overflow_role.title))
HTML += "<font color=orange>[rank]</font></td><td></td></tr>" HTML += "<font color=orange>[rank]</font></td><td></td></tr>"
continue continue
if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs if(job.job_flags & JOB_BOLD_SELECT_TEXT)//Bold head jobs
HTML += "<b><span class='dark'>[rank]</span></b>" HTML += "<b><span class='dark'>[rank]</span></b>"
else else
HTML += "<span class='dark'>[rank]</span>" HTML += "<span class='dark'>[rank]</span>"
@@ -1965,7 +1965,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/datum/preferences/proc/should_be_random_hardcore(datum/job/job, datum/mind/mind) /datum/preferences/proc/should_be_random_hardcore(datum/job/job, datum/mind/mind)
if(!randomise[RANDOM_HARDCORE]) if(!randomise[RANDOM_HARDCORE])
return FALSE return FALSE
if(job.departments & DEPARTMENT_COMMAND) //No command staff if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) //No command staff
return FALSE return FALSE
for(var/datum/antagonist/antag as anything in mind.antag_datums) for(var/datum/antagonist/antag as anything in mind.antag_datums)
if(antag.get_team()) //No team antags if(antag.get_team()) //No team antags

View File

@@ -483,7 +483,7 @@
return 0 return 0
else if("pirate" in H.faction) //can't ransom your fellow pirates to CentCom! else if("pirate" in H.faction) //can't ransom your fellow pirates to CentCom!
return 0 return 0
else if(H.mind.assigned_role.title in GLOB.command_positions) else if(H.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
return 3000 return 3000
else else
return 1000 return 1000

View File

@@ -56,25 +56,37 @@
switch(department) switch(department)
if("Uprising of Assistants") //God help you if("Uprising of Assistants") //God help you
jobs_to_revolt = list("Assistant") jobs_to_revolt += "Assistant"
nation_name = pick("Assa", "Mainte", "Tunnel", "Gris", "Grey", "Liath", "Grigio", "Ass", "Assi") nation_name = pick("Assa", "Mainte", "Tunnel", "Gris", "Grey", "Liath", "Grigio", "Ass", "Assi")
if("Medical") if("Medical")
jobs_to_revolt = GLOB.medical_positions var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/medical)
for(var/datum/job/job as anything in job_department.department_jobs)
jobs_to_revolt += job.title
nation_name = pick("Mede", "Healtha", "Recova", "Chemi", "Viro", "Psych") nation_name = pick("Mede", "Healtha", "Recova", "Chemi", "Viro", "Psych")
if("Engineering") if("Engineering")
jobs_to_revolt = GLOB.engineering_positions var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/engineering)
for(var/datum/job/job as anything in job_department.department_jobs)
jobs_to_revolt += job.title
nation_name = pick("Atomo", "Engino", "Power", "Teleco") nation_name = pick("Atomo", "Engino", "Power", "Teleco")
if("Science") if("Science")
jobs_to_revolt = GLOB.science_positions var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/science)
for(var/datum/job/job as anything in job_department.department_jobs)
jobs_to_revolt += job.title
nation_name = pick("Sci", "Griffa", "Geneti", "Explosi", "Mecha", "Xeno", "Nani", "Cyto") nation_name = pick("Sci", "Griffa", "Geneti", "Explosi", "Mecha", "Xeno", "Nani", "Cyto")
if("Supply") if("Supply")
jobs_to_revolt = GLOB.supply_positions var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/cargo)
for(var/datum/job/job as anything in job_department.department_jobs)
jobs_to_revolt += job.title
nation_name = pick("Cargo", "Guna", "Suppli", "Mule", "Crate", "Ore", "Mini", "Shaf") nation_name = pick("Cargo", "Guna", "Suppli", "Mule", "Crate", "Ore", "Mini", "Shaf")
if("Service") //the few, the proud, the technically aligned if("Service") //the few, the proud, the technically aligned
jobs_to_revolt = GLOB.service_positions.Copy() - list("Assistant", "Prisoner") var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/service)
for(var/datum/job/job as anything in job_department.department_jobs)
jobs_to_revolt += job.title
nation_name = pick("Honka", "Boozo", "Fatu", "Danka", "Mimi", "Libra", "Jani", "Religi") nation_name = pick("Honka", "Boozo", "Fatu", "Danka", "Mimi", "Libra", "Jani", "Religi")
if("Security") if("Security")
jobs_to_revolt = GLOB.security_positions var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/security)
for(var/datum/job/job as anything in job_department.department_jobs)
jobs_to_revolt += job.title
nation_name = pick("Securi", "Beepski", "Shitcuri", "Red", "Stunba", "Flashbango", "Flasha", "Stanfordi") nation_name = pick("Securi", "Beepski", "Shitcuri", "Red", "Stunba", "Flashbango", "Flasha", "Stanfordi")
nation_name += pick("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka") nation_name += pick("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka")

View File

@@ -0,0 +1,109 @@
/// Singleton representing a category of jobs forming a department.
/datum/job_department
/// Department as displayed on different menus.
var/department_name = "No department assigned"
/// Bitflags associated to the specific department.
var/department_bitflags = NONE
/// Typepath of the job datum leading this department.
var/datum/job/department_head = null
/// Experience granted by playing in a job of this department.
var/department_experience_type = null
/// The order in which this department appears on menus, in relation to other departments.
var/display_order = 0
/// The header color to be displayed in the ban panel, classes defined in banpanel.css
var/label_class = "undefineddepartment"
/// The color used in the latejoin menu.
var/latejoin_color = "#6681a5"
/// Job singleton datums associated to this department. Populated on job initialization.
var/list/department_jobs = list()
/// Handles adding jobs to the department and setting up the job bitflags.
/datum/job_department/proc/add_job(datum/job/job)
department_jobs += job
job.departments_bitflags |= department_bitflags
/datum/job_department/command
department_name = DEPARTMENT_COMMAND
department_bitflags = DEPARTMENT_BITFLAG_COMMAND
department_head = /datum/job/captain
department_experience_type = EXP_TYPE_COMMAND
display_order = 1
label_class = "command"
latejoin_color = "#ccccff"
/datum/job_department/security
department_name = DEPARTMENT_SECURITY
department_bitflags = DEPARTMENT_BITFLAG_SECURITY
department_head = /datum/job/head_of_security
department_experience_type = EXP_TYPE_SECURITY
display_order = 2
label_class = "security"
latejoin_color = "#ffdddd"
/datum/job_department/engineering
department_name = DEPARTMENT_ENGINEERING
department_bitflags = DEPARTMENT_BITFLAG_ENGINEERING
department_head = /datum/job/chief_engineer
department_experience_type = EXP_TYPE_ENGINEERING
display_order = 3
label_class = "engineering"
latejoin_color = "#ffeeaa"
/datum/job_department/medical
department_name = DEPARTMENT_MEDICAL
department_bitflags = DEPARTMENT_BITFLAG_MEDICAL
department_head = /datum/job/chief_medical_officer
department_experience_type = EXP_TYPE_MEDICAL
display_order = 4
label_class = "medical"
latejoin_color = "#ffddf0"
/datum/job_department/science
department_name = DEPARTMENT_SCIENCE
department_bitflags = DEPARTMENT_BITFLAG_SCIENCE
department_head = /datum/job/research_director
department_experience_type = EXP_TYPE_SCIENCE
display_order = 5
label_class = "science"
latejoin_color = "#ffddff"
/datum/job_department/cargo
department_name = DEPARTMENT_CARGO
department_bitflags = DEPARTMENT_BITFLAG_CARGO
department_head = /datum/job/quartermaster
department_experience_type = EXP_TYPE_SUPPLY
display_order = 6
label_class = "supply"
latejoin_color = "#ddddff"
/datum/job_department/service
department_name = DEPARTMENT_SERVICE
department_bitflags = DEPARTMENT_BITFLAG_SERVICE
department_head = /datum/job/head_of_personnel
department_experience_type = EXP_TYPE_SERVICE
display_order = 7
label_class = "service"
latejoin_color = "#bbe291"
/datum/job_department/silicon
department_name = DEPARTMENT_SILICON
department_bitflags = DEPARTMENT_BITFLAG_SILICON
department_head = /datum/job/ai
department_experience_type = EXP_TYPE_SILICON
display_order = 8
label_class = "silicon"
latejoin_color = "#ccffcc"
/// Catch-all department for undefined jobs.
/datum/job_department/undefined
display_order = 10

View File

@@ -1,6 +1,7 @@
GLOBAL_LIST_EMPTY(exp_to_update) GLOBAL_LIST_EMPTY(exp_to_update)
GLOBAL_PROTECT(exp_to_update) GLOBAL_PROTECT(exp_to_update)
#define IS_XP_LOCKED(job) (exp_requirements && ((exp_required_type_department && CONFIG_GET(flag/use_exp_restrictions_heads)) || (exp_required_type && CONFIG_GET(flag/use_exp_restrictions_other))))
// Procs // Procs
/datum/job/proc/required_playtime_remaining(client/C) /datum/job/proc/required_playtime_remaining(client/C)
if(!C) if(!C)
@@ -9,9 +10,7 @@ GLOBAL_PROTECT(exp_to_update)
return 0 return 0
if(!SSdbcore.Connect()) if(!SSdbcore.Connect())
return 0 return 0
if(!exp_requirements || !exp_type) if(!IS_XP_LOCKED(src))
return 0
if(!job_is_xp_locked(src.title))
return 0 return 0
if(CONFIG_GET(flag/use_exp_restrictions_admin_bypass) && check_rights_for(C,R_ADMIN)) if(CONFIG_GET(flag/use_exp_restrictions_admin_bypass) && check_rights_for(C,R_ADMIN))
return 0 return 0
@@ -24,37 +23,32 @@ GLOBAL_PROTECT(exp_to_update)
return 0 return 0
else else
return (job_requirement - my_exp) return (job_requirement - my_exp)
#undef IS_XP_LOCKED
/datum/job/proc/get_exp_req_amount() /datum/job/proc/get_exp_req_amount()
if(title in (GLOB.central_command_positions | GLOB.command_positions | list("AI"))) //SKYRAT EDIT CHANGE if(exp_required_type_department)
var/uerhh = CONFIG_GET(number/use_exp_restrictions_heads_hours) var/uerhh = CONFIG_GET(number/use_exp_restrictions_heads_hours)
if(uerhh) if(uerhh)
return uerhh * 60 return uerhh * 60
return exp_requirements return exp_requirements
/datum/job/proc/get_exp_req_type()
if(title in (GLOB.central_command_positions | GLOB.command_positions | list("AI"))) //SKYRAT EDIT CHANGE
if(CONFIG_GET(flag/use_exp_restrictions_heads_department) && exp_type_department)
return exp_type_department
return exp_type
/proc/job_is_xp_locked(jobtitle) /datum/job/proc/get_exp_req_type()
if(!CONFIG_GET(flag/use_exp_restrictions_heads) && (jobtitle in (GLOB.central_command_positions | GLOB.command_positions | list("AI")))) //SKYRAT EDIT CHANGE if(exp_required_type_department && CONFIG_GET(flag/use_exp_restrictions_heads_department))
return FALSE return exp_required_type_department
if(!CONFIG_GET(flag/use_exp_restrictions_other) && !(jobtitle in (GLOB.central_command_positions | GLOB.command_positions | list("AI")))) //SKYRAT EDIT CHANGE return exp_required_type
return FALSE
return TRUE
/client/proc/calc_exp_type(exptype) /client/proc/calc_exp_type(exptype)
var/list/explist = prefs.exp.Copy() var/list/job_list = SSjob.experience_jobs_map[exptype]
var/amount = 0 if(!job_list)
var/list/typelist = GLOB.exp_jobsmap[exptype]
if(!typelist)
return -1 return -1
for(var/job in typelist["titles"]) var/list/exp_map = prefs.exp.Copy()
if(job in explist) . = 0
amount += explist[job] for(var/datum/job/job as anything in job_list)
return amount . += exp_map[job.title]
/client/proc/get_exp_living(pure_numeric = FALSE) /client/proc/get_exp_living(pure_numeric = FALSE)
if(!prefs.exp || !prefs.exp[EXP_TYPE_LIVING]) if(!prefs.exp || !prefs.exp[EXP_TYPE_LIVING])

View File

@@ -48,10 +48,14 @@
/// The job's outfit that will be assigned for plasmamen. /// The job's outfit that will be assigned for plasmamen.
var/plasmaman_outfit = null var/plasmaman_outfit = null
/// Minutes of experience-time required to play in this job. The type is determined by [exp_required_type] and [exp_required_type_department] depending on configs.
var/exp_requirements = 0 var/exp_requirements = 0
/// Experience required to play this job, if the config is enabled, and `exp_required_type_department` is not enabled with the proper config.
var/exp_type = "" var/exp_required_type = ""
var/exp_type_department = "" /// Department experience required to play this job, if the config is enabled.
var/exp_required_type_department = ""
/// Experience type granted by playing in this job.
var/exp_granted_type = ""
var/paycheck = PAYCHECK_MINIMAL var/paycheck = PAYCHECK_MINIMAL
var/paycheck_department = ACCOUNT_CIV var/paycheck_department = ACCOUNT_CIV
@@ -73,8 +77,10 @@
/// If this job's mail goodies compete with generic goodies. /// If this job's mail goodies compete with generic goodies.
var/exclusive_mail_goodies = FALSE var/exclusive_mail_goodies = FALSE
///Bitfield of departments this job belongs wit /// Bitfield of departments this job belongs to. These get setup when adding the job into the department, on job datum creation.
var/departments = NONE var/departments_bitflags = NONE
/// Lazy list with the departments this job belongs to.
var/list/departments_list = null
/// Should this job be allowed to be picked for the bureaucratic error event? /// Should this job be allowed to be picked for the bureaucratic error event?
var/allow_bureaucratic_error = TRUE var/allow_bureaucratic_error = TRUE
@@ -85,7 +91,7 @@
/// List of family heirlooms this job can get with the family heirloom quirk. List of types. /// List of family heirlooms this job can get with the family heirloom quirk. List of types.
var/list/family_heirlooms var/list/family_heirlooms
/// All values = (JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK) /// All values = (JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT)
var/job_flags = NONE var/job_flags = NONE
/// Multiplier for general usage of the voice of god. /// Multiplier for general usage of the voice of god.
@@ -396,7 +402,7 @@
if(!player_client) if(!player_client)
return // Disconnected while checking for the appearance ban. return // Disconnected while checking for the appearance ban.
if(fully_randomize) if(fully_randomize)
if(CONFIG_GET(flag/enforce_human_authority) && (job.departments & DEPARTMENT_COMMAND)) if(CONFIG_GET(flag/enforce_human_authority) && (job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND))
if(player_client.prefs.pref_species.id != "human") //SKYRAT EDIT CHANGE _ WARNING YOU MUST CHANGE THIS WHEN SPECIES DEFINES ARE COMPLETED!!! if(player_client.prefs.pref_species.id != "human") //SKYRAT EDIT CHANGE _ WARNING YOU MUST CHANGE THIS WHEN SPECIES DEFINES ARE COMPLETED!!!
player_client.prefs.pref_species = new /datum/species/human player_client.prefs.pref_species = new /datum/species/human
player_client.prefs.randomise_appearance_prefs(~RANDOMIZE_SPECIES) player_client.prefs.randomise_appearance_prefs(~RANDOMIZE_SPECIES)
@@ -407,7 +413,7 @@
fully_replace_character_name(null, GLOB.current_anonymous_theme.anonymous_name(src)) fully_replace_character_name(null, GLOB.current_anonymous_theme.anonymous_name(src))
else else
var/is_antag = (player_client.mob.mind in GLOB.pre_setup_antags) var/is_antag = (player_client.mob.mind in GLOB.pre_setup_antags)
if(CONFIG_GET(flag/enforce_human_authority) && (job.departments & DEPARTMENT_COMMAND)) if(CONFIG_GET(flag/enforce_human_authority) && (job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND))
player_client.prefs.randomise[RANDOM_SPECIES] = FALSE player_client.prefs.randomise[RANDOM_SPECIES] = FALSE
if(player_client.prefs.pref_species.id != "human") //SKYRAT EDIT CHANGE _ WARNING YOU MUST CHANGE THIS WHEN SPECIES DEFINES ARE COMPLETED!!! if(player_client.prefs.pref_species.id != "human") //SKYRAT EDIT CHANGE _ WARNING YOU MUST CHANGE THIS WHEN SPECIES DEFINES ARE COMPLETED!!!
player_client.prefs.pref_species = new /datum/species/human player_client.prefs.pref_species = new /datum/species/human

View File

@@ -10,13 +10,16 @@
req_admin_notify = TRUE req_admin_notify = TRUE
minimal_player_age = 30 minimal_player_age = 30
exp_requirements = 180 exp_requirements = 180
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SILICON exp_required_type_department = EXP_TYPE_SILICON
exp_granted_type = EXP_TYPE_CREW
display_order = JOB_DISPLAY_ORDER_AI display_order = JOB_DISPLAY_ORDER_AI
allow_bureaucratic_error = FALSE allow_bureaucratic_error = FALSE
departments = DEPARTMENT_SILICON departments_list = list(
/datum/job_department/silicon,
)
random_spawns_possible = FALSE random_spawns_possible = FALSE
job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK | JOB_BOLD_SELECT_TEXT
var/do_special_check = TRUE var/do_special_check = TRUE

View File

@@ -8,10 +8,10 @@ Assistant
spawn_positions = 5 spawn_positions = 5
supervisors = "absolutely everyone" supervisors = "absolutely everyone"
selection_color = "#dddddd" selection_color = "#dddddd"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/assistant outfit = /datum/outfit/job/assistant
plasmaman_outfit = /datum/outfit/plasmaman plasmaman_outfit = /datum/outfit/plasmaman
paycheck = PAYCHECK_ASSISTANT // Get a job. Job reassignment changes your paycheck now. Get over it. paycheck = PAYCHECK_ASSISTANT // Get a job. Job reassignment changes your paycheck now. Get over it.
departments = DEPARTMENT_SERVICE
liver_traits = list(TRAIT_GREYTIDE_METABOLISM) liver_traits = list(TRAIT_GREYTIDE_METABOLISM)
@@ -29,7 +29,7 @@ Assistant
/obj/item/crowbar/large = 1 /obj/item/crowbar/large = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/assistant /datum/outfit/job/assistant

View File

@@ -7,7 +7,8 @@
supervisors = "the chief engineer" supervisors = "the chief engineer"
selection_color = "#fff5cc" selection_color = "#fff5cc"
exp_requirements = 60 exp_requirements = 60
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/atmos outfit = /datum/outfit/job/atmos
plasmaman_outfit = /datum/outfit/plasmaman/atmospherics plasmaman_outfit = /datum/outfit/plasmaman/atmospherics
@@ -19,11 +20,13 @@
display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
bounty_types = CIV_JOB_ENG bounty_types = CIV_JOB_ENG
departments = DEPARTMENT_ENGINEERING departments_list = list(
/datum/job_department/engineering,
)
family_heirlooms = list(/obj/item/lighter, /obj/item/lighter/greyscale, /obj/item/storage/box/matches) family_heirlooms = list(/obj/item/lighter, /obj/item/lighter/greyscale, /obj/item/storage/box/matches)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/atmos /datum/outfit/job/atmos

View File

@@ -6,6 +6,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/bartender outfit = /datum/outfit/job/bartender
plasmaman_outfit = /datum/outfit/plasmaman/bar plasmaman_outfit = /datum/outfit/plasmaman/bar
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_BARTENDER display_order = JOB_DISPLAY_ORDER_BARTENDER
bounty_types = CIV_JOB_DRINK bounty_types = CIV_JOB_DRINK
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/reagent_containers/glass/rag, /obj/item/clothing/head/that, /obj/item/reagent_containers/food/drinks/shaker) family_heirlooms = list(/obj/item/reagent_containers/glass/rag, /obj/item/clothing/head/that, /obj/item/reagent_containers/food/drinks/shaker)
@@ -25,7 +28,7 @@
/obj/item/stack/sheet/mineral/uranium = 10, /obj/item/stack/sheet/mineral/uranium = 10,
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/job/bartender/award_service(client/winner, award) /datum/job/bartender/award_service(client/winner, award)

View File

@@ -6,6 +6,7 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/botanist outfit = /datum/outfit/job/botanist
plasmaman_outfit = /datum/outfit/plasmaman/botany plasmaman_outfit = /datum/outfit/plasmaman/botany
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_BOTANIST display_order = JOB_DISPLAY_ORDER_BOTANIST
bounty_types = CIV_JOB_GROW bounty_types = CIV_JOB_GROW
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/toy/plush/beeplushie) family_heirlooms = list(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/toy/plush/beeplushie)
@@ -27,7 +30,7 @@
/obj/item/food/monkeycube/bee = 2 /obj/item/food/monkeycube/bee = 2
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/botanist /datum/outfit/job/botanist

View File

@@ -10,8 +10,9 @@
req_admin_notify = 1 req_admin_notify = 1
minimal_player_age = 14 minimal_player_age = 14
exp_requirements = 180 exp_requirements = 180
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_COMMAND exp_required_type_department = EXP_TYPE_COMMAND
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/captain outfit = /datum/outfit/job/captain
plasmaman_outfit = /datum/outfit/plasmaman/captain plasmaman_outfit = /datum/outfit/plasmaman/captain
@@ -22,7 +23,9 @@
liver_traits = list(TRAIT_ROYAL_METABOLISM) liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CAPTAIN display_order = JOB_DISPLAY_ORDER_CAPTAIN
departments = DEPARTMENT_COMMAND departments_list = list(
/datum/job_department/command,
)
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold) family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold)
@@ -32,7 +35,7 @@
/obj/item/reagent_containers/food/drinks/bottle/champagne = 10 /obj/item/reagent_containers/food/drinks/bottle/champagne = 10
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 1.4 //Command staff has authority voice_of_god_power = 1.4 //Command staff has authority

View File

@@ -7,6 +7,7 @@
//supervisors = "the quartermaster and the head of personnel" //ORIGINAL //supervisors = "the quartermaster and the head of personnel" //ORIGINAL
supervisors = "the quartermaster" //SKYRAT EDIT CHANGE supervisors = "the quartermaster" //SKYRAT EDIT CHANGE
selection_color = "#dcba97" selection_color = "#dcba97"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/cargo_tech outfit = /datum/outfit/job/cargo_tech
plasmaman_outfit = /datum/outfit/plasmaman/cargo plasmaman_outfit = /datum/outfit/plasmaman/cargo
@@ -15,7 +16,9 @@
paycheck_department = ACCOUNT_CAR paycheck_department = ACCOUNT_CAR
display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
bounty_types = CIV_JOB_RANDOM bounty_types = CIV_JOB_RANDOM
departments = DEPARTMENT_CARGO departments_list = list(
/datum/job_department/cargo,
)
family_heirlooms = list(/obj/item/clipboard) family_heirlooms = list(/obj/item/clipboard)
@@ -27,7 +30,7 @@
/obj/item/gun/ballistic/rifle/boltaction = 1 /obj/item/gun/ballistic/rifle/boltaction = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/cargo_tech /datum/outfit/job/cargo_tech

View File

@@ -6,6 +6,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/chaplain outfit = /datum/outfit/job/chaplain
plasmaman_outfit = /datum/outfit/plasmaman/chaplain plasmaman_outfit = /datum/outfit/plasmaman/chaplain
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_CHAPLAIN display_order = JOB_DISPLAY_ORDER_CHAPLAIN
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/toy/windup_toolbox, /obj/item/reagent_containers/food/drinks/bottle/holywater) family_heirlooms = list(/obj/item/toy/windup_toolbox, /obj/item/reagent_containers/food/drinks/bottle/holywater)
@@ -26,7 +29,7 @@
/obj/item/toy/plush/ratplush = 1 /obj/item/toy/plush/ratplush = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 2 //Chaplains are very good at speaking with the voice of god voice_of_god_power = 2 //Chaplains are very good at speaking with the voice of god

View File

@@ -6,8 +6,9 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
exp_type = EXP_TYPE_CREW
exp_requirements = 60 exp_requirements = 60
exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/chemist outfit = /datum/outfit/job/chemist
plasmaman_outfit = /datum/outfit/plasmaman/chemist plasmaman_outfit = /datum/outfit/plasmaman/chemist
@@ -19,7 +20,9 @@
display_order = JOB_DISPLAY_ORDER_CHEMIST display_order = JOB_DISPLAY_ORDER_CHEMIST
bounty_types = CIV_JOB_CHEM bounty_types = CIV_JOB_CHEM
departments = DEPARTMENT_MEDICAL departments_list = list(
/datum/job_department/medical,
)
family_heirlooms = list(/obj/item/book/manual/wiki/chemistry, /obj/item/ph_booklet) family_heirlooms = list(/obj/item/book/manual/wiki/chemistry, /obj/item/ph_booklet)
@@ -30,7 +33,7 @@
/obj/item/paper/secretrecipe = 1 /obj/item/paper/secretrecipe = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/chemist /datum/outfit/job/chemist

View File

@@ -11,12 +11,16 @@
req_admin_notify = 1 req_admin_notify = 1
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 180 exp_requirements = 180
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_ENGINEERING exp_required_type_department = EXP_TYPE_ENGINEERING
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/ce outfit = /datum/outfit/job/ce
plasmaman_outfit = /datum/outfit/plasmaman/chief_engineer plasmaman_outfit = /datum/outfit/plasmaman/chief_engineer
departments = DEPARTMENT_ENGINEERING | DEPARTMENT_COMMAND departments_list = list(
/datum/job_department/engineering,
/datum/job_department/command,
)
paycheck = PAYCHECK_COMMAND paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_ENG paycheck_department = ACCOUNT_ENG
@@ -37,7 +41,7 @@
/obj/effect/spawner/lootdrop/space/fancytool/engineonly = 3 /obj/effect/spawner/lootdrop/space/fancytool/engineonly = 3
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 1.4 //Command staff has authority voice_of_god_power = 1.4 //Command staff has authority

View File

@@ -11,12 +11,16 @@
req_admin_notify = 1 req_admin_notify = 1
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 180 exp_requirements = 180
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_MEDICAL exp_required_type_department = EXP_TYPE_MEDICAL
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/cmo outfit = /datum/outfit/job/cmo
plasmaman_outfit = /datum/outfit/plasmaman/chief_medical_officer plasmaman_outfit = /datum/outfit/plasmaman/chief_medical_officer
departments = DEPARTMENT_MEDICAL | DEPARTMENT_COMMAND departments_list = list(
/datum/job_department/medical,
/datum/job_department/command,
)
paycheck = PAYCHECK_COMMAND paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_MED paycheck_department = ACCOUNT_MED
@@ -34,7 +38,7 @@
) )
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom) family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 1.4 //Command staff has authority voice_of_god_power = 1.4 //Command staff has authority

View File

@@ -6,6 +6,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/clown outfit = /datum/outfit/job/clown
plasmaman_outfit = /datum/outfit/plasmaman/clown plasmaman_outfit = /datum/outfit/plasmaman/clown
@@ -16,7 +17,9 @@
liver_traits = list(TRAIT_COMEDY_METABOLISM) liver_traits = list(TRAIT_COMEDY_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CLOWN display_order = JOB_DISPLAY_ORDER_CLOWN
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
mail_goodies = list( mail_goodies = list(
/obj/item/food/grown/banana = 100, /obj/item/food/grown/banana = 100,
@@ -28,9 +31,9 @@
family_heirlooms = list(/obj/item/bikehorn/golden) family_heirlooms = list(/obj/item/bikehorn/golden)
veteran_only = TRUE // SKYRAT EDIT ADDITION job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE veteran_only = TRUE // SKYRAT EDIT ADDITION
/datum/job/clown/after_spawn(mob/living/spawned, client/player_client) /datum/job/clown/after_spawn(mob/living/spawned, client/player_client)

View File

@@ -6,6 +6,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
var/cooks = 0 //Counts cooks amount var/cooks = 0 //Counts cooks amount
/// List of areas that are counted as the kitchen for the purposes of CQC. Defaults to just the kitchen. Mapping configs can and should override this. /// List of areas that are counted as the kitchen for the purposes of CQC. Defaults to just the kitchen. Mapping configs can and should override this.
var/list/kitchen_areas = list(/area/service/kitchen) var/list/kitchen_areas = list(/area/service/kitchen)
@@ -20,11 +21,13 @@
display_order = JOB_DISPLAY_ORDER_COOK display_order = JOB_DISPLAY_ORDER_COOK
bounty_types = CIV_JOB_CHEF bounty_types = CIV_JOB_CHEF
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat) family_heirlooms = list(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/job/cook/New() /datum/job/cook/New()

View File

@@ -6,6 +6,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/curator outfit = /datum/outfit/job/curator
plasmaman_outfit = /datum/outfit/plasmaman/curator plasmaman_outfit = /datum/outfit/plasmaman/curator
@@ -14,11 +15,13 @@
paycheck_department = ACCOUNT_SRV paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_CURATOR display_order = JOB_DISPLAY_ORDER_CURATOR
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/pen/fountain, /obj/item/storage/pill_bottle/dice) family_heirlooms = list(/obj/item/pen/fountain, /obj/item/storage/pill_bottle/dice)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_silence_power = 3 voice_of_god_silence_power = 3

View File

@@ -9,10 +9,14 @@
spawn_type = /mob/living/silicon/robot spawn_type = /mob/living/silicon/robot
minimal_player_age = 21 minimal_player_age = 21
exp_requirements = 120 exp_requirements = 120
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
display_order = JOB_DISPLAY_ORDER_CYBORG display_order = JOB_DISPLAY_ORDER_CYBORG
departments = DEPARTMENT_SILICON
departments_list = list(
/datum/job_department/silicon,
)
random_spawns_possible = FALSE random_spawns_possible = FALSE
job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK

View File

@@ -9,11 +9,14 @@
selection_color = "#ffeeee" selection_color = "#ffeeee"
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 300 exp_requirements = 300
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/detective outfit = /datum/outfit/job/detective
plasmaman_outfit = /datum/outfit/plasmaman/detective plasmaman_outfit = /datum/outfit/plasmaman/detective
departments = DEPARTMENT_SECURITY departments_list = list(
/datum/job_department/security,
)
paycheck = PAYCHECK_MEDIUM paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SEC paycheck_department = ACCOUNT_SEC
@@ -36,7 +39,7 @@
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey) family_heirlooms = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/detective /datum/outfit/job/detective

View File

@@ -6,12 +6,15 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the research director" supervisors = "the research director"
selection_color = "#ffeeff" selection_color = "#ffeeff"
exp_type = EXP_TYPE_CREW
exp_requirements = 60 exp_requirements = 60
exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/geneticist outfit = /datum/outfit/job/geneticist
plasmaman_outfit = /datum/outfit/plasmaman/genetics plasmaman_outfit = /datum/outfit/plasmaman/genetics
departments = DEPARTMENT_MEDICAL departments_list = list(
/datum/job_department/medical,
)
paycheck = PAYCHECK_MEDIUM paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SCI paycheck_department = ACCOUNT_SCI
@@ -25,7 +28,7 @@
family_heirlooms = list(/obj/item/clothing/under/shorts/purple) family_heirlooms = list(/obj/item/clothing/under/shorts/purple)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/geneticist /datum/outfit/job/geneticist

View File

@@ -12,12 +12,16 @@
req_admin_notify = 1 req_admin_notify = 1
minimal_player_age = 10 minimal_player_age = 10
exp_requirements = 180 exp_requirements = 180
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SERVICE exp_required_type_department = EXP_TYPE_SERVICE
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/hop outfit = /datum/outfit/job/hop
plasmaman_outfit = /datum/outfit/plasmaman/head_of_personnel plasmaman_outfit = /datum/outfit/plasmaman/head_of_personnel
departments = DEPARTMENT_COMMAND | DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
/datum/job_department/command,
)
paycheck = PAYCHECK_COMMAND paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_SRV paycheck_department = ACCOUNT_SRV
@@ -34,7 +38,7 @@
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/trophy/silver_cup) family_heirlooms = list(/obj/item/reagent_containers/food/drinks/trophy/silver_cup)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 1.4 //Command staff has authority voice_of_god_power = 1.4 //Command staff has authority

View File

@@ -11,12 +11,16 @@
req_admin_notify = 1 req_admin_notify = 1
minimal_player_age = 14 minimal_player_age = 14
exp_requirements = 300 exp_requirements = 300
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SECURITY exp_required_type_department = EXP_TYPE_SECURITY
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/hos outfit = /datum/outfit/job/hos
plasmaman_outfit = /datum/outfit/plasmaman/head_of_security plasmaman_outfit = /datum/outfit/plasmaman/head_of_security
departments = DEPARTMENT_SECURITY | DEPARTMENT_COMMAND departments_list = list(
/datum/job_department/security,
/datum/job_department/command,
)
mind_traits = list(TRAIT_DONUT_LOVER) mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM, TRAIT_ROYAL_METABOLISM) liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM, TRAIT_ROYAL_METABOLISM)
@@ -29,7 +33,7 @@
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law) family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 1.4 //Command staff has authority voice_of_god_power = 1.4 //Command staff has authority

View File

@@ -6,6 +6,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/janitor outfit = /datum/outfit/job/janitor
plasmaman_outfit = /datum/outfit/plasmaman/janitor plasmaman_outfit = /datum/outfit/plasmaman/janitor
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_JANITOR display_order = JOB_DISPLAY_ORDER_JANITOR
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/mop, /obj/item/clothing/suit/caution, /obj/item/reagent_containers/glass/bucket, /obj/item/paper/fluff/stations/soap) family_heirlooms = list(/obj/item/mop, /obj/item/clothing/suit/caution, /obj/item/reagent_containers/glass/bucket, /obj/item/paper/fluff/stations/soap)
@@ -24,7 +27,7 @@
/obj/item/lightreplacer = 10 /obj/item/lightreplacer = 10
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/janitor /datum/outfit/job/janitor

View File

@@ -6,7 +6,7 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
var/lawyers = 0 //Counts lawyer amount exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/lawyer outfit = /datum/outfit/job/lawyer
plasmaman_outfit = /datum/outfit/plasmaman/bar plasmaman_outfit = /datum/outfit/plasmaman/bar
@@ -18,11 +18,13 @@
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
display_order = JOB_DISPLAY_ORDER_LAWYER display_order = JOB_DISPLAY_ORDER_LAWYER
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/gavelhammer, /obj/item/book/manual/wiki/security_space_law) family_heirlooms = list(/obj/item/gavelhammer, /obj/item/book/manual/wiki/security_space_law)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/lawyer /datum/outfit/job/lawyer

View File

@@ -6,6 +6,7 @@
spawn_positions = 3 spawn_positions = 3
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/doctor outfit = /datum/outfit/job/doctor
plasmaman_outfit = /datum/outfit/plasmaman/medical plasmaman_outfit = /datum/outfit/plasmaman/medical
@@ -17,7 +18,9 @@
display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR
bounty_types = CIV_JOB_MED bounty_types = CIV_JOB_MED
departments = DEPARTMENT_MEDICAL departments_list = list(
/datum/job_department/medical,
)
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom) family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
@@ -31,7 +34,7 @@
/obj/effect/spawner/lootdrop/memeorgans = 1 /obj/effect/spawner/lootdrop/memeorgans = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/doctor /datum/outfit/job/doctor

View File

@@ -6,6 +6,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel" supervisors = "the head of personnel"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/mime outfit = /datum/outfit/job/mime
plasmaman_outfit = /datum/outfit/plasmaman/mime plasmaman_outfit = /datum/outfit/plasmaman/mime
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_MIME display_order = JOB_DISPLAY_ORDER_MIME
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/food/baguette) family_heirlooms = list(/obj/item/food/baguette)
@@ -25,7 +28,7 @@
/obj/item/book/mimery = 1, /obj/item/book/mimery = 1,
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 0.5 //Why are you speaking voice_of_god_power = 0.5 //Why are you speaking
voice_of_god_silence_power = 3 voice_of_god_silence_power = 3

View File

@@ -6,6 +6,7 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/paramedic outfit = /datum/outfit/job/paramedic
plasmaman_outfit = /datum/outfit/plasmaman/paramedic plasmaman_outfit = /datum/outfit/plasmaman/paramedic
@@ -17,7 +18,9 @@
display_order = JOB_DISPLAY_ORDER_PARAMEDIC display_order = JOB_DISPLAY_ORDER_PARAMEDIC
bounty_types = CIV_JOB_MED bounty_types = CIV_JOB_MED
departments = DEPARTMENT_MEDICAL departments_list = list(
/datum/job_department/medical,
)
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom) family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
@@ -30,7 +33,7 @@
/obj/item/reagent_containers/hypospray/medipen/survival/luxury = 5 /obj/item/reagent_containers/hypospray/medipen/survival/luxury = 5
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/paramedic /datum/outfit/job/paramedic

View File

@@ -6,6 +6,7 @@
spawn_positions = 2 spawn_positions = 2
supervisors = "the security team" supervisors = "the security team"
selection_color = "#ffe1c3" selection_color = "#ffe1c3"
exp_granted_type = EXP_TYPE_CREW
paycheck = PAYCHECK_PRISONER paycheck = PAYCHECK_PRISONER
outfit = /datum/outfit/job/prisoner outfit = /datum/outfit/job/prisoner

View File

@@ -6,6 +6,7 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the head of personnel and the chief medical officer" supervisors = "the head of personnel and the chief medical officer"
selection_color = "#bbe291" selection_color = "#bbe291"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/psychologist outfit = /datum/outfit/job/psychologist
plasmaman_outfit = /datum/outfit/plasmaman/psychologist plasmaman_outfit = /datum/outfit/plasmaman/psychologist
@@ -16,7 +17,9 @@
liver_traits = list(TRAIT_MEDICAL_METABOLISM) liver_traits = list(TRAIT_MEDICAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_PSYCHOLOGIST display_order = JOB_DISPLAY_ORDER_PSYCHOLOGIST
departments = DEPARTMENT_SERVICE departments_list = list(
/datum/job_department/service,
)
family_heirlooms = list(/obj/item/storage/pill_bottle) family_heirlooms = list(/obj/item/storage/pill_bottle)
@@ -26,7 +29,7 @@
/obj/item/gun/syringe = 1 /obj/item/gun/syringe = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/psychologist /datum/outfit/job/psychologist

View File

@@ -8,7 +8,8 @@
//supervisors = "the head of personnel" //ORIGINAL //supervisors = "the head of personnel" //ORIGINAL
supervisors = "the captain" //SKYRAT EDIT CHANGE supervisors = "the captain" //SKYRAT EDIT CHANGE
selection_color = "#d7b088" selection_color = "#d7b088"
exp_type_department = EXP_TYPE_SUPPLY // This is so the jobs menu can work properly exp_required_type_department = EXP_TYPE_SUPPLY
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/quartermaster outfit = /datum/outfit/job/quartermaster
plasmaman_outfit = /datum/outfit/plasmaman/cargo plasmaman_outfit = /datum/outfit/plasmaman/cargo
@@ -21,13 +22,16 @@
display_order = JOB_DISPLAY_ORDER_QUARTERMASTER display_order = JOB_DISPLAY_ORDER_QUARTERMASTER
bounty_types = CIV_JOB_RANDOM bounty_types = CIV_JOB_RANDOM
departments = DEPARTMENT_CARGO | DEPARTMENT_COMMAND // SKYRAT EDIT departments_list = list(
/datum/job_department/cargo,
/datum/job_department/command, //SKYRAT EDIT CHANGE
)
family_heirlooms = list(/obj/item/stamp, /obj/item/stamp/denied) family_heirlooms = list(/obj/item/stamp, /obj/item/stamp/denied)
mail_goodies = list( mail_goodies = list(
/obj/item/circuitboard/machine/emitter = 3 /obj/item/circuitboard/machine/emitter = 3
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/job/quartermaster/after_spawn(mob/living/carbon/human/H, mob/M) //SKYRAT EDIT - Gubman 3.1 /datum/job/quartermaster/after_spawn(mob/living/carbon/human/H, mob/M) //SKYRAT EDIT - Gubman 3.1

View File

@@ -10,13 +10,17 @@
selection_color = "#ffddff" selection_color = "#ffddff"
req_admin_notify = 1 req_admin_notify = 1
minimal_player_age = 7 minimal_player_age = 7
exp_type_department = EXP_TYPE_SCIENCE exp_required_type_department = EXP_TYPE_SCIENCE
exp_requirements = 180 exp_requirements = 180
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/rd outfit = /datum/outfit/job/rd
plasmaman_outfit = /datum/outfit/plasmaman/research_director plasmaman_outfit = /datum/outfit/plasmaman/research_director
departments = DEPARTMENT_SCIENCE | DEPARTMENT_COMMAND departments_list = list(
/datum/job_department/science,
/datum/job_department/command,
)
paycheck = PAYCHECK_COMMAND paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_SCI paycheck_department = ACCOUNT_SCI
@@ -34,7 +38,7 @@
family_heirlooms = list(/obj/item/toy/plush/slimeplushie) family_heirlooms = list(/obj/item/toy/plush/slimeplushie)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 1.4 //Command staff has authority voice_of_god_power = 1.4 //Command staff has authority

View File

@@ -7,12 +7,15 @@
supervisors = "the research director" supervisors = "the research director"
selection_color = "#ffeeff" selection_color = "#ffeeff"
exp_requirements = 60 exp_requirements = 60
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
bounty_types = CIV_JOB_ROBO bounty_types = CIV_JOB_ROBO
outfit = /datum/outfit/job/roboticist outfit = /datum/outfit/job/roboticist
plasmaman_outfit = /datum/outfit/plasmaman/robotics plasmaman_outfit = /datum/outfit/plasmaman/robotics
departments = DEPARTMENT_SCIENCE departments_list = list(
/datum/job_department/science,
)
paycheck = PAYCHECK_MEDIUM paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SCI paycheck_department = ACCOUNT_SCI
@@ -27,7 +30,7 @@
family_heirlooms = list(/obj/item/toy/plush/pkplush) family_heirlooms = list(/obj/item/toy/plush/pkplush)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/job/roboticist/New() /datum/job/roboticist/New()

View File

@@ -7,7 +7,8 @@
supervisors = "the research director" supervisors = "the research director"
selection_color = "#ffeeff" selection_color = "#ffeeff"
exp_requirements = 60 exp_requirements = 60
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/scientist outfit = /datum/outfit/job/scientist
plasmaman_outfit = /datum/outfit/plasmaman/science plasmaman_outfit = /datum/outfit/plasmaman/science
@@ -17,7 +18,9 @@
display_order = JOB_DISPLAY_ORDER_SCIENTIST display_order = JOB_DISPLAY_ORDER_SCIENTIST
bounty_types = CIV_JOB_SCI bounty_types = CIV_JOB_SCI
departments = DEPARTMENT_SCIENCE departments_list = list(
/datum/job_department/science,
)
family_heirlooms = list(/obj/item/toy/plush/slimeplushie) family_heirlooms = list(/obj/item/toy/plush/slimeplushie)
@@ -27,7 +30,7 @@
/obj/item/camera_bug = 1 /obj/item/camera_bug = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/scientist /datum/outfit/job/scientist

View File

@@ -9,7 +9,8 @@
selection_color = "#ffeeee" selection_color = "#ffeeee"
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 300 exp_requirements = 300
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/security outfit = /datum/outfit/job/security
plasmaman_outfit = /datum/outfit/plasmaman/security plasmaman_outfit = /datum/outfit/plasmaman/security
@@ -22,7 +23,9 @@
display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER
bounty_types = CIV_JOB_SEC bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_SECURITY departments_list = list(
/datum/job_department/security,
)
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec) family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)
@@ -34,7 +37,7 @@
/obj/item/melee/baton/boomerang/loaded = 1 /obj/item/melee/baton/boomerang/loaded = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY)) GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY))

View File

@@ -6,6 +6,7 @@
spawn_positions = 3 spawn_positions = 3
supervisors = "the quartermaster and the head of personnel" supervisors = "the quartermaster and the head of personnel"
selection_color = "#dcba97" selection_color = "#dcba97"
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/miner outfit = /datum/outfit/job/miner
plasmaman_outfit = /datum/outfit/plasmaman/mining plasmaman_outfit = /datum/outfit/plasmaman/mining
@@ -15,11 +16,13 @@
display_order = JOB_DISPLAY_ORDER_SHAFT_MINER display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
bounty_types = CIV_JOB_MINE bounty_types = CIV_JOB_MINE
departments = DEPARTMENT_CARGO departments_list = list(
/datum/job_department/cargo,
)
family_heirlooms = list(/obj/item/pickaxe/mini, /obj/item/shovel) family_heirlooms = list(/obj/item/pickaxe/mini, /obj/item/shovel)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/miner /datum/outfit/job/miner

View File

@@ -7,7 +7,8 @@
supervisors = "the chief engineer" supervisors = "the chief engineer"
selection_color = "#fff5cc" selection_color = "#fff5cc"
exp_requirements = 60 exp_requirements = 60
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/engineer outfit = /datum/outfit/job/engineer
plasmaman_outfit = /datum/outfit/plasmaman/engineering plasmaman_outfit = /datum/outfit/plasmaman/engineering
@@ -19,7 +20,9 @@
display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER
bounty_types = CIV_JOB_ENG bounty_types = CIV_JOB_ENG
departments = DEPARTMENT_ENGINEERING departments_list = list(
/datum/job_department/engineering,
)
family_heirlooms = list(/obj/item/clothing/head/hardhat, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters) family_heirlooms = list(/obj/item/clothing/head/hardhat, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters)
@@ -30,7 +33,7 @@
/obj/item/clothing/head/hardhat/red/upgraded = 1 /obj/item/clothing/head/hardhat/red/upgraded = 1
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/engineer /datum/outfit/job/engineer

View File

@@ -6,8 +6,9 @@
spawn_positions = 1 spawn_positions = 1
supervisors = "the chief medical officer" supervisors = "the chief medical officer"
selection_color = "#ffeef0" selection_color = "#ffeef0"
exp_type = EXP_TYPE_CREW
exp_requirements = 60 exp_requirements = 60
exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/virologist outfit = /datum/outfit/job/virologist
plasmaman_outfit = /datum/outfit/plasmaman/viro plasmaman_outfit = /datum/outfit/plasmaman/viro
@@ -19,7 +20,9 @@
display_order = JOB_DISPLAY_ORDER_VIROLOGIST display_order = JOB_DISPLAY_ORDER_VIROLOGIST
bounty_types = CIV_JOB_VIRO bounty_types = CIV_JOB_VIRO
departments = DEPARTMENT_MEDICAL departments_list = list(
/datum/job_department/medical,
)
family_heirlooms = list(/obj/item/reagent_containers/syringe) family_heirlooms = list(/obj/item/reagent_containers/syringe)
@@ -31,7 +34,7 @@
/obj/item/stack/sheet/mineral/uranium = 5 /obj/item/stack/sheet/mineral/uranium = 5
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/virologist /datum/outfit/job/virologist

View File

@@ -9,7 +9,8 @@
selection_color = "#ffeeee" selection_color = "#ffeeee"
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 300 exp_requirements = 300
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/warden outfit = /datum/outfit/job/warden
plasmaman_outfit = /datum/outfit/plasmaman/warden plasmaman_outfit = /datum/outfit/plasmaman/warden
@@ -22,7 +23,9 @@
display_order = JOB_DISPLAY_ORDER_WARDEN display_order = JOB_DISPLAY_ORDER_WARDEN
bounty_types = CIV_JOB_SEC bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_SECURITY departments_list = list(
/datum/job_department/security,
)
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law) family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law)
@@ -35,7 +38,7 @@
/obj/item/storage/box/lethalshot = 5 /obj/item/storage/box/lethalshot = 5
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/warden /datum/outfit/job/warden

View File

@@ -1,119 +1,3 @@
//THIS FILE WAS EDITED BY SKYRAT EDIT
//SKYRAT EDIT ADDITION
GLOBAL_LIST_INIT(central_command_positions, list(
"Nanotrasen Representative",
"Blueshield"))
//SKYRAT EDIT END
GLOBAL_LIST_INIT(command_positions, list(
"Captain",
"Head of Personnel",
"Head of Security",
"Chief Engineer",
"Research Director",
"Quartermaster", //SKYRAT EDIT ADDITION
"Chief Medical Officer"))
GLOBAL_LIST_INIT(engineering_positions, list(
"Chief Engineer",
"Station Engineer",
"Atmospheric Technician"))
GLOBAL_LIST_INIT(medical_positions, list(
"Chief Medical Officer",
"Medical Doctor",
"Paramedic",
"Virologist",
"Chemist"))
GLOBAL_LIST_INIT(science_positions, list(
"Research Director",
"Scientist",
"Geneticist",
"Roboticist",
"Vanguard Operative")) //SKYRAT EDIT ADDITION
GLOBAL_LIST_INIT(supply_positions, list(
"Quartermaster",
"Cargo Technician",
"Shaft Miner"))
GLOBAL_LIST_INIT(service_positions, list(
"Head of Personnel",
"Bartender",
"Botanist",
"Cook",
"Janitor",
"Curator",
"Psychologist",
"Lawyer",
"Chaplain",
"Clown",
"Mime",
"Prisoner",
"Assistant"))
//we really need to split service into civillian positions officially, until then this is my solution
GLOBAL_LIST_INIT(service_food_positions, list(
"Bartender",
"Botanist",
"Cook"))
GLOBAL_LIST_INIT(security_positions, list(
"Head of Security",
"Warden",
"Detective",
"Security Officer",
"Security Medic",
"Security Sergeant",
"Civil Disputes Officer",
"Corrections Officer")) //SKYRAT EDIT - LIST AMENDED
/// These aren't defacto jobs, but are the special departmental variants for sec officers.
GLOBAL_LIST_INIT(security_sub_positions, list(
"Security Officer (Cargo)",
"Security Officer (Engineering)",
"Security Officer (Medical)",
"Security Officer (Science)",
))
GLOBAL_LIST_INIT(nonhuman_positions, list(
"AI",
"Cyborg",
ROLE_PAI))
// job categories for rendering the late join menu
GLOBAL_LIST_INIT(position_categories, list(
EXP_TYPE_CENTRAL_COMMAND = list("jobs" = central_command_positions, "#8df1b7"), //SKYRAT EDIT ADDITION
EXP_TYPE_COMMAND = list("jobs" = command_positions, "color" = "#ccccff"),
EXP_TYPE_ENGINEERING = list("jobs" = engineering_positions, "color" = "#ffeeaa"),
EXP_TYPE_SUPPLY = list("jobs" = supply_positions, "color" = "#ddddff"),
EXP_TYPE_SILICON = list("jobs" = nonhuman_positions - "pAI", "color" = "#ccffcc"),
EXP_TYPE_SERVICE = list("jobs" = service_positions, "color" = "#bbe291"),
EXP_TYPE_MEDICAL = list("jobs" = medical_positions, "color" = "#ffddf0"),
EXP_TYPE_SCIENCE = list("jobs" = science_positions, "color" = "#ffddff"),
EXP_TYPE_SECURITY = list("jobs" = security_positions, "color" = "#ffdddd")
))
GLOBAL_LIST_INIT(exp_jobsmap, list(
EXP_TYPE_CREW = list("titles" = central_command_positions | command_positions | engineering_positions | medical_positions | science_positions | supply_positions | security_positions | service_positions | list("AI","Cyborg")), // crew positions //SKYRAT EDIT ADDITION
EXP_TYPE_CENTRAL_COMMAND = list("titles" = central_command_positions), //SKYRAT EDIT ADDITION
EXP_TYPE_COMMAND = list("titles" = command_positions),
EXP_TYPE_ENGINEERING = list("titles" = engineering_positions),
EXP_TYPE_MEDICAL = list("titles" = medical_positions),
EXP_TYPE_SCIENCE = list("titles" = science_positions),
EXP_TYPE_SUPPLY = list("titles" = supply_positions),
EXP_TYPE_SECURITY = list("titles" = security_positions),
EXP_TYPE_SILICON = list("titles" = list("AI","Cyborg")),
EXP_TYPE_SERVICE = list("titles" = service_positions)
))
// TO DO: Replace this with job datum flags instead. // TO DO: Replace this with job datum flags instead.
GLOBAL_LIST_INIT(exp_specialmap, list( GLOBAL_LIST_INIT(exp_specialmap, list(
EXP_TYPE_LIVING = list(), // all living mobs EXP_TYPE_LIVING = list(), // all living mobs
@@ -141,7 +25,6 @@ GLOBAL_LIST_INIT(exp_specialmap, list(
), // Ghost roles ), // Ghost roles
EXP_TYPE_GHOST = list() // dead people, observers EXP_TYPE_GHOST = list() // dead people, observers
)) ))
GLOBAL_PROTECT(exp_jobsmap)
GLOBAL_PROTECT(exp_specialmap) GLOBAL_PROTECT(exp_specialmap)
//this is necessary because antags happen before job datums are handed out, but NOT before they come into existence //this is necessary because antags happen before job datums are handed out, but NOT before they come into existence

View File

@@ -18,43 +18,19 @@
return return
/datum/crew_manifest/ui_data(mob/user) /datum/crew_manifest/ui_data(mob/user)
var/list/positions = list( var/list/positions = list()
"Central Command" = list("exceptions" = list(), "open" = 0), //SKYRAT EDIT ADDITION for(var/datum/job_department/department as anything in SSjob.joinable_departments)
"Command" = list("exceptions" = list(), "open" = 0), var/open = 0
"Security" = list("exceptions" = list(), "open" = 0), var/list/exceptions = list()
"Engineering" = list("exceptions" = list(), "open" = 0), for(var/datum/job/job as anything in department.department_jobs)
"Medical" = list("exceptions" = list(), "open" = 0), if(job.total_positions == -1)
"Misc" = list("exceptions" = list(), "open" = 0), exceptions += job.title
"Science" = list("exceptions" = list(), "open" = 0), continue
"Supply" = list("exceptions" = list(), "open" = 0), var/open_slots = job.total_positions - job.current_positions
"Service" = list("exceptions" = list(), "open" = 0), if(open_slots < 1)
"Silicon" = list("exceptions" = list(), "open" = 0) continue
) open += open_slots
var/list/departments = list( positions[department.department_name] = list("exceptions" = exceptions, "open" = open)
list("flag" = DEPARTMENT_CENTRAL_COMMAND, "name" = "Central Command"), //SKYRAT EDIT CHANGE
list("flag" = DEPARTMENT_COMMAND, "name" = "Command"),
list("flag" = DEPARTMENT_SECURITY, "name" = "Security"),
list("flag" = DEPARTMENT_ENGINEERING, "name" = "Engineering"),
list("flag" = DEPARTMENT_MEDICAL, "name" = "Medical"),
list("flag" = DEPARTMENT_SCIENCE, "name" = "Science"),
list("flag" = DEPARTMENT_CARGO, "name" = "Supply"),
list("flag" = DEPARTMENT_SERVICE, "name" = "Service"),
list("flag" = DEPARTMENT_SILICON, "name" = "Silicon")
)
for(var/job in SSjob.joinable_occupations)
// Check if there are additional open positions or if there is no limit
if ((job["total_positions"] > 0 && job["total_positions"] > job["current_positions"]) || (job["total_positions"] == -1))
for(var/department in departments)
// Check if the job is part of a department using its flag
// Will return true for Research Director if the department is Science or Command, for example
if(job["departments"] & department["flag"])
if(job["total_positions"] == -1)
// Add job to list of exceptions, meaning it does not have a position limit
positions[department["name"]]["exceptions"] += list(job["title"])
else
// Add open positions to current department
positions[department["name"]]["open"] += (job["total_positions"] - job["current_positions"])
return list( return list(
"manifest" = GLOB.data_core.get_manifest(), "manifest" = GLOB.data_core.get_manifest(),

View File

@@ -403,26 +403,25 @@
SSjob.prioritized_jobs -= prioritized_job SSjob.prioritized_jobs -= prioritized_job
dat += "<table><tr><td valign='top'>" dat += "<table><tr><td valign='top'>"
var/column_counter = 0 var/column_counter = 0
// render each category's available jobs
for(var/category in GLOB.position_categories) for(var/datum/job_department/department as anything in SSjob.joinable_departments)
// position_categories contains category names mapped to available jobs and an appropriate color var/department_color = department.latejoin_color
var/cat_color = GLOB.position_categories[category]["color"] dat += "<fieldset style='width: 185px; border: 2px solid [department_color]; display: inline'>"
dat += "<fieldset style='width: 185px; border: 2px solid [cat_color]; display: inline'>" dat += "<legend align='center' style='color: [department_color]'>[department.department_name]</legend>"
dat += "<legend align='center' style='color: [cat_color]'>[category]</legend>" var/list/dept_data = list()
var/list/dept_dat = list() for(var/datum/job/job_datum as anything in department.department_jobs)
for(var/job in GLOB.position_categories[category]["jobs"]) if(IsJobUnavailable(job_datum.title, TRUE) != JOB_AVAILABLE)
var/datum/job/job_datum = SSjob.name_occupations[job] continue
if(job_datum && IsJobUnavailable(job_datum.title, TRUE) == JOB_AVAILABLE)
var/command_bold = "" var/command_bold = ""
if(job in GLOB.command_positions) if(job_datum.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
command_bold = " command" command_bold = " command"
if(job_datum in SSjob.prioritized_jobs) if(job_datum in SSjob.prioritized_jobs)
dept_dat += "<a class='job[command_bold]' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'><span class='priority'>[job_datum.title] ([job_datum.current_positions])</span></a>" dept_data += "<a class='job[command_bold]' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'><span class='priority'>[job_datum.title] ([job_datum.current_positions])</span></a>"
else else
dept_dat += "<a class='job[command_bold]' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'>[job_datum.title] ([job_datum.current_positions])</a>" dept_data += "<a class='job[command_bold]' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'>[job_datum.title] ([job_datum.current_positions])</a>"
if(!dept_dat.len) if(!length(dept_data))
dept_dat += "<span class='nopositions'>No positions open.</span>" dept_data += "<span class='nopositions'>No positions open.</span>"
dat += jointext(dept_dat, "") dat += dept_data.Join()
dat += "</fieldset><br>" dat += "</fieldset><br>"
column_counter++ column_counter++
if(column_counter > 0 && (column_counter % 3 == 0)) if(column_counter > 0 && (column_counter % 3 == 0))

View File

@@ -75,4 +75,7 @@
.skyratbanoptions { .skyratbanoptions {
background-color: #00f7ff; background-color: #00f7ff;
.undefineddepartment {
background-color: #111cf7;
} }

View File

@@ -1,16 +1,10 @@
function toggle_head(source, ext) { function toggle_other_checkboxes(source, copycats_str, our_index_str) {
document.getElementById(source.id.slice(0, -4) + ext).checked = source.checked; const copycats = parseInt(copycats_str);
} const our_index = parseInt(our_index_str);
for (var i = 1; i <= copycats; i++) {
function toggle_checkboxes(source, ext) { if(i === our_index) {
var checkboxes = document.getElementsByClassName(source.name); continue;
for (var i = 0, n = checkboxes.length; i < n; i++) {
checkboxes[i].checked = source.checked;
if (checkboxes[i].id) {
var idfound = document.getElementById(checkboxes[i].id.slice(0, -4) + ext);
if (idfound) {
idfound.checked = source.checked;
}
} }
document.getElementById(source.id.slice(0, -1) + i).checked = source.checked;
} }
} }

View File

@@ -0,0 +1,8 @@
/datum/job_department/central_command
department_name = DEPARTMENT_CENTRAL_COMMAND
department_bitflags = DEPARTMENT_BITFLAG_CENTRAL_COMMAND
department_head = /datum/job/captain
department_experience_type = EXP_TYPE_CENTRAL_COMMAND
display_order = 1
label_class = "command"
latejoin_color = "#ccccff"

View File

@@ -0,0 +1,84 @@
/datum/job/admiral
title = "Nanotrasen Admiral"
auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY
department_head = list("Nanotrasen Fleet Command")
faction = FACTION_STATION
total_positions = 1
spawn_positions = 1
supervisors = "Nanotrasen Fleet Command and God himself"
selection_color = "#6969f8"
req_admin_notify = 1
minimal_player_age = 14
exp_requirements = 60000000
exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_CENTRAL_COMMAND
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/admiral
plasmaman_outfit = /datum/outfit/plasmaman/centcom_commander
paycheck = PAYCHECK_CENTRAL_COMMAND
paycheck_department = ACCOUNT_SEC
liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_NANOTRASEN_ADMIRAL
departments_list = list(
/datum/job_department/command,
/datum/job_department/central_command,
)
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold)
mail_goodies = list(
/obj/item/clothing/mask/cigarette/cigar/havana = 20,
/obj/item/storage/fancy/cigarettes/cigars/havana = 15,
/obj/item/reagent_containers/food/drinks/bottle/champagne = 10
)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_power = 1.4 //Command staff has authority
veteran_only = TRUE
/datum/job/captain/get_captaincy_announcement(mob/living/captain)
return "Admiral [captain.real_name] on deck!"
/datum/outfit/job/admiral
name = "Nanotrasen Admiral"
jobtype = /datum/job/admiral
implants = list(/obj/item/implant/mindshield)
id = /obj/item/card/id/advanced/centcom
belt = /obj/item/pda/nanotrasen_representative
glasses = /obj/item/clothing/glasses/eyepatch
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
ears = /obj/item/radio/headset/headset_cent/commander
gloves = /obj/item/clothing/gloves/tackler/combat/insulated
uniform = /obj/item/clothing/under/rank/centcom/commander
suit = /obj/item/clothing/suit/toggle/armor/vest/centcom_formal
suit_store = /obj/item/gun/ballistic/revolver/mateba
shoes = /obj/item/clothing/shoes/combat/swat
head = /obj/item/clothing/head/centhat
back = /obj/item/storage/backpack/satchel/leather
backpack_contents = list(/obj/item/melee/baton/loaded, /obj/item/ammo_box/a357 = 4)
skillchips = list(/obj/item/skillchip/disk_verifier)
implants = list(/obj/item/implant/mindshield)
accessory = /obj/item/clothing/accessory/medal/gold/heroism
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/centcom)
id_trim = /datum/id_trim/centcom/admiral
/datum/id_trim/centcom/admiral/New()
. = ..()
access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))

View File

@@ -36,6 +36,7 @@
/mob/dead/new_player/Destroy() /mob/dead/new_player/Destroy()
GLOB.new_player_list -= src GLOB.new_player_list -= src
return ..() return ..()
/mob/dead/new_player/prepare_huds() /mob/dead/new_player/prepare_huds()
@@ -50,12 +51,26 @@
winset(src, "lobbybrowser", "is-disabled=false;is-visible=true") winset(src, "lobbybrowser", "is-disabled=false;is-visible=true")
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/lobby) //Sending pictures to the client var/datum/asset/assets = get_asset_datum(/datum/asset/simple/lobby) //Sending pictures to the client
assets.send(src) assets.send(src)
update_titlescreen() update_titlescreen()
/mob/dead/new_player/proc/update_titlescreen() /mob/dead/new_player/proc/update_titlescreen()
var/dat = get_lobby_html() var/dat = get_lobby_html()
@@ -93,6 +108,7 @@
AND deleted = 0 AND deleted = 0
) )
"}, list("isadmin" = isadmin, "ckey" = ckey)) "}, list("isadmin" = isadmin, "ckey" = ckey))
if(!query_get_new_polls.Execute()) if(!query_get_new_polls.Execute())
qdel(query_get_new_polls) qdel(query_get_new_polls)
return return
@@ -107,6 +123,9 @@
/mob/dead/new_player/Topic(href, href_list[]) /mob/dead/new_player/Topic(href, href_list[])
if(src != usr || !client) if(src != usr || !client)
return return
if(client.interviewee) if(client.interviewee)
@@ -173,6 +192,7 @@
if(!client.prefs.check_flavor_text()) if(!client.prefs.check_flavor_text())
return return
if(!SSticker?.IsRoundInProgress()) if(!SSticker?.IsRoundInProgress())
to_chat(usr, "<span class='boldwarning'>The round is either not ready, or has already finished...</span>") to_chat(usr, "<span class='boldwarning'>The round is either not ready, or has already finished...</span>")
return return
@@ -220,6 +240,9 @@
AttemptLateSpawn(href_list["SelectedJob"]) AttemptLateSpawn(href_list["SelectedJob"])
return return
if(href_list["showpoll"]) if(href_list["showpoll"])
handle_player_polling() handle_player_polling()
return return
@@ -248,6 +271,7 @@
if(QDELETED(src) || !src.client || this_is_like_playing_right != "Yes") if(QDELETED(src) || !src.client || this_is_like_playing_right != "Yes")
ready = PLAYER_NOT_READY ready = PLAYER_NOT_READY
show_titlescreen() show_titlescreen()
return FALSE return FALSE
var/mob/dead/observer/observer = new() var/mob/dead/observer/observer = new()
@@ -453,31 +477,26 @@
SSjob.prioritized_jobs -= prioritized_job SSjob.prioritized_jobs -= prioritized_job
dat += "<table><tr><td valign='top'>" dat += "<table><tr><td valign='top'>"
var/column_counter = 0 var/column_counter = 0
// render each category's available jobs
for(var/category in GLOB.position_categories) for(var/datum/job_department/department as anything in SSjob.joinable_departments)
// position_categories contains category names mapped to available jobs and an appropriate color var/department_color = department.latejoin_color
var/cat_color = GLOB.position_categories[category]["color"] dat += "<fieldset style='width: 185px; border: 2px solid [department_color]; display: inline'>"
dat += "<fieldset style='width: 185px; border: 2px solid [cat_color]; display: inline'>" dat += "<legend align='center' style='color: [department_color]'>[department.department_name]</legend>"
dat += "<legend align='center' style='color: [cat_color]'>[category]</legend>" var/list/dept_data = list()
var/list/dept_dat = list() for(var/datum/job/job_datum as anything in department.department_jobs)
for(var/job in GLOB.position_categories[category]["jobs"]) if(IsJobUnavailable(job_datum.title, TRUE) != JOB_AVAILABLE)
var/datum/job/job_datum = SSjob.name_occupations[job] continue
if(job_datum && IsJobUnavailable(job_datum.title, TRUE) == JOB_AVAILABLE)
var/command_bold = "" var/command_bold = ""
if(job in GLOB.command_positions) if(job_datum.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
command_bold = " command" command_bold = " command"
var/jobline = "[job_datum.title] ([job_datum.current_positions])"
if(job_datum in SSjob.prioritized_jobs) if(job_datum in SSjob.prioritized_jobs)
jobline = "<span class='priority'>[jobline]</span>" dept_data += "<a class='job[command_bold]' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'><span class='priority'>[job_datum.title] ([job_datum.current_positions])</span></a>"
if(client && client.prefs && client.prefs.alt_titles_preferences[job_datum.title]) else
jobline = "[jobline]<br><span style='color:#BBBBBB; font-style: italic;'>(as [client.prefs.alt_titles_preferences[job_datum.title]])</span>" dept_data += "<a class='job[command_bold]' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'>[job_datum.title] ([job_datum.current_positions])</a>"
jobline = "<a class='job[command_bold]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'>[jobline]</a>" if(!length(dept_data))
dept_dat += jobline dept_data += "<span class='nopositions'>No positions open.</span>"
dat += dept_data.Join()
if(!dept_dat.len)
dept_dat += "<span class='nopositions'>No positions open.</span>"
dat += jointext(dept_dat, "")
dat += "</fieldset><br>" dat += "</fieldset><br>"
column_counter++ column_counter++
if(column_counter > 0 && (column_counter % 3 == 0)) if(column_counter > 0 && (column_counter % 3 == 0))
@@ -489,6 +508,7 @@
popup.set_content(jointext(dat, "")) popup.set_content(jointext(dat, ""))
popup.open(FALSE) // 0 is passed to open so that it doesn't use the onclose() proc popup.open(FALSE) // 0 is passed to open so that it doesn't use the onclose() proc
/// Creates, assigns and returns the new_character to spawn as. Assumes a valid mind.assigned_role exists. /// Creates, assigns and returns the new_character to spawn as. Assumes a valid mind.assigned_role exists.
/mob/dead/new_player/proc/create_character(atom/destination) /mob/dead/new_player/proc/create_character(atom/destination)
spawning = TRUE spawning = TRUE
@@ -506,6 +526,7 @@
. = spawning_mob . = spawning_mob
new_character = . new_character = .
/mob/dead/new_player/proc/transfer_character() /mob/dead/new_player/proc/transfer_character()
. = new_character . = new_character
if(!.) if(!.)
@@ -518,6 +539,7 @@
new_character = null new_character = null
qdel(src) qdel(src)
/mob/dead/new_player/proc/ViewManifest() /mob/dead/new_player/proc/ViewManifest()
if(!client) if(!client)
return return
@@ -525,11 +547,11 @@
return return
client.crew_manifest_delay = world.time + (1 SECONDS) client.crew_manifest_delay = world.time + (1 SECONDS)
var/dat = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head><body>" if(!GLOB.crew_manifest_tgui)
dat += "<h4>Crew Manifest</h4>" GLOB.crew_manifest_tgui = new /datum/crew_manifest(src)
dat += GLOB.data_core.get_manifest_html()
src << browse(dat, "window=manifest;size=387x420;can_close=1")
GLOB.crew_manifest_tgui.ui_interact(src)
/mob/dead/new_player/Move() /mob/dead/new_player/Move()
return 0 return 0

View File

@@ -1,67 +0,0 @@
/datum/datacore/proc/get_manifest()
var/list/manifest_out = list(
"Command",
"Security",
"Engineering",
"Medical",
"Science",
"Supply",
"Service",
"Silicon"
)
var/list/departments = list(
"Central Command" = GLOB.central_command_positions + GLOB.central_command_alttitles,
"Command" = GLOB.command_positions + GLOB.command_alttitles,
"Security" = GLOB.security_positions + GLOB.security_sub_positions + GLOB.security_alttitles,
"Engineering" = GLOB.engineering_positions + GLOB.engineering_alttitles,
"Medical" = GLOB.medical_positions + GLOB.medical_alttitles,
"Science" = GLOB.science_positions + GLOB.science_alttitles,
"Supply" = GLOB.supply_positions + GLOB.supply_alttitles,
"Service" = GLOB.service_positions + GLOB.service_alttitles,
"Silicon" = GLOB.nonhuman_positions + GLOB.nonhuman_alttitles
)
var/list/heads = GLOB.command_positions + GLOB.command_alttitles
for(var/datum/data/record/t in GLOB.data_core.general)
var/name = t.fields["name"]
var/rank = t.fields["rank"]
var/is_captain = FALSE
if(rank == "Captain")
is_captain = TRUE
for(var/captitle in GLOB.captain_alttitles)
if(rank == captitle)
is_captain = TRUE
break
else
continue
var/has_department = FALSE
for(var/department in departments)
var/list/jobs = departments[department]
if(rank in jobs)
if(!manifest_out[department])
manifest_out[department] = list()
// Append to beginning of list if captain or department head
if (is_captain == TRUE || (department != "Command" && (rank in heads)))
manifest_out[department] = list(list(
"name" = name,
"rank" = rank
)) + manifest_out[department]
else
manifest_out[department] += list(list(
"name" = name,
"rank" = rank
))
has_department = TRUE
if(!has_department)
if(!manifest_out["Misc"])
manifest_out["Misc"] = list()
manifest_out["Misc"] += list(list(
"name" = name,
"rank" = rank
))
for (var/department in departments)
if (!manifest_out[department])
manifest_out -= department
return manifest_out

View File

@@ -1,14 +0,0 @@
/obj/item/gang_induction_package/attack_self(mob/living/user)
if(user.mind.assigned_role in GLOB.command_positions)
to_chat(user, "Joining a gang would hurt profits, wouldn't it? Central wouldn't be happy.")
user.emote("shake")
return
if(user.mind.assigned_role == "Blueshield")
to_chat(user, "It'd be a terrible idea. What about the Heads of Staff?")
user.emote("shake")
return
if(HAS_TRAIT(user, TRAIT_MINDSHIELD))
to_chat(user, "You attended a seminar on not signing up for a gang and are not interested.")
user.emote("shake")
return
..()

View File

@@ -9,7 +9,9 @@
selection_color = "#c6ffe0" selection_color = "#c6ffe0"
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 2400 exp_requirements = 2400
exp_type = EXP_TYPE_SECURITY exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_COMMAND
exp_granted_type = EXP_TYPE_CREW
paycheck = PAYCHECK_HARD paycheck = PAYCHECK_HARD
paycheck_department = ACCOUNT_SEC paycheck_department = ACCOUNT_SEC
@@ -18,7 +20,10 @@
plasmaman_outfit = /datum/outfit/plasmaman/blueshield plasmaman_outfit = /datum/outfit/plasmaman/blueshield
display_order = JOB_DISPLAY_ORDER_BLUESHIELD display_order = JOB_DISPLAY_ORDER_BLUESHIELD
bounty_types = CIV_JOB_SEC bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_CENTRAL_COMMAND departments_list = list(
/datum/job_department/central_command,
/datum/job_department/command,
)
liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM) liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM)
family_heirlooms = list(/obj/item/bedsheet/captain, /obj/item/clothing/head/beret/blueshield) family_heirlooms = list(/obj/item/bedsheet/captain, /obj/item/clothing/head/beret/blueshield)

View File

@@ -9,7 +9,8 @@
selection_color = "#ffeeee" selection_color = "#ffeeee"
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 150 exp_requirements = 150
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
paycheck = PAYCHECK_HARD paycheck = PAYCHECK_HARD
paycheck_department = ACCOUNT_SEC paycheck_department = ACCOUNT_SEC
@@ -19,7 +20,9 @@
display_order = JOB_DISPLAY_ORDER_BRIGOFF display_order = JOB_DISPLAY_ORDER_BRIGOFF
mind_traits = list(TRAIT_DONUT_LOVER) mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
departments = DEPARTMENT_SECURITY departments_list = list(
/datum/job_department/security,
)
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec) family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)

View File

@@ -1375,7 +1375,7 @@ GLOBAL_LIST_INIT(food, list(
var/datum/job/lastJob var/datum/job/lastJob
var/datum/job/overflow_role = SSjob.GetJobType(SSjob.overflow_role) var/datum/job/overflow_role = SSjob.GetJobType(SSjob.overflow_role)
for(var/datum/job/job as anything in sortList(SSjob.joinable_occupations, /proc/cmp_job_display_asc)) for(var/datum/job/job as anything in SSjob.joinable_occupations)
index += 1 index += 1
if(index >= limit) if(index >= limit)
@@ -1423,8 +1423,9 @@ GLOBAL_LIST_INIT(food, list(
HTML += "<font color=orange>[rank]</font></td><td></td></tr>" HTML += "<font color=orange>[rank]</font></td><td></td></tr>"
continue continue
var/rank_title_line = "[displayed_rank]" var/rank_title_line = "[displayed_rank]"
if((rank in GLOB.command_positions) || (rank == "AI")) // Bold head jobs if(job.job_flags & JOB_BOLD_SELECT_TEXT)//Bold head jobs
rank_title_line = "<b>[rank_title_line]</b>" rank_title_line = "<b>[rank_title_line]</b>"
if(job.alt_titles.len) if(job.alt_titles.len)
rank_title_line = "<a href='?_src_=prefs;preference=job;task=alt_title;job_title=[job.title]'>[rank_title_line]</a>" rank_title_line = "<a href='?_src_=prefs;preference=job;task=alt_title;job_title=[job.title]'>[rank_title_line]</a>"
else else
@@ -3096,7 +3097,7 @@ GLOBAL_LIST_INIT(food, list(
/datum/preferences/proc/should_be_random_hardcore(datum/job/job, datum/mind/mind) /datum/preferences/proc/should_be_random_hardcore(datum/job/job, datum/mind/mind)
if(!randomise[RANDOM_HARDCORE]) if(!randomise[RANDOM_HARDCORE])
return FALSE return FALSE
if(job.departments & DEPARTMENT_COMMAND) //No command staff if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) //No command staff
return FALSE return FALSE
for(var/datum/antagonist/antag as anything in mind.antag_datums) for(var/datum/antagonist/antag as anything in mind.antag_datums)
if(antag.get_team()) //No team antags if(antag.get_team()) //No team antags

View File

@@ -8,7 +8,13 @@
selection_color = "#ffeeff" selection_color = "#ffeeff"
minimal_player_age = 40 minimal_player_age = 40
exp_requirements = 400 exp_requirements = 400
exp_type = EXP_TYPE_SCIENCE exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_SCIENCE
exp_granted_type = EXP_TYPE_CREW
departments_list = list(
/datum/job_department/science,
)
outfit = /datum/outfit/job/expeditionary_trooper outfit = /datum/outfit/job/expeditionary_trooper
plasmaman_outfit = /datum/outfit/plasmaman/mining plasmaman_outfit = /datum/outfit/plasmaman/mining

View File

@@ -8,10 +8,14 @@
selection_color = "#c6ffe0" selection_color = "#c6ffe0"
minimal_player_age = 14 minimal_player_age = 14
exp_requirements = 600 exp_requirements = 600
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_COMMAND exp_required_type_department = EXP_TYPE_COMMAND
exp_granted_type = EXP_TYPE_CREW
departments = DEPARTMENT_COMMAND | DEPARTMENT_CENTRAL_COMMAND departments_list = list(
/datum/job_department/command,
/datum/job_department/central_command
)
outfit = /datum/outfit/job/nanotrasen_representative outfit = /datum/outfit/job/nanotrasen_representative
plasmaman_outfit = /datum/outfit/plasmaman/nanotrasen_representative plasmaman_outfit = /datum/outfit/plasmaman/nanotrasen_representative

View File

@@ -9,7 +9,8 @@
selection_color = "#ffeeee" selection_color = "#ffeeee"
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 60 exp_requirements = 60
exp_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/junior_officer outfit = /datum/outfit/job/junior_officer
plasmaman_outfit = /datum/outfit/plasmaman/security plasmaman_outfit = /datum/outfit/plasmaman/security
@@ -22,7 +23,9 @@
display_order = JOB_DISPLAY_ORDER_JUNIOR_SECURITY_OFFICER display_order = JOB_DISPLAY_ORDER_JUNIOR_SECURITY_OFFICER
bounty_types = CIV_JOB_SEC bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_SECURITY departments_list = list(
/datum/job_department/security,
)
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec) family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)

View File

@@ -9,7 +9,9 @@
selection_color = "#ffeeee" selection_color = "#ffeeee"
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 120 exp_requirements = 120
exp_type = EXP_TYPE_MEDICAL exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_SECURITY
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/security_medic outfit = /datum/outfit/job/security_medic
plasmaman_outfit = /datum/outfit/plasmaman/security plasmaman_outfit = /datum/outfit/plasmaman/security
@@ -22,7 +24,10 @@
display_order = JOB_DISPLAY_ORDER_SECURITY_MEDIC display_order = JOB_DISPLAY_ORDER_SECURITY_MEDIC
bounty_types = CIV_JOB_SEC bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_SECURITY departments_list = list(
/datum/job_department/security,
/datum/job_department/medical,
)
family_heirlooms = list(/obj/item/clothing/neck/stethoscope, /obj/item/roller, /obj/item/book/manual/wiki/security_space_law) family_heirlooms = list(/obj/item/clothing/neck/stethoscope, /obj/item/roller, /obj/item/book/manual/wiki/security_space_law)

View File

@@ -9,7 +9,9 @@
selection_color = "#ffeeee" selection_color = "#ffeeee"
minimal_player_age = 7 minimal_player_age = 7
exp_requirements = 120 exp_requirements = 120
exp_type = EXP_TYPE_SECURITY exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_SECURITY
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/security_sergeant outfit = /datum/outfit/job/security_sergeant
plasmaman_outfit = /datum/outfit/plasmaman/security plasmaman_outfit = /datum/outfit/plasmaman/security
@@ -19,7 +21,9 @@
mind_traits = list(TRAIT_DONUT_LOVER) mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
departments = DEPARTMENT_SECURITY departments_list = list(
/datum/job_department/security,
)
display_order = JOB_DISPLAY_ORDER_SECURITY_SERGEANT display_order = JOB_DISPLAY_ORDER_SECURITY_SERGEANT
bounty_types = CIV_JOB_SEC bounty_types = CIV_JOB_SEC

View File

@@ -2468,6 +2468,7 @@
#include "code\modules\jobs\job_exp.dm" #include "code\modules\jobs\job_exp.dm"
#include "code\modules\jobs\job_report.dm" #include "code\modules\jobs\job_report.dm"
#include "code\modules\jobs\jobs.dm" #include "code\modules\jobs\jobs.dm"
#include "code\modules\jobs\departments\departments.dm"
#include "code\modules\jobs\job_types\_job.dm" #include "code\modules\jobs\job_types\_job.dm"
#include "code\modules\jobs\job_types\ai.dm" #include "code\modules\jobs\job_types\ai.dm"
#include "code\modules\jobs\job_types\assistant.dm" #include "code\modules\jobs\job_types\assistant.dm"
@@ -3853,7 +3854,9 @@
#include "modular_skyrat\master_files\code\modules\clothing\outfits\ert.dm" #include "modular_skyrat\master_files\code\modules\clothing\outfits\ert.dm"
#include "modular_skyrat\master_files\code\modules\events\spacevine.dm" #include "modular_skyrat\master_files\code\modules\events\spacevine.dm"
#include "modular_skyrat\master_files\code\modules\events\spider_infestation.dm" #include "modular_skyrat\master_files\code\modules\events\spider_infestation.dm"
#include "modular_skyrat\master_files\code\modules\jobs\departments\departments.dm"
#include "modular_skyrat\master_files\code\modules\jobs\job_types\cyborg.dm" #include "modular_skyrat\master_files\code\modules\jobs\job_types\cyborg.dm"
#include "modular_skyrat\master_files\code\modules\jobs\job_types\nanotrasen_admiral.dm"
#include "modular_skyrat\master_files\code\modules\language\language_holders.dm" #include "modular_skyrat\master_files\code\modules\language\language_holders.dm"
#include "modular_skyrat\master_files\code\modules\mob\living\emote_popup.dm" #include "modular_skyrat\master_files\code\modules\mob\living\emote_popup.dm"
#include "modular_skyrat\master_files\code\modules\mob\living\carbon\carbon_say.dm" #include "modular_skyrat\master_files\code\modules\mob\living\carbon\carbon_say.dm"
@@ -3989,7 +3992,6 @@
#include "modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\update_icons.dm" #include "modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\update_icons.dm"
#include "modular_skyrat\modules\altjobtitles\code\_job.dm" #include "modular_skyrat\modules\altjobtitles\code\_job.dm"
#include "modular_skyrat\modules\altjobtitles\code\cards_ids.dm" #include "modular_skyrat\modules\altjobtitles\code\cards_ids.dm"
#include "modular_skyrat\modules\altjobtitles\code\datacore.dm"
#include "modular_skyrat\modules\altjobtitles\code\game.dm" #include "modular_skyrat\modules\altjobtitles\code\game.dm"
#include "modular_skyrat\modules\altjobtitles\code\jobs.dm" #include "modular_skyrat\modules\altjobtitles\code\jobs.dm"
#include "modular_skyrat\modules\ambitions\code\ambition.dm" #include "modular_skyrat\modules\ambitions\code\ambition.dm"
@@ -4001,7 +4003,6 @@
#include "modular_skyrat\modules\animated_doors\code\closets.dm" #include "modular_skyrat\modules\animated_doors\code\closets.dm"
#include "modular_skyrat\modules\animated_doors\code\overlays.dm" #include "modular_skyrat\modules\animated_doors\code\overlays.dm"
#include "modular_skyrat\modules\antagonists\code\gamemodes.dm" #include "modular_skyrat\modules\antagonists\code\gamemodes.dm"
#include "modular_skyrat\modules\antagonists\code\gang_things.dm"
#include "modular_skyrat\modules\antagonists\eldritch_cult\knowledge\ash_lore_skyrat.dm" #include "modular_skyrat\modules\antagonists\eldritch_cult\knowledge\ash_lore_skyrat.dm"
#include "modular_skyrat\modules\antagonists\eldritch_cult\knowledge\flesh_lore_skyrat.dm" #include "modular_skyrat\modules\antagonists\eldritch_cult\knowledge\flesh_lore_skyrat.dm"
#include "modular_skyrat\modules\ashwalkers\Ashwalker\Ashwalkers.dm" #include "modular_skyrat\modules\ashwalkers\Ashwalker\Ashwalkers.dm"