From 13138756b55a42e1ec7f4b40d29bb96a76837d2a Mon Sep 17 00:00:00 2001 From: Alberyk Date: Wed, 18 Dec 2019 19:13:41 -0300 Subject: [PATCH] Enforces species jobs restrictions through mechanics (#7691) --- code/game/jobs/job/captain.dm | 4 ++++ code/game/jobs/job/engineering.dm | 2 ++ code/game/jobs/job/job.dm | 1 + code/game/jobs/job/medical.dm | 4 ++++ code/game/jobs/job/outsider/representative.dm | 2 ++ code/game/jobs/job/science.dm | 2 ++ code/game/jobs/job/security.dm | 2 ++ .../client/preference_setup/occupation/occupation.dm | 5 +++++ code/modules/mob/abstract/new_player/new_player.dm | 5 +++++ html/changelogs/alberyk-speciesstuff.yml | 6 ++++++ 10 files changed, 33 insertions(+) create mode 100644 html/changelogs/alberyk-speciesstuff.yml diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index 706ae935cb8..c5cb2b21ac2 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -22,6 +22,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) outfit = /datum/outfit/job/captain + blacklisted_species = list("Off-Worlder Human", "Tajara", "M'sai Tajara", "Zhan-Khazan Tajara", "Unathi", "Aut'akh Unathi", "Diona", "Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame", "Vaurca Worker", "Vaurca Warrior") + /datum/outfit/job/captain name = "Captain" jobtype = /datum/job/captain @@ -93,6 +95,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) access_chapel_office, access_library, access_research, access_mining, access_mining_station, access_janitor, access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_weapons, access_journalist) + blacklisted_species = list("M'sai Tajara", "Zhan-Khazan Tajara", "Aut'akh Unathi", "Diona", "Vaurca Worker", "Vaurca Warrior") + /datum/outfit/job/hop name = "Head of Personnel" jobtype = /datum/job/hop diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 18bff355094..b4e4b863224 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -27,6 +27,8 @@ minimal_player_age = 7 outfit = /datum/outfit/job/chief_engineer + blacklisted_species = list("Off-Worlder Human", "M'sai Tajara", "Zhan-Khazan Tajara", "Aut'akh Unathi", "Vaurca Worker", "Vaurca Warrior") + /datum/outfit/job/chief_engineer name = "Chief Engineer" jobtype = /datum/job/chief_engineer diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index d92fe8cb154..95b3ff9e387 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -30,6 +30,7 @@ var/datum/outfit/outfit = null var/list/alt_outfits = null // A list of special outfits for the alt titles list("alttitle" = /datum/outfit) + var/list/blacklisted_species = null // A blacklist of species that can't be this job //Only override this proc /datum/job/proc/after_spawn(mob/living/carbon/human/H) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index af25750f381..df162cfa278 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -26,6 +26,8 @@ ideal_character_age = 50 outfit = /datum/outfit/job/cmo + blacklisted_species = list("M'sai Tajara", "Zhan-Khazan Tajara", "Aut'akh Unathi", "Vaurca Worker", "Vaurca Warrior") + /datum/outfit/job/cmo name = "Chief Medical Officer" jobtype = /datum/job/cmo @@ -224,6 +226,8 @@ outfit = /datum/outfit/job/paramedic alt_outfits = list("Emergency Medical Technician"=/datum/outfit/job/paramedic/emt) + blacklisted_species = list("Diona") + /datum/outfit/job/paramedic name = "Paramedic" base_name = "Paramedic" diff --git a/code/game/jobs/job/outsider/representative.dm b/code/game/jobs/job/outsider/representative.dm index 45032ec4f7e..412d406d508 100644 --- a/code/game/jobs/job/outsider/representative.dm +++ b/code/game/jobs/job/outsider/representative.dm @@ -18,6 +18,8 @@ outfit = /datum/outfit/job/representative alt_titles = list("Consular Officer") + blacklisted_species = list("M'sai Tajara", "Zhan-Khazan Tajara", "Aut'akh Unathi") + /datum/job/representative/get_outfit(mob/living/carbon/human/H, alt_title = null) if(H.mind?.role_alt_title == "Consular Officer" || alt_title == "Consular Officer") var/datum/citizenship/citizenship = SSrecords.citizenships[H.citizenship] diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index cf2f2ff3f70..6e3076122f5 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -25,6 +25,8 @@ ideal_character_age = 50 outfit = /datum/outfit/job/rd + blacklisted_species = list("M'sai Tajara", "Zhan-Khazan Tajara", "Aut'akh Unathi", "Vaurca Worker", "Vaurca Warrior") + /datum/outfit/job/rd name = "Research Director" jobtype = /datum/job/rd diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 26539fd5e7c..2f5a5b4e2d2 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -26,6 +26,8 @@ minimal_player_age = 14 outfit = /datum/outfit/job/hos + blacklisted_species = list("Off-Worlder Human", "Zhan-Khazan Tajara", "Aut'akh Unathi", "Diona", "Hephaestus G2 Industrial Frame", "Vaurca Worker", "Vaurca Warrior") + /datum/outfit/job/hos name = "Head of Security" jobtype = /datum/job/hos diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index e1b95d92625..3a79ccb38dd 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -179,6 +179,11 @@ if(ban_reason == "WHITELISTED") dat += "[dispRank] \[WHITELISTED]" continue + else if(job.blacklisted_species) // check for restricted species + var/datum/species/S = all_species[pref.species] + if(S.name in job.blacklisted_species) + dat += "[dispRank] \[SPECIES RESTRICTED]" + continue else if (ban_reason == "AGE WHITELISTED") var/available_in_days = player_old_enough_for_role(user.client, rank) dat += "[dispRank] \[IN [(available_in_days)] DAYS]" diff --git a/code/modules/mob/abstract/new_player/new_player.dm b/code/modules/mob/abstract/new_player/new_player.dm index f7e3652931a..a0323d560db 100644 --- a/code/modules/mob/abstract/new_player/new_player.dm +++ b/code/modules/mob/abstract/new_player/new_player.dm @@ -286,6 +286,11 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player) if (jobban_isbanned(src,rank)) return FALSE + if(job.blacklisted_species) // check for restricted species + var/datum/species/S = all_species[client.prefs.species] + if(S.name in job.blacklisted_species) + return FALSE + var/datum/faction/faction = SSjobs.name_factions[client.prefs.faction] || SSjobs.default_faction if (!(job.type in faction.allowed_role_types)) return FALSE diff --git a/html/changelogs/alberyk-speciesstuff.yml b/html/changelogs/alberyk-speciesstuff.yml new file mode 100644 index 00000000000..6f5ebdb5876 --- /dev/null +++ b/html/changelogs/alberyk-speciesstuff.yml @@ -0,0 +1,6 @@ +author: Alberyk + +delete-after: True + +changes: + - rscadd: "Species job restrictions are now enforced in the occupation panel."