Merge pull request #16092 from SandPoot/update_manifest

Crew manifest TGUI
This commit is contained in:
deathride58
2024-05-25 14:01:48 -04:00
committed by GitHub
47 changed files with 174 additions and 231 deletions

View File

@@ -91,3 +91,22 @@
#define JOB_DISPLAY_ORDER_DETECTIVE 32
#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 33
#define JOB_DISPLAY_ORDER_PRISONER 34
#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"

View File

@@ -1 +1,2 @@
GLOBAL_DATUM(crew_manifest_tgui, /datum/crew_manifest)
GLOBAL_DATUM(changelog_tgui, /datum/changelog)

View File

@@ -91,7 +91,7 @@
if(foundrecord)
foundrecord.fields["rank"] = assignment
/datum/datacore/proc/get_manifest_tg() //copypasted from tg, renamed to avoid namespace conflicts
/datum/datacore/proc/get_manifest()
var/list/manifest_out = list()
var/list/departments = list(
"Command" = GLOB.command_positions,
@@ -112,12 +112,18 @@
if(rank in jobs)
if(!manifest_out[department])
manifest_out[department] = list()
manifest_out[department] += list(list(
"name" = name,
"rank" = rank
))
// Append to beginning of list if captain or department head
if (rank == "Captain" || (department != "Command" && (rank in GLOB.command_positions)))
manifest_out[department] = list(list(
"name" = name,
"rank" = rank
)) + manifest_out[department]
else
manifest_out[department] += list(list(
"name" = name,
"rank" = rank
))
has_department = TRUE
break
if(!has_department)
if(!manifest_out["Misc"])
manifest_out["Misc"] = list()
@@ -127,114 +133,6 @@
))
return manifest_out
/datum/datacore/proc/get_manifest(monochrome, OOC)
var/list/heads = list()
var/list/sec = list()
var/list/eng = list()
var/list/med = list()
var/list/sci = list()
var/list/sup = list()
var/list/civ = list()
var/list/bot = list()
var/list/misc = list()
var/dat = {"
<head><style>
.manifest {border-collapse:collapse;}
.manifest td, th {border:1px solid [monochrome?"black":"#DEF; background-color:white; color:black"]; padding:.25em}
.manifest th {height: 2em; [monochrome?"border-top-width: 3px":"background-color: #48C; color:white"]}
.manifest tr.head th { [monochrome?"border-top-width: 1px":"background-color: #488;"] }
.manifest td:first-child {text-align:right}
.manifest tr.alt td {[monochrome?"border-top-width: 2px":"background-color: #DEF"]}
</style></head>
<table class="manifest" width='350px'>
<tr class='head'><th>Name</th><th>Rank</th></tr>
"}
var/even = 0
// sort mobs
for(var/datum/data/record/t in GLOB.data_core.general)
var/name = t.fields["name"]
var/rank = t.fields["rank"]
var/department = 0
if(rank in GLOB.command_positions)
heads[name] = rank
department = 1
if(rank in GLOB.security_positions)
sec[name] = rank
department = 1
if(rank in GLOB.engineering_positions)
eng[name] = rank
department = 1
if(rank in GLOB.medical_positions)
med[name] = rank
department = 1
if(rank in GLOB.science_positions)
sci[name] = rank
department = 1
if(rank in GLOB.supply_positions)
sup[name] = rank
department = 1
if(rank in GLOB.civilian_positions)
civ[name] = rank
department = 1
if(rank in GLOB.nonhuman_positions)
bot[name] = rank
department = 1
if(!department && !(name in heads))
misc[name] = rank
if(heads.len > 0)
dat += "<tr><th colspan=3>Heads</th></tr>"
for(var/name in heads)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[heads[name]]</td></tr>"
even = !even
if(sec.len > 0)
dat += "<tr><th colspan=3>Security</th></tr>"
for(var/name in sec)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sec[name]]</td></tr>"
even = !even
if(eng.len > 0)
dat += "<tr><th colspan=3>Engineering</th></tr>"
for(var/name in eng)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[eng[name]]</td></tr>"
even = !even
if(med.len > 0)
dat += "<tr><th colspan=3>Medical</th></tr>"
for(var/name in med)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[med[name]]</td></tr>"
even = !even
if(sci.len > 0)
dat += "<tr><th colspan=3>Science</th></tr>"
for(var/name in sci)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sci[name]]</td></tr>"
even = !even
if(sup.len > 0)
dat += "<tr><th colspan=3>Supply</th></tr>"
for(var/name in sup)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[sup[name]]</td></tr>"
even = !even
if(civ.len > 0)
dat += "<tr><th colspan=3>Civilian</th></tr>"
for(var/name in civ)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[civ[name]]</td></tr>"
even = !even
// in case somebody is insane and added them to the manifest, why not
if(bot.len > 0)
dat += "<tr><th colspan=3>Silicon</th></tr>"
for(var/name in bot)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[bot[name]]</td></tr>"
even = !even
// misc guys
if(misc.len > 0)
dat += "<tr><th colspan=3>Miscellaneous</th></tr>"
for(var/name in misc)
dat += "<tr[even ? " class='alt'" : ""]><td>[name]</td><td>[misc[name]]</td></tr>"
even = !even
dat += "</table>"
dat = replacetext(dat, "\n", "")
dat = replacetext(dat, "\t", "")
return dat
/datum/datacore/proc/manifest_inject(mob/living/carbon/human/H, client/C, datum/preferences/prefs)
set waitfor = FALSE
var/static/list/show_directions = list(SOUTH, WEST)

View File

@@ -149,7 +149,7 @@
trait_flags = STATION_TRAIT_ABSTRACT
blacklist = list(/datum/station_trait/deathrattle_all)
var/department_head
var/department_to_apply_to
var/department_name = "department"
var/datum/deathrattle_group/deathrattle_group
@@ -157,72 +157,65 @@
. = ..()
deathrattle_group = new("[department_name] group")
blacklist += subtypesof(/datum/station_trait/deathrattle_department) - type //All but ourselves
name = "deathrattled [department_name]"
report_message = "All members of [department_name] have received an implant to notify each other if one of them dies. This should help improve job-safety!"
RegisterSignal(SSdcs, COMSIG_GLOB_JOB_AFTER_SPAWN, PROC_REF(on_job_after_spawn))
/datum/station_trait/deathrattle_department/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned, client/player_client)
/datum/station_trait/deathrattle_department/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/living_mob, mob/M, joined_late)
SIGNAL_HANDLER
if(department_head != job.title && !(src.department_head in job.department_head))
if(!(job.departments & department_to_apply_to))
return
var/obj/item/implant/deathrattle/implant_to_give = new()
deathrattle_group.register(implant_to_give)
implant_to_give.implant(spawned, spawned, TRUE, TRUE)
implant_to_give.implant(living_mob, living_mob, TRUE, TRUE)
/datum/station_trait/deathrattle_department/service
name = "Deathrattled Service"
trait_flags = NONE
weight = 1
department_head = "Head of Personnel"
department_to_apply_to = DEPARTMENT_BITFLAG_SERVICE
department_name = "Service"
/datum/station_trait/deathrattle_department/cargo
name = "Deathrattled Cargo"
trait_flags = NONE
weight = 2
department_head = "Quartermaster"
weight = 1
department_to_apply_to = DEPARTMENT_BITFLAG_CARGO
department_name = "Cargo"
/datum/station_trait/deathrattle_department/engineering
name = "Deathrattled Engineering"
trait_flags = NONE
weight = 2
department_head = "Chief Engineer"
weight = 1
department_to_apply_to = DEPARTMENT_BITFLAG_ENGINEERING
department_name = "Engineering"
/datum/station_trait/deathrattle_department/command
name = "Deathrattled Command"
trait_flags = NONE
weight = 1
department_head = "Captain"
department_to_apply_to = DEPARTMENT_BITFLAG_COMMAND
department_name = "Command"
/datum/station_trait/deathrattle_department/science
name = "Deathrattled Science"
trait_flags = NONE
weight = 1
department_head = "Research Director"
department_to_apply_to = DEPARTMENT_BITFLAG_SCIENCE
department_name = "Science"
/datum/station_trait/deathrattle_department/security
name = "Deathrattled Security"
trait_flags = NONE
weight = 1
department_head = "Head of Security"
department_to_apply_to = DEPARTMENT_BITFLAG_SECURITY
department_name = "Security"
/datum/station_trait/deathrattle_department/medical
name = "Deathrattled Medical"
trait_flags = NONE
weight = 1
department_head = "Chief Medical Officer"
department_to_apply_to = DEPARTMENT_BITFLAG_MEDICAL
department_name = "Medical"
/datum/station_trait/deathrattle_all
name = "Deathrattled Station"
name = "deathrattled station"
trait_type = STATION_TRAIT_POSITIVE
show_in_report = TRUE
weight = 1
@@ -236,14 +229,12 @@
blacklist = subtypesof(/datum/station_trait/deathrattle_department)
RegisterSignal(SSdcs, COMSIG_GLOB_JOB_AFTER_SPAWN, PROC_REF(on_job_after_spawn))
/datum/station_trait/deathrattle_all/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned, client/player_client)
/datum/station_trait/deathrattle_all/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/living_mob, mob/M, joined_late)
SIGNAL_HANDLER
var/obj/item/implant/deathrattle/implant_to_give = new()
deathrattle_group.register(implant_to_give)
implant_to_give.implant(spawned, spawned, TRUE, TRUE)
implant_to_give.implant(living_mob, living_mob, TRUE, TRUE)
/datum/station_trait/wallets
name = "Wallets!"

View File

@@ -76,6 +76,9 @@
var/bounty_types = CIV_JOB_BASIC
///Bitfield of departments this job belongs wit
var/departments = NONE
/// Goodies that can be received via the mail system.
// this is a weighted list.
/// Keep the _job definition for this empty and use /obj/item/mail to define general gifts.

View File

@@ -15,6 +15,7 @@
exp_type_department = EXP_TYPE_SILICON
display_order = JOB_DISPLAY_ORDER_AI
allow_bureaucratic_error = FALSE
departments = DEPARTMENT_BITFLAG_SILICON
random_spawns_possible = FALSE
var/do_special_check = TRUE
threat = 5

View File

@@ -16,6 +16,7 @@ Assistant
antag_rep = 7
paycheck = PAYCHECK_ASSISTANT // Get a job. Job reassignment changes your paycheck now. Get over it.
paycheck_department = ACCOUNT_CIV
departments = DEPARTMENT_BITFLAG_SERVICE
display_order = JOB_DISPLAY_ORDER_ASSISTANT
dresscodecompliant = FALSE
always_can_respawn_as = TRUE

View File

@@ -21,12 +21,13 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_ENG
bounty_types = CIV_JOB_ENG
departments = DEPARTMENT_BITFLAG_ENGINEERING
starting_modifiers = list(/datum/skill_modifier/job/level/wiring, /datum/skill_modifier/job/affinity/wiring)
display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
threat = 0.5
family_heirlooms = list(
/obj/item/lighter,
/obj/item/lighter/greyscale,

View File

@@ -18,6 +18,7 @@
paycheck = PAYCHECK_EASY
paycheck_department = ACCOUNT_SRV
bounty_types = CIV_JOB_DRINK
departments = DEPARTMENT_BITFLAG_SERVICE
display_order = JOB_DISPLAY_ORDER_BARTENDER
threat = 0.5

View File

@@ -17,6 +17,7 @@
paycheck = PAYCHECK_EASY
paycheck_department = ACCOUNT_SRV
bounty_types = CIV_JOB_GROW
departments = DEPARTMENT_BITFLAG_SERVICE
display_order = JOB_DISPLAY_ORDER_BOTANIST
threat = 1.5 // lol powergame

View File

@@ -29,6 +29,7 @@
mind_traits = list(TRAIT_CAPTAIN_METABOLISM, TRAIT_DISK_VERIFIER)
display_order = JOB_DISPLAY_ORDER_CAPTAIN
departments = DEPARTMENT_BITFLAG_COMMAND
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
threat = 5

View File

@@ -20,6 +20,7 @@
display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
bounty_types = CIV_JOB_RANDOM
departments = DEPARTMENT_BITFLAG_CARGO
threat = 0.2
family_heirlooms = list(

View File

@@ -18,6 +18,7 @@
paycheck_department = ACCOUNT_CIV
display_order = JOB_DISPLAY_ORDER_CHAPLAIN
departments = DEPARTMENT_BITFLAG_SERVICE
threat = 0.5
family_heirlooms = list(

View File

@@ -19,6 +19,7 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_MED
bounty_types = CIV_JOB_CHEM
departments = DEPARTMENT_BITFLAG_MEDICAL
display_order = JOB_DISPLAY_ORDER_CHEMIST
threat = 1.5

View File

@@ -18,6 +18,7 @@
considered_combat_role = TRUE
outfit = /datum/outfit/job/ce
departments = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_COMMAND
plasma_outfit = /datum/outfit/plasmaman/ce
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,

View File

@@ -18,6 +18,7 @@
considered_combat_role = TRUE
outfit = /datum/outfit/job/cmo
departments = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_COMMAND
plasma_outfit = /datum/outfit/plasmaman/cmo
access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,

View File

@@ -10,6 +10,7 @@
selection_color = "#dddddd"
outfit = /datum/outfit/job/clown
departments = DEPARTMENT_BITFLAG_SERVICE
plasma_outfit = /datum/outfit/plasmaman/clown
access = list(ACCESS_THEATRE)

View File

@@ -18,6 +18,7 @@
paycheck = PAYCHECK_EASY
paycheck_department = ACCOUNT_SRV
bounty_types = CIV_JOB_CHEF
departments = DEPARTMENT_BITFLAG_SERVICE
display_order = JOB_DISPLAY_ORDER_COOK
threat = 0.2

View File

@@ -18,8 +18,9 @@
paycheck_department = ACCOUNT_CIV
display_order = JOB_DISPLAY_ORDER_CURATOR
departments = DEPARTMENT_BITFLAG_SERVICE
threat = 0.3
family_heirlooms = list(
/obj/item/pen/fountain,
/obj/item/storage/dice

View File

@@ -16,6 +16,7 @@
starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic)
display_order = JOB_DISPLAY_ORDER_CYBORG
departments = DEPARTMENT_BITFLAG_SILICON
/datum/job/cyborg/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null, client/preference_source = null)
if(visualsOnly)

View File

@@ -14,6 +14,7 @@
exp_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/detective
departments = DEPARTMENT_BITFLAG_SECURITY
plasma_outfit = /datum/outfit/plasmaman/detective
considered_combat_role = TRUE

View File

@@ -12,6 +12,7 @@
exp_requirements = 60
outfit = /datum/outfit/job/geneticist
departments = DEPARTMENT_BITFLAG_MEDICAL
plasma_outfit = /datum/outfit/plasmaman/genetics
access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_ROBOTICS, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE)

View File

@@ -17,6 +17,7 @@
exp_type_department = EXP_TYPE_SERVICE
considered_combat_role = TRUE
outfit = /datum/outfit/job/hop
departments = DEPARTMENT_BITFLAG_COMMAND | DEPARTMENT_BITFLAG_SERVICE
plasma_outfit = /datum/outfit/plasmaman/hop
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,

View File

@@ -18,6 +18,7 @@
exp_type_department = EXP_TYPE_SECURITY
outfit = /datum/outfit/job/hos
departments = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_COMMAND
plasma_outfit = /datum/outfit/plasmaman/hos
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)

View File

@@ -18,6 +18,7 @@
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_JANITOR
departments = DEPARTMENT_BITFLAG_SERVICE
threat = 0.2
family_heirlooms = list(

View File

@@ -21,8 +21,9 @@
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
display_order = JOB_DISPLAY_ORDER_LAWYER
departments = DEPARTMENT_BITFLAG_SERVICE
threat = 0.3
family_heirlooms = list(
/obj/item/gavelhammer,
/obj/item/book/manual/wiki/security_space_law

View File

@@ -10,6 +10,7 @@
selection_color = "#74b5e0"
outfit = /datum/outfit/job/doctor
departments = DEPARTMENT_BITFLAG_MEDICAL
plasma_outfit = /datum/outfit/plasmaman/medical
access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM)

View File

@@ -18,6 +18,7 @@
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_MIME
departments = DEPARTMENT_BITFLAG_SERVICE
threat = 0

View File

@@ -17,6 +17,7 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_MED
bounty_types = CIV_JOB_MED
departments = DEPARTMENT_BITFLAG_MEDICAL
display_order = JOB_DISPLAY_ORDER_PARAMEDIC

View File

@@ -13,6 +13,7 @@
plasma_outfit = /datum/outfit/plasmaman/prisoner
display_order = JOB_DISPLAY_ORDER_PRISONER
departments = DEPARTMENT_BITFLAG_SECURITY
family_heirlooms = list(
/obj/item/pen/blue

View File

@@ -28,6 +28,7 @@
paycheck = PAYCHECK_HARD //They can already buy stuff using cargo budget, don't give em a command-level paycheck. //alright i'll agree to that -qweq
paycheck_department = ACCOUNT_CAR
bounty_types = CIV_JOB_RANDOM
departments = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_COMMAND
display_order = JOB_DISPLAY_ORDER_QUARTERMASTER
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)

View File

@@ -18,6 +18,7 @@
considered_combat_role = TRUE
outfit = /datum/outfit/job/rd
departments = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_COMMAND
plasma_outfit = /datum/outfit/plasmaman/rd
access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE,

View File

@@ -12,6 +12,7 @@
exp_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/roboticist
departments = DEPARTMENT_BITFLAG_SCIENCE
plasma_outfit = /datum/outfit/plasmaman/robotics
access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM, ACCESS_XENOBIOLOGY, ACCESS_GENETICS)

View File

@@ -19,6 +19,7 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SCI
bounty_types = CIV_JOB_SCI
departments = DEPARTMENT_BITFLAG_SCIENCE
starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic)
display_order = JOB_DISPLAY_ORDER_SCIENTIST
threat = 1.2

View File

@@ -22,6 +22,7 @@
paycheck = PAYCHECK_HARD
paycheck_department = ACCOUNT_SEC
bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_BITFLAG_SECURITY
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)

View File

@@ -20,11 +20,12 @@
paycheck = PAYCHECK_EASY ///Not necessarily easy itself, but it can be trivial to make lot of cash on this job.
paycheck_department = ACCOUNT_CAR
bounty_types = CIV_JOB_MINE
departments = DEPARTMENT_BITFLAG_CARGO
display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
threat = 1.5
family_heirlooms = list(
/obj/item/pickaxe/mini,
/obj/item/shovel

View File

@@ -21,6 +21,7 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_ENG
bounty_types = CIV_JOB_ENG
departments = DEPARTMENT_BITFLAG_ENGINEERING
starting_modifiers = list(/datum/skill_modifier/job/level/wiring, /datum/skill_modifier/job/affinity/wiring)

View File

@@ -19,6 +19,7 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_MED
bounty_types = CIV_JOB_VIRO
departments = DEPARTMENT_BITFLAG_MEDICAL
display_order = JOB_DISPLAY_ORDER_VIROLOGIST

View File

@@ -23,6 +23,7 @@
paycheck = PAYCHECK_HARD
paycheck_department = ACCOUNT_SEC
bounty_types = CIV_JOB_SEC
departments = DEPARTMENT_BITFLAG_SECURITY
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)

View File

@@ -0,0 +1,52 @@
/datum/crew_manifest
/datum/crew_manifest/ui_state(mob/user)
return GLOB.always_state
/datum/crew_manifest/ui_status(mob/user, datum/ui_state/state)
return (isnewplayer(user) || isobserver(user) || isAI(user) || ispAI(user)) ? UI_INTERACTIVE : UI_CLOSE
/datum/crew_manifest/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if (!ui)
ui = new(user, src, "CrewManifest")
ui.open()
/datum/crew_manifest/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
if (..())
return
/datum/crew_manifest/ui_data(mob/user)
var/list/positions = list(
DEPARTMENT_COMMAND = 0,
DEPARTMENT_SECURITY = 0,
DEPARTMENT_ENGINEERING = 0,
DEPARTMENT_MEDICAL = 0,
DEPARTMENT_SCIENCE = 0,
DEPARTMENT_CARGO = 0,
DEPARTMENT_SERVICE = 0,
DEPARTMENT_SILICON = 0
)
var/list/departments = list(
list("flag" = DEPARTMENT_BITFLAG_COMMAND, "name" = DEPARTMENT_COMMAND),
list("flag" = DEPARTMENT_BITFLAG_SECURITY, "name" = DEPARTMENT_SECURITY),
list("flag" = DEPARTMENT_BITFLAG_ENGINEERING, "name" = DEPARTMENT_ENGINEERING),
list("flag" = DEPARTMENT_BITFLAG_MEDICAL, "name" = DEPARTMENT_MEDICAL),
list("flag" = DEPARTMENT_BITFLAG_SCIENCE, "name" = DEPARTMENT_SCIENCE),
list("flag" = DEPARTMENT_BITFLAG_CARGO, "name" = DEPARTMENT_CARGO),
list("flag" = DEPARTMENT_BITFLAG_SERVICE, "name" = DEPARTMENT_SERVICE),
list("flag" = DEPARTMENT_BITFLAG_SILICON, "name" = DEPARTMENT_SILICON)
)
for(var/datum/job/job in SSjob.occupations)
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"])
// Add open positions to current department
positions[department["name"]] += (job.total_positions - job.current_positions)
return list(
"manifest" = GLOB.data_core.get_manifest(),
"positions" = positions
)

View File

@@ -720,11 +720,10 @@
return
client.crew_manifest_delay = world.time + (1 SECONDS)
var/dat = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head><body>"
dat += "<h4>Crew Manifest</h4>"
dat += GLOB.data_core.get_manifest(OOC = 1)
if(!GLOB.crew_manifest_tgui)
GLOB.crew_manifest_tgui = new /datum/crew_manifest(src)
src << browse(dat, "window=manifest;size=387x420;can_close=1")
GLOB.crew_manifest_tgui.ui_interact(src)
/mob/dead/new_player/Move()
return FALSE

View File

@@ -730,11 +730,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
client.crew_manifest_delay = world.time + (1 SECONDS)
var/dat
dat += "<h4>Crew Manifest</h4>"
dat += GLOB.data_core.get_manifest()
if(!GLOB.crew_manifest_tgui)
GLOB.crew_manifest_tgui = new /datum/crew_manifest(src)
src << browse(dat, "window=manifest;size=387x420;can_close=1")
GLOB.crew_manifest_tgui.ui_interact(src)
//this is called when a ghost is drag clicked to something.
/mob/dead/observer/MouseDrop(atom/over)

View File

@@ -373,13 +373,10 @@
return
client.crew_manifest_delay = world.time + (1 SECONDS)
var/dat = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title>Crew Roster</title></head><body><b>Crew Roster:</b><br><br>"
if(!GLOB.crew_manifest_tgui)
GLOB.crew_manifest_tgui = new /datum/crew_manifest(src)
dat += GLOB.data_core.get_manifest()
dat += "</body></html>"
src << browse(dat, "window=airoster")
onclose(src, "airoster")
GLOB.crew_manifest_tgui.ui_interact(src)
/mob/living/silicon/update_transform(do_animate)
var/matrix/ntransform = matrix(transform) //aka transform.Copy()

View File

@@ -12,7 +12,7 @@
/datum/computer_file/program/crew_manifest/ui_static_data(mob/user)
var/list/data = list()
data["manifest"] = GLOB.data_core.get_manifest_tg()
data["manifest"] = GLOB.data_core.get_manifest()
return data
/datum/computer_file/program/crew_manifest/ui_data(mob/user)

View File

@@ -2640,6 +2640,7 @@
#include "code\modules\mob\transform_procs.dm"
#include "code\modules\mob\typing_indicator.dm"
#include "code\modules\mob\camera\camera.dm"
#include "code\modules\mob\dead\crew_manifest.dm"
#include "code\modules\mob\dead\dead.dm"
#include "code\modules\mob\dead\new_player\login.dm"
#include "code\modules\mob\dead\new_player\logout.dm"

View File

@@ -1,9 +1,9 @@
import { classes } from 'common/react';
import { useBackend } from "../backend";
import { Icon, Section, Table, Tooltip } from "../components";
import { Icon, Section, Table } from "../components";
import { Window } from "../layouts";
const commandJobs = [
"Captain",
"Head of Personnel",
"Head of Security",
"Chief Engineer",
@@ -17,13 +17,12 @@ export const CrewManifest = (props, context) => {
return (
<Window title="Crew Manifest" width={350} height={500}>
<Window.Content scrollable>
{Object.entries(manifest).map(([dept, crew]) => (
{Object.entries(manifest).map(([department, crew]) => (
<Section
className={"CrewManifest--" + dept}
key={dept}
className={"CrewManifest--" + department}
key={department}
title={
dept + (dept !== "Misc"
? ` (${positions[dept].open} positions open)` : "")
`${department} (${positions[department]} positions open)`
}
>
<Table>
@@ -33,57 +32,24 @@ export const CrewManifest = (props, context) => {
{crewMember.name}
</Table.Cell>
<Table.Cell
className={classes([
"CrewManifest__Cell",
"CrewManifest__Icons",
])}
className={
"CrewManifest__Cell CrewManifest__Cell--"
+ (crewMember.rank === "Captain" ? "Captain" : "Command")
}
collapsing
>
{positions[dept].exceptions.includes(crewMember.rank) && (
<Tooltip
content="No position limit"
position="bottom"
>
<Icon className="CrewManifest__Icon" name="infinity" />
</Tooltip>
)}
{crewMember.rank === "Captain" && (
<Tooltip
content="Captain"
position="bottom"
>
<Icon
className={classes([
"CrewManifest__Icon",
"CrewManifest__Icon--Command",
])}
name="star"
/>
</Tooltip>
)}
{commandJobs.includes(crewMember.rank) && (
<Tooltip
content="Member of command"
position="bottom"
>
<Icon
className={classes([
"CrewManifest__Icon",
"CrewManifest__Icon--Command",
"CrewManifest__Icon--Chevron",
])}
name="chevron-up"
/>
</Tooltip>
<Icon
name={
crewMember.rank === "Captain" ? "star" : "chevron-up"
}
/>
)}
</Table.Cell>
<Table.Cell
className={classes([
"CrewManifest__Cell",
"CrewManifest__Cell--Rank",
])}
className={"CrewManifest__Cell"}
collapsing
color="label"
>
{crewMember.rank}
</Table.Cell>

View File

@@ -5,7 +5,6 @@ $department_map: (
'Security': colors.$red,
'Engineering': colors.$orange,
'Medical': colors.$teal,
'Misc': colors.$white,
'Science': colors.$purple,
'Supply': colors.$brown,
'Service': colors.$green,
@@ -29,30 +28,14 @@ $department_map: (
&__Cell {
padding: 3px 0;
&--Rank {
color: colors.$label;
}
}
&__Icons {
padding: 3px 9px;
text-align: right;
}
&__Icon {
color: colors.$label;
position: relative;
&:not(:last-child) {
margin-right: 7px;
}
&--Chevron {
padding-right: 2px;
&--Captain {
color: colors.$yellow;
padding: 3px 8px;
}
&--Command {
color: colors.$yellow;
padding: 3px 9px;
}
}
}