From 90c883f3d2eb84d4cf7385105cc5aa3bd92f10c2 Mon Sep 17 00:00:00 2001
From: RustingWithYou <63625389+RustingWithYou@users.noreply.github.com>
Date: Wed, 6 Dec 2023 00:37:01 +1300
Subject: [PATCH] Multiple Consular/Representative Framework (#17853)
* auto-blacklisting for consulars
* proper blacklist list
* changelog
* oops
* corprep
* Update code/game/jobs/job/job.dm
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
* roundstart spawn checks
* Update code/game/jobs/job/job.dm
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
* Update code/game/jobs/job/job.dm
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
---------
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
---
code/controllers/subsystems/job.dm | 14 ++++---
code/game/jobs/job/job.dm | 7 ++++
code/game/jobs/job/outsider/representative.dm | 25 +++++++++++
.../preference_setup/occupation/occupation.dm | 4 ++
.../mob/abstract/new_player/new_player.dm | 5 +++
.../changelogs/RustingWithYou - diplomacy.yml | 41 +++++++++++++++++++
6 files changed, 90 insertions(+), 6 deletions(-)
create mode 100644 html/changelogs/RustingWithYou - diplomacy.yml
diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm
index 3bdfef5464a..92e4c6adcb6 100644
--- a/code/controllers/subsystems/job.dm
+++ b/code/controllers/subsystems/job.dm
@@ -97,6 +97,8 @@ SUBSYSTEM_DEF(jobs)
return FALSE
if(jobban_isbanned(player, rank))
return FALSE
+ if(!player.IsJobAvailable(rank))
+ return FALSE
if(!(player.client.prefs.GetPlayerAltTitle(job) in player.client.prefs.GetValidTitles(job)))
to_chat(player, "Your character is too young!")
@@ -111,6 +113,7 @@ SUBSYSTEM_DEF(jobs)
player.mind.role_alt_title = GetPlayerAltTitle(player, rank)
unassigned -= player
job.current_positions++
+ job.pre_spawn(player)
return TRUE
Debug("AR has failed, Player: [player], Rank: [rank]")
return FALSE
@@ -119,7 +122,6 @@ SUBSYSTEM_DEF(jobs)
var/datum/job/job = GetJob(rank)
if(!istype(job))
return
-
job.current_positions--
/datum/controller/subsystem/jobs/proc/FindOccupationCandidates(datum/job/job, level, flag)
@@ -327,7 +329,7 @@ SUBSYSTEM_DEF(jobs)
Debug("ER/([H]): Equipping custom loadout.")
job.pre_equip(H)
job.setup_account(H)
-
+ job.after_spawn(H)
EquipCustom(H, job, H.client.prefs, custom_equip_leftovers, spawn_in_storage, custom_equip_slots)
job.equip(H)
@@ -635,10 +637,10 @@ SUBSYSTEM_DEF(jobs)
//Handle job slot/tater cleanup.
if (H.mind)
- var/job = H.mind.assigned_role
-
- FreeRole(job)
-
+ var/role = H.mind.assigned_role
+ var/datum/job/job = GetJob(H.mind.assigned_role)
+ job.on_despawn(H)
+ FreeRole(role)
if(H.mind.objectives.len)
qdel(H.mind.objectives)
H.mind.special_role = null
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index b114fbb5393..c80d71b54dd 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -42,10 +42,17 @@
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
+ var/list/blacklisted_citizenship = list() //A blacklist of citizenships that can't be this job
//Only override this proc
+/datum/job/proc/pre_spawn(mob/abstract/new_player/player)
+ return
+
/datum/job/proc/after_spawn(mob/living/carbon/human/H)
+/datum/job/proc/on_despawn(mob/living/carbon/human/H)
+ return
+
/datum/job/proc/announce(mob/living/carbon/human/H)
/datum/job/proc/get_outfit(mob/living/carbon/human/H, alt_title=null)
diff --git a/code/game/jobs/job/outsider/representative.dm b/code/game/jobs/job/outsider/representative.dm
index 7d491554025..0b01d9ada0c 100644
--- a/code/game/jobs/job/outsider/representative.dm
+++ b/code/game/jobs/job/outsider/representative.dm
@@ -26,6 +26,18 @@
outfit = /datum/outfit/job/representative
blacklisted_species = list(SPECIES_VAURCA_BULWARK, SPECIES_VAURCA_BREEDER)
+/datum/job/consular/pre_spawn(mob/abstract/new_player/player)
+ var/datum/faction/faction = SSjobs.name_factions[player.client.prefs.faction]
+ LAZYREMOVE(faction.allowed_role_types, REPRESENTATIVE_ROLE)
+
+/datum/job/representative/after_spawn(mob/living/carbon/human/H)
+ var/datum/faction/faction = SSjobs.GetFaction(H)
+ LAZYREMOVE(faction.allowed_role_types, REPRESENTATIVE_ROLE)
+
+/datum/job/representative/on_despawn(mob/living/carbon/human/H)
+ var/datum/faction/faction = SSjobs.GetFaction(H)
+ LAZYADD(faction.allowed_role_types, REPRESENTATIVE_ROLE)
+
/datum/outfit/job/representative
name = "NanoTrasen Corporate Liaison"
var/fax_department = "Representative's Office"
@@ -116,6 +128,7 @@
minimal_access = list(access_consular)
outfit = /datum/outfit/job/representative/consular
blacklisted_species = list(SPECIES_VAURCA_BULWARK)
+ blacklisted_citizenship = list(CITIZENSHIP_SOL, CITIZENSHIP_ERIDANI, CITIZENSHIP_ELYRA_NCP, CITIZENSHIP_NONE, CITIZENSHIP_FREE_COUNCIL)
/datum/job/consular/get_outfit(mob/living/carbon/human/H, alt_title = null)
var/datum/citizenship/citizenship = SSrecords.citizenships[H.citizenship]
@@ -142,3 +155,15 @@
if(citizenship)
rep_objectives = citizenship.get_objectives(mission_level, H)
return rep_objectives
+
+/datum/job/consular/pre_spawn(mob/abstract/new_player/player)
+ var/datum/citizenship/citizenship = SSrecords.citizenships[player.client.prefs.citizenship]
+ LAZYADD(blacklisted_citizenship, citizenship.name)
+
+/datum/job/consular/after_spawn(mob/living/carbon/human/H)
+ var/datum/citizenship/citizenship = SSrecords.citizenships[H.citizenship]
+ LAZYADD(blacklisted_citizenship, citizenship.name)
+
+/datum/job/consular/on_despawn(mob/living/carbon/human/H)
+ var/datum/citizenship/citizenship = SSrecords.citizenships[H.citizenship]
+ LAZYREMOVE(blacklisted_citizenship, citizenship.name)
diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm
index 29ec01b41cc..8d48b4a6495 100644
--- a/code/modules/client/preference_setup/occupation/occupation.dm
+++ b/code/modules/client/preference_setup/occupation/occupation.dm
@@ -196,6 +196,10 @@
if(C.job_species_blacklist[job.title] && (pref.species in C.job_species_blacklist[job.title]))
dat += "[dispRank]