mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
Job refactor 2: less hardcoded lists (#60578)
* Job refactor 2: less hardcoded lists * Obsessed can happen
This commit is contained in:
@@ -48,14 +48,23 @@
|
||||
#define JOB_DISPLAY_ORDER_PRISONER 35
|
||||
|
||||
|
||||
#define DEPARTMENT_SECURITY (1<<0)
|
||||
#define DEPARTMENT_COMMAND (1<<1)
|
||||
#define DEPARTMENT_SERVICE (1<<2)
|
||||
#define DEPARTMENT_CARGO (1<<3)
|
||||
#define DEPARTMENT_ENGINEERING (1<<4)
|
||||
#define DEPARTMENT_SCIENCE (1<<5)
|
||||
#define DEPARTMENT_MEDICAL (1<<6)
|
||||
#define DEPARTMENT_SILICON (1<<7)
|
||||
#define DEPARTMENT_UNASSIGNED "No department assigned"
|
||||
#define DEPARTMENT_BITFLAG_SECURITY (1<<0)
|
||||
#define DEPARTMENT_SECURITY "Security"
|
||||
#define DEPARTMENT_BITFLAG_COMMAND (1<<1)
|
||||
#define DEPARTMENT_COMMAND "Command"
|
||||
#define DEPARTMENT_BITFLAG_SERVICE (1<<2)
|
||||
#define DEPARTMENT_SERVICE "Service"
|
||||
#define DEPARTMENT_BITFLAG_CARGO (1<<3)
|
||||
#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"
|
||||
|
||||
/* Job datum job_flags */
|
||||
/// Whether the mob is announced on arrival.
|
||||
@@ -68,6 +77,10 @@
|
||||
#define JOB_CREW_MEMBER (1<<3)
|
||||
/// Whether this job can be joined through the new_player menu.
|
||||
#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_STATION "Station"
|
||||
|
||||
@@ -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_EVENTS 70
|
||||
#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_AI_MOVEMENT 56 //We need the movement setup
|
||||
#define INIT_ORDER_AI_CONTROLLERS 55 //So the controller can get the ref
|
||||
|
||||
@@ -113,6 +113,9 @@ GLOBAL_VAR_INIT(cmp_field, "name")
|
||||
/proc/cmp_job_display_asc(datum/job/A, datum/job/B)
|
||||
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)
|
||||
return sorttext(initial(b.name),initial(a.name))
|
||||
|
||||
|
||||
@@ -546,7 +546,7 @@
|
||||
if(!human.client || !human.mind)
|
||||
continue
|
||||
var/datum/job/human_job = human.mind.assigned_role
|
||||
if(!(human_job.departments & DEPARTMENT_SERVICE))
|
||||
if(!(human_job.departments_bitflags & DEPARTMENT_SERVICE))
|
||||
continue
|
||||
human_job.award_service(human.client, award)
|
||||
|
||||
|
||||
@@ -192,6 +192,7 @@
|
||||
|
||||
/datum/config_entry/flag/use_exp_tracking
|
||||
|
||||
/// Enables head jobs time restrictions.
|
||||
/datum/config_entry/flag/use_exp_restrictions_heads
|
||||
|
||||
/datum/config_entry/number/use_exp_restrictions_heads_hours
|
||||
@@ -201,6 +202,7 @@
|
||||
|
||||
/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_admin_bypass
|
||||
|
||||
@@ -4,11 +4,22 @@ SUBSYSTEM_DEF(job)
|
||||
flags = SS_NO_FIRE
|
||||
|
||||
/// 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.
|
||||
var/list/joinable_occupations = list()
|
||||
var/list/datum/job/name_occupations = list() //Dict of all jobs, keys are titles
|
||||
var/list/type_occupations = list() //Dict of all jobs, keys are types
|
||||
var/list/datum/job/joinable_occupations = list()
|
||||
/// Dictionary of all jobs, keys are titles.
|
||||
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/initial_players_to_assign = 0 //used for checking against population caps
|
||||
|
||||
@@ -90,13 +101,25 @@ SUBSYSTEM_DEF(job)
|
||||
|
||||
|
||||
/datum/controller/subsystem/job/proc/SetupOccupations()
|
||||
all_occupations = list()
|
||||
joinable_occupations = list()
|
||||
name_occupations = list()
|
||||
type_occupations = list()
|
||||
|
||||
var/list/all_jobs = subtypesof(/datum/job)
|
||||
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"))
|
||||
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)
|
||||
var/datum/job/job = new job_type()
|
||||
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
|
||||
testing("Removed [job.type] due to map config")
|
||||
continue
|
||||
all_occupations += job
|
||||
new_all_occupations += job
|
||||
name_occupations[job.title] = job
|
||||
type_occupations[job_type] = job
|
||||
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
|
||||
|
||||
@@ -123,6 +179,11 @@ SUBSYSTEM_DEF(job)
|
||||
SetupOccupations()
|
||||
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)
|
||||
JobDebug("Running AR, Player: [player], Rank: [isnull(job) ? "null" : job.type], LJ: [latejoin]")
|
||||
@@ -188,7 +249,7 @@ SUBSYSTEM_DEF(job)
|
||||
if(istype(job, GetJobType(overflow_role))) // We don't want to give him assistant, that's boring!
|
||||
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
|
||||
|
||||
if(is_banned_from(player.ckey, job.title) || QDELETED(player))
|
||||
@@ -232,11 +293,11 @@ SUBSYSTEM_DEF(job)
|
||||
//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
|
||||
/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/command_position in GLOB.command_positions)
|
||||
var/datum/job/job = GetJob(command_position)
|
||||
if(!job)
|
||||
continue
|
||||
for(var/datum/job/job as anything in command_department.department_jobs)
|
||||
if((job.current_positions >= job.total_positions) && job.total_positions != -1)
|
||||
continue
|
||||
var/list/candidates = FindOccupationCandidates(job, level)
|
||||
@@ -251,10 +312,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 is also to ensure we get as many heads as possible
|
||||
/datum/controller/subsystem/job/proc/CheckHeadPositions(level)
|
||||
for(var/command_position in GLOB.command_positions)
|
||||
var/datum/job/job = GetJob(command_position)
|
||||
if(!job)
|
||||
continue
|
||||
var/datum/job_department/command_department = get_department_type(/datum/job_department/command)
|
||||
if(!command_department)
|
||||
return
|
||||
for(var/datum/job/job as anything in command_department.department_jobs)
|
||||
if((job.current_positions >= job.total_positions) && job.total_positions != -1)
|
||||
continue
|
||||
var/list/candidates = FindOccupationCandidates(job, level)
|
||||
@@ -676,7 +737,7 @@ SUBSYSTEM_DEF(job)
|
||||
/datum/controller/subsystem/job/proc/get_living_heads()
|
||||
. = 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
|
||||
|
||||
|
||||
@@ -686,7 +747,7 @@ SUBSYSTEM_DEF(job)
|
||||
/datum/controller/subsystem/job/proc/get_all_heads()
|
||||
. = 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
|
||||
|
||||
//////////////////////////////////////////////
|
||||
@@ -695,7 +756,7 @@ SUBSYSTEM_DEF(job)
|
||||
/datum/controller/subsystem/job/proc/get_living_sec()
|
||||
. = 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
|
||||
|
||||
////////////////////////////////////////
|
||||
@@ -704,7 +765,7 @@ SUBSYSTEM_DEF(job)
|
||||
/datum/controller/subsystem/job/proc/get_all_sec()
|
||||
. = 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
|
||||
|
||||
/datum/controller/subsystem/job/proc/JobDebug(message)
|
||||
|
||||
@@ -142,62 +142,50 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
|
||||
if(foundrecord)
|
||||
foundrecord.fields["rank"] = assignment
|
||||
|
||||
/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)
|
||||
var/name = t.fields["name"]
|
||||
var/rank = t.fields["rank"]
|
||||
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 (rank == "Captain" || (department != "Command" && (rank in heads)))
|
||||
manifest_out[department] = list(list(
|
||||
/datum/datacore/proc/get_manifest()
|
||||
// First we build up the order in which we want the departments to appear in.
|
||||
var/list/manifest_out = list()
|
||||
for(var/datum/job_department/department as anything in SSjob.joinable_departments)
|
||||
manifest_out[department.department_name] = list()
|
||||
manifest_out[DEPARTMENT_UNASSIGNED] = list()
|
||||
|
||||
var/list/departments_by_type = SSjob.joinable_departments_by_type
|
||||
for(var/datum/data/record/record as anything in GLOB.data_core.general)
|
||||
var/name = record.fields["name"]
|
||||
var/rank = record.fields["rank"]
|
||||
var/datum/job/job = SSjob.GetJob(rank)
|
||||
if(!job || !(job.job_flags & JOB_CREW_MANIFEST) || !LAZYLEN(job.departments_list)) // In case an unlawful custom rank is added.
|
||||
var/list/misc_list = manifest_out[DEPARTMENT_UNASSIGNED]
|
||||
misc_list[++misc_list.len] = list(
|
||||
"name" = name,
|
||||
"rank" = rank
|
||||
)) + manifest_out[department]
|
||||
"rank" = rank,
|
||||
)
|
||||
continue
|
||||
for(var/department_type as anything in job.departments_list)
|
||||
var/datum/job_department/department = departments_by_type[department_type]
|
||||
if(!department)
|
||||
stack_trace("get_manifest() failed to get job department for [department_type] of [job.type]")
|
||||
continue
|
||||
var/list/entry = list(
|
||||
"name" = name,
|
||||
"rank" = rank,
|
||||
)
|
||||
var/list/department_list = manifest_out[department.department_name]
|
||||
if(istype(job, department.department_head))
|
||||
department_list.Insert(1, null)
|
||||
department_list[1] = entry
|
||||
else
|
||||
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])
|
||||
department_list[++department_list.len] = entry
|
||||
|
||||
// Trim the empty categories.
|
||||
for (var/department in manifest_out)
|
||||
if(!length(manifest_out[department]))
|
||||
manifest_out -= department
|
||||
|
||||
return manifest_out
|
||||
|
||||
|
||||
/datum/datacore/proc/get_manifest_html(monochrome = FALSE)
|
||||
var/list/manifest = get_manifest()
|
||||
var/dat = {"
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
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)
|
||||
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
|
||||
if(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/datum/job/job = target_human.mind?.assigned_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>."))
|
||||
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."))
|
||||
return FALSE
|
||||
//THE INNOCENT
|
||||
@@ -272,7 +272,7 @@
|
||||
if(!silent)
|
||||
to_chat(user, span_warning("Followers of [GLOB.deity] cannot be evil!"))
|
||||
return FALSE
|
||||
if(guilty_conscience.assigned_role.departments & DEPARTMENT_SECURITY)
|
||||
if(guilty_conscience.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY)
|
||||
if(!silent)
|
||||
to_chat(user, span_warning("Members of security are uncorruptable! You cannot declare one evil!"))
|
||||
return FALSE
|
||||
|
||||
@@ -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)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!(job.departments & department_to_apply_to))
|
||||
if(!(job.departments_bitflags & department_to_apply_to))
|
||||
return
|
||||
|
||||
var/obj/item/implant/deathrattle/implant_to_give = new()
|
||||
@@ -160,43 +160,43 @@
|
||||
/datum/station_trait/deathrattle_department/service
|
||||
trait_flags = NONE
|
||||
weight = 1
|
||||
department_to_apply_to = DEPARTMENT_SERVICE
|
||||
department_to_apply_to = DEPARTMENT_BITFLAG_SERVICE
|
||||
department_name = "Service"
|
||||
|
||||
/datum/station_trait/deathrattle_department/cargo
|
||||
trait_flags = NONE
|
||||
weight = 1
|
||||
department_to_apply_to = DEPARTMENT_CARGO
|
||||
department_to_apply_to = DEPARTMENT_BITFLAG_CARGO
|
||||
department_name = "Cargo"
|
||||
|
||||
/datum/station_trait/deathrattle_department/engineering
|
||||
trait_flags = NONE
|
||||
weight = 1
|
||||
department_to_apply_to = DEPARTMENT_ENGINEERING
|
||||
department_to_apply_to = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
department_name = "Engineering"
|
||||
|
||||
/datum/station_trait/deathrattle_department/command
|
||||
trait_flags = NONE
|
||||
weight = 1
|
||||
department_to_apply_to = DEPARTMENT_COMMAND
|
||||
department_to_apply_to = DEPARTMENT_BITFLAG_COMMAND
|
||||
department_name = "Command"
|
||||
|
||||
/datum/station_trait/deathrattle_department/science
|
||||
trait_flags = NONE
|
||||
weight = 1
|
||||
department_to_apply_to = DEPARTMENT_SCIENCE
|
||||
department_to_apply_to = DEPARTMENT_BITFLAG_SCIENCE
|
||||
department_name = "Science"
|
||||
|
||||
/datum/station_trait/deathrattle_department/security
|
||||
trait_flags = NONE
|
||||
weight = 1
|
||||
department_to_apply_to = DEPARTMENT_SECURITY
|
||||
department_to_apply_to = DEPARTMENT_BITFLAG_SECURITY
|
||||
department_name = "Security"
|
||||
|
||||
/datum/station_trait/deathrattle_department/medical
|
||||
trait_flags = NONE
|
||||
weight = 1
|
||||
department_to_apply_to = DEPARTMENT_MEDICAL
|
||||
department_to_apply_to = DEPARTMENT_BITFLAG_MEDICAL
|
||||
department_name = "Medical"
|
||||
|
||||
/datum/station_trait/deathrattle_all
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
return FALSE
|
||||
var/head_check = 0
|
||||
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++
|
||||
return (head_check >= required_heads_of_staff)
|
||||
|
||||
|
||||
@@ -874,8 +874,7 @@
|
||||
|| candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \
|
||||
|| candidate.stat == DEAD \
|
||||
|| !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \
|
||||
|| !SSjob.GetJob(candidate.mind.assigned_role) \
|
||||
|| (candidate.mind.assigned_role in GLOB.nonhuman_positions) \
|
||||
|| !candidate.mind.assigned_role \
|
||||
)
|
||||
candidates -= candidate
|
||||
|
||||
|
||||
@@ -97,29 +97,17 @@
|
||||
return
|
||||
|
||||
/proc/reopen_roundstart_suicide_roles()
|
||||
var/list/valid_positions = list()
|
||||
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/include_command = CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_positions)
|
||||
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
|
||||
var/mob/living/L = X
|
||||
if(L.job in valid_positions)
|
||||
var/datum/job/J = SSjob.GetJob(L.job)
|
||||
if(!J)
|
||||
if(!include_command && job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
|
||||
continue
|
||||
J.current_positions = max(J.current_positions-1, 0)
|
||||
reopened_jobs += L.job
|
||||
job.current_positions = max(job.current_positions - 1, 0)
|
||||
reopened_jobs += quitter.job
|
||||
|
||||
if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report))
|
||||
if(reopened_jobs.len)
|
||||
|
||||
@@ -546,6 +546,12 @@ DEFINE_BITFIELD(turret_flags, list(
|
||||
if(!allowed(perp))
|
||||
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(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)))
|
||||
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
|
||||
|
||||
/obj/machinery/porta_turret/proc/in_faction(mob/target)
|
||||
|
||||
@@ -12,8 +12,10 @@
|
||||
var/inspiration_available = TRUE //If this banner can be used to inspire crew
|
||||
var/morale_time = 0
|
||||
var/morale_cooldown = 600 //How many deciseconds between uses
|
||||
var/list/job_loyalties //Mobs with any of these assigned roles will be inspired
|
||||
var/list/role_loyalties //Mobs with any of these special roles will be inspired
|
||||
/// Mobs with assigned roles whose department bitflags match these will be inspired.
|
||||
var/job_loyalties = NONE
|
||||
/// Mobs with any of these special roles will be inspired
|
||||
var/list/role_loyalties
|
||||
var/warcry
|
||||
|
||||
/obj/item/banner/examine(mob/user)
|
||||
@@ -38,14 +40,14 @@
|
||||
morale_time = world.time + morale_cooldown
|
||||
|
||||
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)
|
||||
inspired += user //The user is always inspired, regardless of loyalties
|
||||
for(var/mob/living/carbon/human/H in range(4, get_turf(src)))
|
||||
if(H.stat == DEAD || H == user)
|
||||
continue
|
||||
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
|
||||
else if(has_role_loyalties && (H.mind.special_role in role_loyalties))
|
||||
inspired += H
|
||||
@@ -86,7 +88,7 @@
|
||||
|
||||
/obj/item/banner/security/Initialize()
|
||||
. = ..()
|
||||
job_loyalties = GLOB.security_positions
|
||||
job_loyalties = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/obj/item/banner/security/mundane
|
||||
inspiration_available = FALSE
|
||||
@@ -110,7 +112,7 @@
|
||||
|
||||
/obj/item/banner/medical/Initialize()
|
||||
. = ..()
|
||||
job_loyalties = GLOB.medical_positions
|
||||
job_loyalties = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/obj/item/banner/medical/mundane
|
||||
inspiration_available = FALSE
|
||||
@@ -142,7 +144,7 @@
|
||||
|
||||
/obj/item/banner/science/Initialize()
|
||||
. = ..()
|
||||
job_loyalties = GLOB.science_positions
|
||||
job_loyalties = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/obj/item/banner/science/mundane
|
||||
inspiration_available = FALSE
|
||||
@@ -169,7 +171,7 @@
|
||||
|
||||
/obj/item/banner/cargo/Initialize()
|
||||
. = ..()
|
||||
job_loyalties = GLOB.supply_positions
|
||||
job_loyalties = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/obj/item/banner/cargo/mundane
|
||||
inspiration_available = FALSE
|
||||
@@ -193,7 +195,7 @@
|
||||
|
||||
/obj/item/banner/engineering/Initialize()
|
||||
. = ..()
|
||||
job_loyalties = GLOB.engineering_positions
|
||||
job_loyalties = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/obj/item/banner/engineering/mundane
|
||||
inspiration_available = FALSE
|
||||
@@ -217,7 +219,7 @@
|
||||
|
||||
/obj/item/banner/command/Initialize()
|
||||
. = ..()
|
||||
job_loyalties = GLOB.command_positions
|
||||
job_loyalties = DEPARTMENT_BITFLAG_COMMAND
|
||||
|
||||
/obj/item/banner/command/mundane
|
||||
inspiration_available = FALSE
|
||||
|
||||
@@ -110,7 +110,8 @@
|
||||
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("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_script("banpaneljs", 'html/admin/banpanel.js')
|
||||
var/list/output = list("<form method='get' action='?src=[REF(src)]'>[HrefTokenFormField()]")
|
||||
@@ -195,6 +196,7 @@
|
||||
</div>
|
||||
</div>
|
||||
"}
|
||||
|
||||
if(edit_id)
|
||||
output += {"<label class='inputlabel checkbox'>Mirror edits to matching bans
|
||||
<input type='checkbox' id='mirroredit' name='mirroredit' value='1'>
|
||||
@@ -232,48 +234,41 @@
|
||||
banned_from += query_get_banned_roles.item[1]
|
||||
qdel(query_get_banned_roles)
|
||||
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'>"
|
||||
//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/job in GLOB.command_positions)
|
||||
output += "<div class='row'>"
|
||||
|
||||
for(var/datum/job_department/department as anything in SSjob.joinable_departments)
|
||||
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))
|
||||
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++
|
||||
output += "</div></div>"
|
||||
//standard departments all have identical handling
|
||||
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>
|
||||
var/job_name = job_datum.title
|
||||
if(length(job_datum.departments_list) > 1) //This job is in multiple departments, so we need to check all the boxes.
|
||||
// Clicking this will also toggle all the other boxes, minus this one.
|
||||
var/department_index = job_datum.departments_list.Find(department.type)
|
||||
if(!department_index)
|
||||
stack_trace("Failed to find a department index for [department.type] in the departments_list of [job_datum.type]")
|
||||
output += {"<label class='inputlabel checkbox'>[job_name]
|
||||
<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]\")'" : ""]>
|
||||
<div class='inputbox[(job_name 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>
|
||||
else
|
||||
output += {"<label class='inputlabel checkbox'>[job_name]
|
||||
<input type='checkbox' name='[job_name]' class='[label_class]' value='1'>
|
||||
<div class='inputbox[(job_name in banned_from) ? " banned" : ""]'></div></label>
|
||||
"}
|
||||
break_counter++
|
||||
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
|
||||
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))
|
||||
output += "<br>"
|
||||
output += {"<label class='inputlabel checkbox'>[job]
|
||||
@@ -283,8 +278,8 @@
|
||||
break_counter++
|
||||
output += "</div></div>"
|
||||
var/list/long_job_lists = list(
|
||||
"Service" = GLOB.service_positions,
|
||||
"Ghost and Other Roles" = list(
|
||||
ROLE_PAI,
|
||||
ROLE_BRAINWASHED,
|
||||
ROLE_DEATHSQUAD,
|
||||
ROLE_DRONE,
|
||||
@@ -317,7 +312,7 @@
|
||||
),
|
||||
)
|
||||
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
|
||||
for(var/job in long_job_lists[department])
|
||||
if(break_counter > 0 && (break_counter % 10 == 0))
|
||||
@@ -330,9 +325,10 @@
|
||||
output += "</div></div>"
|
||||
output += "</div>"
|
||||
output += "</form>"
|
||||
panel.set_content(jointext(output, ""))
|
||||
panel.set_content(output.Join())
|
||||
panel.open()
|
||||
|
||||
|
||||
/datum/admins/proc/ban_parse_href(list/href_list)
|
||||
if(!check_rights(R_BAN))
|
||||
return
|
||||
|
||||
@@ -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())
|
||||
|
||||
/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"] "
|
||||
for(var/i in 1 to 6)
|
||||
if(prob(30) || i == 1)
|
||||
|
||||
@@ -162,14 +162,14 @@
|
||||
return
|
||||
var/list/viable_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)
|
||||
if(!human_alive.mind)
|
||||
continue
|
||||
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.
|
||||
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
|
||||
viable_coworkers += human_alive.mind
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@
|
||||
|
||||
/datum/antagonist/gang/purple/check_gang_objective()
|
||||
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
|
||||
if(!player.suiciding && !considered_alive(player))
|
||||
return FALSE
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
/datum/antagonist/rev/can_be_owned(datum/mind/new_owner)
|
||||
. = ..()
|
||||
if(.)
|
||||
if(new_owner.assigned_role.departments & DEPARTMENT_COMMAND)
|
||||
if(new_owner.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
|
||||
return FALSE
|
||||
if(new_owner.unconvertable)
|
||||
return FALSE
|
||||
@@ -417,7 +417,7 @@
|
||||
if (isnull(mind))
|
||||
continue
|
||||
|
||||
if (!(mind.assigned_role.departments & (DEPARTMENT_SECURITY|DEPARTMENT_COMMAND)))
|
||||
if (!(mind.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND)))
|
||||
continue
|
||||
|
||||
if (mind in ex_revs + ex_headrevs)
|
||||
@@ -435,8 +435,9 @@
|
||||
else
|
||||
mind.announce_objectives()
|
||||
|
||||
for (var/job_name in GLOB.command_positions + GLOB.security_positions)
|
||||
var/datum/job/job = SSjob.GetJob(job_name)
|
||||
for(var/datum/job/job as anything in SSjob.joinable_occupations)
|
||||
if(!(job.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND)))
|
||||
continue
|
||||
job.allow_bureaucratic_error = FALSE
|
||||
job.total_positions = 0
|
||||
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
objectives += kill_objective
|
||||
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
|
||||
download_objective.owner = owner
|
||||
download_objective.gen_amount_goal()
|
||||
|
||||
@@ -913,7 +913,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/job/lastJob
|
||||
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
|
||||
if(index >= limit)
|
||||
@@ -942,7 +942,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))
|
||||
HTML += "<font color=orange>[rank]</font></td><td></td></tr>"
|
||||
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>"
|
||||
else
|
||||
HTML += "<span class='dark'>[rank]</span>"
|
||||
@@ -1964,7 +1964,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
/datum/preferences/proc/should_be_random_hardcore(datum/job/job, datum/mind/mind)
|
||||
if(!randomise[RANDOM_HARDCORE])
|
||||
return FALSE
|
||||
if(job.departments & DEPARTMENT_COMMAND) //No command staff
|
||||
if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) //No command staff
|
||||
return FALSE
|
||||
for(var/datum/antagonist/antag as anything in mind.antag_datums)
|
||||
if(antag.get_team()) //No team antags
|
||||
|
||||
@@ -426,7 +426,7 @@
|
||||
return 0
|
||||
else if("pirate" in H.faction) //can't ransom your fellow pirates to CentCom!
|
||||
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
|
||||
else
|
||||
return 1000
|
||||
|
||||
@@ -56,25 +56,37 @@
|
||||
|
||||
switch(department)
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
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("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka")
|
||||
|
||||
109
code/modules/jobs/departments/departments.dm
Normal file
109
code/modules/jobs/departments/departments.dm
Normal 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
|
||||
@@ -1,6 +1,7 @@
|
||||
GLOBAL_LIST_EMPTY(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
|
||||
/datum/job/proc/required_playtime_remaining(client/C)
|
||||
if(!C)
|
||||
@@ -9,9 +10,7 @@ GLOBAL_PROTECT(exp_to_update)
|
||||
return 0
|
||||
if(!SSdbcore.Connect())
|
||||
return 0
|
||||
if(!exp_requirements || !exp_type)
|
||||
return 0
|
||||
if(!job_is_xp_locked(src.title))
|
||||
if(!IS_XP_LOCKED(src))
|
||||
return 0
|
||||
if(CONFIG_GET(flag/use_exp_restrictions_admin_bypass) && check_rights_for(C,R_ADMIN))
|
||||
return 0
|
||||
@@ -24,37 +23,32 @@ GLOBAL_PROTECT(exp_to_update)
|
||||
return 0
|
||||
else
|
||||
return (job_requirement - my_exp)
|
||||
#undef IS_XP_LOCKED
|
||||
|
||||
|
||||
/datum/job/proc/get_exp_req_amount()
|
||||
if(title in (GLOB.command_positions | list("AI")))
|
||||
if(exp_required_type_department)
|
||||
var/uerhh = CONFIG_GET(number/use_exp_restrictions_heads_hours)
|
||||
if(uerhh)
|
||||
return uerhh * 60
|
||||
return exp_requirements
|
||||
|
||||
/datum/job/proc/get_exp_req_type()
|
||||
if(title in (GLOB.command_positions | list("AI")))
|
||||
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)
|
||||
if(!CONFIG_GET(flag/use_exp_restrictions_heads) && (jobtitle in (GLOB.command_positions | list("AI"))))
|
||||
return FALSE
|
||||
if(!CONFIG_GET(flag/use_exp_restrictions_other) && !(jobtitle in (GLOB.command_positions | list("AI"))))
|
||||
return FALSE
|
||||
return TRUE
|
||||
/datum/job/proc/get_exp_req_type()
|
||||
if(exp_required_type_department && CONFIG_GET(flag/use_exp_restrictions_heads_department))
|
||||
return exp_required_type_department
|
||||
return exp_required_type
|
||||
|
||||
|
||||
/client/proc/calc_exp_type(exptype)
|
||||
var/list/explist = prefs.exp.Copy()
|
||||
var/amount = 0
|
||||
var/list/typelist = GLOB.exp_jobsmap[exptype]
|
||||
if(!typelist)
|
||||
var/list/job_list = SSjob.experience_jobs_map[exptype]
|
||||
if(!job_list)
|
||||
return -1
|
||||
for(var/job in typelist["titles"])
|
||||
if(job in explist)
|
||||
amount += explist[job]
|
||||
return amount
|
||||
var/list/exp_map = prefs.exp.Copy()
|
||||
. = 0
|
||||
for(var/datum/job/job as anything in job_list)
|
||||
. += exp_map[job.title]
|
||||
|
||||
|
||||
/client/proc/get_exp_living(pure_numeric = FALSE)
|
||||
if(!prefs.exp || !prefs.exp[EXP_TYPE_LIVING])
|
||||
|
||||
@@ -48,10 +48,14 @@
|
||||
/// The job's outfit that will be assigned for plasmamen.
|
||||
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_type = ""
|
||||
var/exp_type_department = ""
|
||||
/// 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_required_type = ""
|
||||
/// 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_department = ACCOUNT_CIV
|
||||
@@ -73,8 +77,10 @@
|
||||
/// If this job's mail goodies compete with generic goodies.
|
||||
var/exclusive_mail_goodies = FALSE
|
||||
|
||||
///Bitfield of departments this job belongs wit
|
||||
var/departments = NONE
|
||||
/// Bitfield of departments this job belongs to. These get setup when adding the job into the department, on job datum creation.
|
||||
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?
|
||||
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.
|
||||
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
|
||||
|
||||
/// Multiplier for general usage of the voice of god.
|
||||
@@ -387,7 +393,7 @@
|
||||
if(!player_client)
|
||||
return // Disconnected while checking for the appearance ban.
|
||||
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 != SPECIES_HUMAN)
|
||||
player_client.prefs.pref_species = new /datum/species/human
|
||||
player_client.prefs.randomise_appearance_prefs(~RANDOMIZE_SPECIES)
|
||||
@@ -398,7 +404,7 @@
|
||||
fully_replace_character_name(null, GLOB.current_anonymous_theme.anonymous_name(src))
|
||||
else
|
||||
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
|
||||
if(player_client.prefs.pref_species.id != SPECIES_HUMAN)
|
||||
player_client.prefs.pref_species = new /datum/species/human
|
||||
|
||||
@@ -10,13 +10,16 @@
|
||||
req_admin_notify = TRUE
|
||||
minimal_player_age = 30
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SILICON
|
||||
exp_required_type = EXP_TYPE_CREW
|
||||
exp_required_type_department = EXP_TYPE_SILICON
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
display_order = JOB_DISPLAY_ORDER_AI
|
||||
allow_bureaucratic_error = FALSE
|
||||
departments = DEPARTMENT_SILICON
|
||||
departments_list = list(
|
||||
/datum/job_department/silicon,
|
||||
)
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@ Assistant
|
||||
spawn_positions = 5
|
||||
supervisors = "absolutely everyone"
|
||||
selection_color = "#dddddd"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
outfit = /datum/outfit/job/assistant
|
||||
plasmaman_outfit = /datum/outfit/plasmaman
|
||||
paycheck = PAYCHECK_ASSISTANT // Get a job. Job reassignment changes your paycheck now. Get over it.
|
||||
departments = DEPARTMENT_SERVICE
|
||||
|
||||
liver_traits = list(TRAIT_GREYTIDE_METABOLISM)
|
||||
|
||||
@@ -29,7 +29,7 @@ Assistant
|
||||
/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
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#fff5cc"
|
||||
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
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/atmospherics
|
||||
@@ -19,11 +20,13 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/bartender
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/bar
|
||||
@@ -14,7 +15,9 @@
|
||||
paycheck_department = ACCOUNT_SRV
|
||||
display_order = JOB_DISPLAY_ORDER_BARTENDER
|
||||
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)
|
||||
|
||||
@@ -25,7 +28,7 @@
|
||||
/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)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/botanist
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/botany
|
||||
@@ -14,7 +15,9 @@
|
||||
paycheck_department = ACCOUNT_SRV
|
||||
display_order = JOB_DISPLAY_ORDER_BOTANIST
|
||||
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)
|
||||
|
||||
@@ -27,7 +30,7 @@
|
||||
/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
|
||||
|
||||
@@ -10,8 +10,9 @@
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 14
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_COMMAND
|
||||
exp_required_type = EXP_TYPE_CREW
|
||||
exp_required_type_department = EXP_TYPE_COMMAND
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/captain
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/captain
|
||||
@@ -22,7 +23,9 @@
|
||||
liver_traits = list(TRAIT_ROYAL_METABOLISM)
|
||||
|
||||
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)
|
||||
|
||||
@@ -32,7 +35,7 @@
|
||||
/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
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#dcba97"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/cargo_tech
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/cargo
|
||||
@@ -14,7 +15,9 @@
|
||||
paycheck_department = ACCOUNT_CAR
|
||||
display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
|
||||
bounty_types = CIV_JOB_RANDOM
|
||||
departments = DEPARTMENT_CARGO
|
||||
departments_list = list(
|
||||
/datum/job_department/cargo,
|
||||
)
|
||||
|
||||
family_heirlooms = list(/obj/item/clipboard)
|
||||
|
||||
@@ -26,7 +29,7 @@
|
||||
/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
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/chaplain
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/chaplain
|
||||
@@ -14,7 +15,9 @@
|
||||
paycheck_department = ACCOUNT_SRV
|
||||
|
||||
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)
|
||||
|
||||
@@ -26,7 +29,7 @@
|
||||
/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
|
||||
|
||||
|
||||
@@ -6,8 +6,9 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#ffeef0"
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_requirements = 60
|
||||
exp_required_type = EXP_TYPE_CREW
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/chemist
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/chemist
|
||||
@@ -19,7 +20,9 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CHEMIST
|
||||
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)
|
||||
|
||||
@@ -30,7 +33,7 @@
|
||||
/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
|
||||
|
||||
@@ -11,12 +11,16 @@
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_ENGINEERING
|
||||
exp_required_type = EXP_TYPE_CREW
|
||||
exp_required_type_department = EXP_TYPE_ENGINEERING
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/ce
|
||||
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_department = ACCOUNT_ENG
|
||||
@@ -37,7 +41,7 @@
|
||||
/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
|
||||
|
||||
|
||||
@@ -11,12 +11,16 @@
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_MEDICAL
|
||||
exp_required_type = EXP_TYPE_CREW
|
||||
exp_required_type_department = EXP_TYPE_MEDICAL
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/cmo
|
||||
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_department = ACCOUNT_MED
|
||||
@@ -34,7 +38,7 @@
|
||||
)
|
||||
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
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/clown
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/clown
|
||||
@@ -16,7 +17,9 @@
|
||||
liver_traits = list(TRAIT_COMEDY_METABOLISM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CLOWN
|
||||
departments = DEPARTMENT_SERVICE
|
||||
departments_list = list(
|
||||
/datum/job_department/service,
|
||||
)
|
||||
|
||||
mail_goodies = list(
|
||||
/obj/item/food/grown/banana = 100,
|
||||
@@ -28,7 +31,7 @@
|
||||
|
||||
family_heirlooms = list(/obj/item/bikehorn/golden)
|
||||
|
||||
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/clown/after_spawn(mob/living/spawned, client/player_client)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
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.
|
||||
var/list/kitchen_areas = list(/area/service/kitchen)
|
||||
@@ -20,11 +21,13 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_COOK
|
||||
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)
|
||||
|
||||
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()
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/curator
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/curator
|
||||
@@ -14,11 +15,13 @@
|
||||
paycheck_department = ACCOUNT_SRV
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -9,10 +9,14 @@
|
||||
spawn_type = /mob/living/silicon/robot
|
||||
minimal_player_age = 21
|
||||
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
|
||||
departments = DEPARTMENT_SILICON
|
||||
|
||||
departments_list = list(
|
||||
/datum/job_department/silicon,
|
||||
)
|
||||
random_spawns_possible = FALSE
|
||||
job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK
|
||||
|
||||
|
||||
@@ -9,11 +9,14 @@
|
||||
selection_color = "#ffeeee"
|
||||
minimal_player_age = 7
|
||||
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
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/detective
|
||||
departments = DEPARTMENT_SECURITY
|
||||
departments_list = list(
|
||||
/datum/job_department/security,
|
||||
)
|
||||
|
||||
paycheck = PAYCHECK_MEDIUM
|
||||
paycheck_department = ACCOUNT_SEC
|
||||
@@ -36,7 +39,7 @@
|
||||
|
||||
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
|
||||
|
||||
@@ -6,12 +6,15 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the research director"
|
||||
selection_color = "#ffeeff"
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_requirements = 60
|
||||
exp_required_type = EXP_TYPE_CREW
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/geneticist
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/genetics
|
||||
departments = DEPARTMENT_MEDICAL
|
||||
departments_list = list(
|
||||
/datum/job_department/medical,
|
||||
)
|
||||
|
||||
paycheck = PAYCHECK_MEDIUM
|
||||
paycheck_department = ACCOUNT_SCI
|
||||
@@ -25,7 +28,7 @@
|
||||
|
||||
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
|
||||
|
||||
@@ -11,12 +11,16 @@
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 10
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SERVICE
|
||||
exp_required_type = EXP_TYPE_CREW
|
||||
exp_required_type_department = EXP_TYPE_SERVICE
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/hop
|
||||
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_department = ACCOUNT_SRV
|
||||
@@ -33,7 +37,7 @@
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -11,12 +11,16 @@
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 14
|
||||
exp_requirements = 300
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = 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/hos
|
||||
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)
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/janitor
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/janitor
|
||||
@@ -14,7 +15,9 @@
|
||||
paycheck_department = ACCOUNT_SRV
|
||||
|
||||
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)
|
||||
|
||||
@@ -24,7 +27,7 @@
|
||||
/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
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
var/lawyers = 0 //Counts lawyer amount
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/lawyer
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/bar
|
||||
@@ -18,11 +18,13 @@
|
||||
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 3
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#ffeef0"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/doctor
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/medical
|
||||
@@ -17,7 +18,9 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR
|
||||
bounty_types = CIV_JOB_MED
|
||||
departments = DEPARTMENT_MEDICAL
|
||||
departments_list = list(
|
||||
/datum/job_department/medical,
|
||||
)
|
||||
|
||||
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
|
||||
|
||||
@@ -31,7 +34,7 @@
|
||||
/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
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/mime
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/mime
|
||||
@@ -14,7 +15,9 @@
|
||||
paycheck_department = ACCOUNT_SRV
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_MIME
|
||||
departments = DEPARTMENT_SERVICE
|
||||
departments_list = list(
|
||||
/datum/job_department/service,
|
||||
)
|
||||
|
||||
family_heirlooms = list(/obj/item/food/baguette)
|
||||
|
||||
@@ -25,7 +28,7 @@
|
||||
/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_silence_power = 3
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#ffeef0"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/paramedic
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/paramedic
|
||||
@@ -17,7 +18,9 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_PARAMEDIC
|
||||
bounty_types = CIV_JOB_MED
|
||||
departments = DEPARTMENT_MEDICAL
|
||||
departments_list = list(
|
||||
/datum/job_department/medical,
|
||||
)
|
||||
|
||||
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
|
||||
|
||||
@@ -30,7 +33,7 @@
|
||||
/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
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 2
|
||||
supervisors = "the security team"
|
||||
selection_color = "#ffe1c3"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
paycheck = PAYCHECK_PRISONER
|
||||
|
||||
outfit = /datum/outfit/job/prisoner
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel and the chief medical officer"
|
||||
selection_color = "#bbe291"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/psychologist
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/psychologist
|
||||
@@ -16,7 +17,9 @@
|
||||
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_PSYCHOLOGIST
|
||||
departments = DEPARTMENT_SERVICE
|
||||
departments_list = list(
|
||||
/datum/job_department/service,
|
||||
)
|
||||
|
||||
family_heirlooms = list(/obj/item/storage/pill_bottle)
|
||||
|
||||
@@ -26,7 +29,7 @@
|
||||
/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
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
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
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/cargo
|
||||
@@ -18,13 +19,15 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_QUARTERMASTER
|
||||
bounty_types = CIV_JOB_RANDOM
|
||||
departments = DEPARTMENT_CARGO
|
||||
departments_list = list(
|
||||
/datum/job_department/cargo,
|
||||
)
|
||||
family_heirlooms = list(/obj/item/stamp, /obj/item/stamp/denied)
|
||||
mail_goodies = list(
|
||||
/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/outfit/job/quartermaster
|
||||
|
||||
@@ -10,13 +10,17 @@
|
||||
selection_color = "#ffddff"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
exp_type_department = EXP_TYPE_SCIENCE
|
||||
exp_required_type_department = EXP_TYPE_SCIENCE
|
||||
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
|
||||
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_department = ACCOUNT_SCI
|
||||
@@ -34,7 +38,7 @@
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -7,12 +7,15 @@
|
||||
supervisors = "the research director"
|
||||
selection_color = "#ffeeff"
|
||||
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
|
||||
|
||||
outfit = /datum/outfit/job/roboticist
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/robotics
|
||||
departments = DEPARTMENT_SCIENCE
|
||||
departments_list = list(
|
||||
/datum/job_department/science,
|
||||
)
|
||||
|
||||
paycheck = PAYCHECK_MEDIUM
|
||||
paycheck_department = ACCOUNT_SCI
|
||||
@@ -27,7 +30,7 @@
|
||||
|
||||
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()
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
supervisors = "the research director"
|
||||
selection_color = "#ffeeff"
|
||||
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
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/science
|
||||
@@ -17,7 +18,9 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_SCIENTIST
|
||||
bounty_types = CIV_JOB_SCI
|
||||
departments = DEPARTMENT_SCIENCE
|
||||
departments_list = list(
|
||||
/datum/job_department/science,
|
||||
)
|
||||
|
||||
family_heirlooms = list(/obj/item/toy/plush/slimeplushie)
|
||||
|
||||
@@ -27,7 +30,7 @@
|
||||
/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
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
selection_color = "#ffeeee"
|
||||
minimal_player_age = 7
|
||||
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
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/security
|
||||
@@ -22,7 +23,9 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER
|
||||
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)
|
||||
|
||||
@@ -34,7 +37,7 @@
|
||||
/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))
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
spawn_positions = 3
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#dcba97"
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/miner
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/mining
|
||||
@@ -15,11 +16,13 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#fff5cc"
|
||||
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
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/engineering
|
||||
@@ -19,7 +20,9 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER
|
||||
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)
|
||||
|
||||
@@ -30,7 +33,7 @@
|
||||
/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
|
||||
|
||||
@@ -6,8 +6,9 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#ffeef0"
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_requirements = 60
|
||||
exp_required_type = EXP_TYPE_CREW
|
||||
exp_granted_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/virologist
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/viro
|
||||
@@ -19,7 +20,9 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_VIROLOGIST
|
||||
bounty_types = CIV_JOB_VIRO
|
||||
departments = DEPARTMENT_MEDICAL
|
||||
departments_list = list(
|
||||
/datum/job_department/medical,
|
||||
)
|
||||
|
||||
family_heirlooms = list(/obj/item/reagent_containers/syringe)
|
||||
|
||||
@@ -31,7 +34,7 @@
|
||||
/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
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
selection_color = "#ffeeee"
|
||||
minimal_player_age = 7
|
||||
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
|
||||
plasmaman_outfit = /datum/outfit/plasmaman/warden
|
||||
@@ -22,7 +23,9 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_WARDEN
|
||||
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)
|
||||
|
||||
@@ -35,7 +38,7 @@
|
||||
/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
|
||||
|
||||
@@ -1,104 +1,3 @@
|
||||
GLOBAL_LIST_INIT(command_positions, list(
|
||||
"Captain",
|
||||
"Head of Personnel",
|
||||
"Head of Security",
|
||||
"Chief Engineer",
|
||||
"Research Director",
|
||||
"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"))
|
||||
|
||||
|
||||
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"))
|
||||
|
||||
/// 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_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" = command_positions | engineering_positions | medical_positions | science_positions | supply_positions | security_positions | service_positions | list("AI","Cyborg")), // crew positions
|
||||
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.
|
||||
GLOBAL_LIST_INIT(exp_specialmap, list(
|
||||
EXP_TYPE_LIVING = list(), // all living mobs
|
||||
@@ -126,7 +25,6 @@ GLOBAL_LIST_INIT(exp_specialmap, list(
|
||||
), // Ghost roles
|
||||
EXP_TYPE_GHOST = list() // dead people, observers
|
||||
))
|
||||
GLOBAL_PROTECT(exp_jobsmap)
|
||||
GLOBAL_PROTECT(exp_specialmap)
|
||||
|
||||
//this is necessary because antags happen before job datums are handed out, but NOT before they come into existence
|
||||
|
||||
@@ -18,41 +18,19 @@
|
||||
return
|
||||
|
||||
/datum/crew_manifest/ui_data(mob/user)
|
||||
var/list/positions = list(
|
||||
"Command" = list("exceptions" = list(), "open" = 0),
|
||||
"Security" = list("exceptions" = list(), "open" = 0),
|
||||
"Engineering" = list("exceptions" = list(), "open" = 0),
|
||||
"Medical" = list("exceptions" = list(), "open" = 0),
|
||||
"Misc" = list("exceptions" = list(), "open" = 0),
|
||||
"Science" = list("exceptions" = list(), "open" = 0),
|
||||
"Supply" = list("exceptions" = list(), "open" = 0),
|
||||
"Service" = list("exceptions" = list(), "open" = 0),
|
||||
"Silicon" = list("exceptions" = list(), "open" = 0)
|
||||
)
|
||||
var/list/departments = list(
|
||||
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"])
|
||||
var/list/positions = list()
|
||||
for(var/datum/job_department/department as anything in SSjob.joinable_departments)
|
||||
var/open = 0
|
||||
var/list/exceptions = list()
|
||||
for(var/datum/job/job as anything in department.department_jobs)
|
||||
if(job.total_positions == -1)
|
||||
exceptions += job.title
|
||||
continue
|
||||
var/open_slots = job.total_positions - job.current_positions
|
||||
if(open_slots < 1)
|
||||
continue
|
||||
open += open_slots
|
||||
positions[department.department_name] = list("exceptions" = exceptions, "open" = open)
|
||||
|
||||
return list(
|
||||
"manifest" = GLOB.data_core.get_manifest(),
|
||||
|
||||
@@ -407,26 +407,25 @@
|
||||
SSjob.prioritized_jobs -= prioritized_job
|
||||
dat += "<table><tr><td valign='top'>"
|
||||
var/column_counter = 0
|
||||
// render each category's available jobs
|
||||
for(var/category in GLOB.position_categories)
|
||||
// position_categories contains category names mapped to available jobs and an appropriate color
|
||||
var/cat_color = GLOB.position_categories[category]["color"]
|
||||
dat += "<fieldset style='width: 185px; border: 2px solid [cat_color]; display: inline'>"
|
||||
dat += "<legend align='center' style='color: [cat_color]'>[category]</legend>"
|
||||
var/list/dept_dat = list()
|
||||
for(var/job in GLOB.position_categories[category]["jobs"])
|
||||
var/datum/job/job_datum = SSjob.name_occupations[job]
|
||||
if(job_datum && IsJobUnavailable(job_datum.title, TRUE) == JOB_AVAILABLE)
|
||||
|
||||
for(var/datum/job_department/department as anything in SSjob.joinable_departments)
|
||||
var/department_color = department.latejoin_color
|
||||
dat += "<fieldset style='width: 185px; border: 2px solid [department_color]; display: inline'>"
|
||||
dat += "<legend align='center' style='color: [department_color]'>[department.department_name]</legend>"
|
||||
var/list/dept_data = list()
|
||||
for(var/datum/job/job_datum as anything in department.department_jobs)
|
||||
if(IsJobUnavailable(job_datum.title, TRUE) != JOB_AVAILABLE)
|
||||
continue
|
||||
var/command_bold = ""
|
||||
if(job in GLOB.command_positions)
|
||||
if(job_datum.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
|
||||
command_bold = " command"
|
||||
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
|
||||
dept_dat += "<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)
|
||||
dept_dat += "<span class='nopositions'>No positions open.</span>"
|
||||
dat += jointext(dept_dat, "")
|
||||
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(!length(dept_data))
|
||||
dept_data += "<span class='nopositions'>No positions open.</span>"
|
||||
dat += dept_data.Join()
|
||||
dat += "</fieldset><br>"
|
||||
column_counter++
|
||||
if(column_counter > 0 && (column_counter % 3 == 0))
|
||||
|
||||
@@ -72,3 +72,7 @@
|
||||
.antagonistpositions {
|
||||
background-color: #6d3f40;
|
||||
}
|
||||
|
||||
.undefineddepartment {
|
||||
background-color: #111cf7;
|
||||
}
|
||||
|
||||
@@ -1,16 +1,10 @@
|
||||
function toggle_head(source, ext) {
|
||||
document.getElementById(source.id.slice(0, -4) + ext).checked = source.checked;
|
||||
}
|
||||
|
||||
function toggle_checkboxes(source, ext) {
|
||||
var checkboxes = document.getElementsByClassName(source.name);
|
||||
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;
|
||||
}
|
||||
function toggle_other_checkboxes(source, copycats_str, our_index_str) {
|
||||
const copycats = parseInt(copycats_str);
|
||||
const our_index = parseInt(our_index_str);
|
||||
for (var i = 1; i <= copycats; i++) {
|
||||
if(i === our_index) {
|
||||
continue;
|
||||
}
|
||||
document.getElementById(source.id.slice(0, -1) + i).checked = source.checked;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2432,6 +2432,7 @@
|
||||
#include "code\modules\jobs\job_exp.dm"
|
||||
#include "code\modules\jobs\job_report.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\ai.dm"
|
||||
#include "code\modules\jobs\job_types\assistant.dm"
|
||||
|
||||
Reference in New Issue
Block a user