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:
Erki
2019-07-16 00:21:34 +03:00
committed by GitHub
parent e1df17b677
commit bd2d9a184d
35 changed files with 529 additions and 105 deletions

View File

@@ -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

View File

@@ -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