mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-04 14:33:10 +00:00
Better factions and contractors (#6493)
Intent of this PR: make factions actually matter. How we're going to do this: Make factions limit job choices. Make factions have alternative loadouts that override job uniforms Make factions be visible in the employment records. Revert existing faction loadout options or put them behind a preference, in favour of new shit.
This commit is contained in:
@@ -15,22 +15,34 @@
|
||||
// Vars.
|
||||
var/list/occupations = list()
|
||||
var/list/name_occupations = list() //Dict of all jobs, keys are titles
|
||||
var/list/type_occupations = list() //Dict of all jobs, keys are titles
|
||||
var/list/type_occupations = list() //Dict of all jobs, keys are types
|
||||
var/list/unassigned = list()
|
||||
var/list/job_debug = list()
|
||||
|
||||
var/list/factions = list()
|
||||
var/list/name_factions = list()
|
||||
var/datum/faction/default_faction = null
|
||||
|
||||
var/safe_to_sanitize = FALSE
|
||||
var/list/deferred_preference_sanitizations = list()
|
||||
|
||||
/datum/controller/subsystem/jobs/New()
|
||||
NEW_SS_GLOBAL(SSjobs)
|
||||
|
||||
/datum/controller/subsystem/jobs/Initialize()
|
||||
..()
|
||||
|
||||
SetupOccupations()
|
||||
LoadJobs("config/jobs.txt")
|
||||
..()
|
||||
InitializeFactions()
|
||||
|
||||
ProcessSanitizationQueue()
|
||||
|
||||
/datum/controller/subsystem/jobs/Recover()
|
||||
occupations = SSjobs.occupations
|
||||
unassigned = SSjobs.unassigned
|
||||
job_debug = SSjobs.job_debug
|
||||
factions = SSjobs.factions
|
||||
if (islist(job_debug))
|
||||
job_debug += "NOTICE: Job system Recover() triggered."
|
||||
|
||||
@@ -324,6 +336,9 @@
|
||||
var/datum/job/job = GetJob(rank)
|
||||
var/list/spawn_in_storage = list()
|
||||
|
||||
if (H.mind)
|
||||
H.mind.selected_faction = GetFaction(H)
|
||||
|
||||
H.job = rank
|
||||
|
||||
if(job)
|
||||
@@ -607,6 +622,25 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/InitializeFactions()
|
||||
for (var/type in subtypesof(/datum/faction))
|
||||
var/datum/faction/faction = new type()
|
||||
|
||||
factions += faction
|
||||
name_factions[faction.name] = faction
|
||||
|
||||
if (faction.is_default)
|
||||
if (default_faction)
|
||||
crash_with("Two default factions detected in SSjobs.")
|
||||
else
|
||||
default_faction = faction
|
||||
|
||||
if (!default_faction)
|
||||
crash_with("No default faction assigned to SSjobs.")
|
||||
|
||||
if (!factions.len)
|
||||
crash_with("No factions located in SSjobs.")
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/HandleFeedbackGathering()
|
||||
for(var/thing in occupations)
|
||||
var/datum/job/job = thing
|
||||
@@ -829,4 +863,20 @@
|
||||
else
|
||||
return locate("start*[rank]") // use old stype
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/GetFaction(mob/living/carbon/human/H)
|
||||
var/faction_name = H?.client?.prefs?.faction
|
||||
if (faction_name)
|
||||
return name_factions[faction_name]
|
||||
else
|
||||
return null
|
||||
|
||||
/datum/controller/subsystem/jobs/proc/ProcessSanitizationQueue()
|
||||
safe_to_sanitize = TRUE
|
||||
|
||||
for (var/p in deferred_preference_sanitizations)
|
||||
var/datum/callback/CB = deferred_preference_sanitizations[p]
|
||||
CB.Invoke()
|
||||
|
||||
deferred_preference_sanitizations.Cut()
|
||||
|
||||
#undef Debug
|
||||
|
||||
@@ -620,7 +620,6 @@ var/datum/controller/subsystem/ticker/SSticker
|
||||
captainless = FALSE
|
||||
if(!player_is_antag(player.mind, only_offstation_roles = 1))
|
||||
SSjobs.EquipRank(player, player.mind.assigned_role, 0)
|
||||
UpdateFactionList(player)
|
||||
equip_custom_items(player)
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
Reference in New Issue
Block a user