From 9bcde45b10695bc5cdd0bf64a3ce7840a5ee41b2 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Fri, 26 Sep 2014 19:36:04 +0100 Subject: [PATCH 1/2] Fixes some bizarre job+antag interactions --- code/game/jobs/job_controller.dm | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 9146370d5b6..9dbfd022c6a 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -46,8 +46,9 @@ var/global/datum/controller/occupations/job_master if(!job) return 0 if(jobban_isbanned(player, rank)) return 0 if(!job.player_old_enough(player.client)) return 0 - if(player.mind.special_role && ticker && ticker.mode && (job.title in ticker.mode.restricted_jobs)) - return 0 + if(player.mind.special_role && ticker && ticker.mode) + if(job.title in ticker.mode.restricted_jobs || job.title in ticker.mode.protected_jobs) + return 0 var/position_limit = job.total_positions if(!latejoin) @@ -79,10 +80,11 @@ var/global/datum/controller/occupations/job_master if(config.enforce_human_authority && (job.title in command_positions) && player.client.prefs.pref_species.id != "human") Debug("FOC non-human failed, Player: [player]") continue - - if(player.mind.special_role && ticker && ticker.mode && (job.title in ticker.mode.restricted_jobs)) - Debug("FOC player has a special role and this job is blocked from this special role") - continue + + if(player.mind.special_role && ticker && ticker.mode) + if(job.title in ticker.mode.restricted_jobs || job.title in ticker.mode.protected_jobs) + Debug("FOC player has a special role and this job is blocked from this special role") + continue if(player.client.prefs.GetJobDepartment(job, level) & job.flag) Debug("FOC pass, Player: [player], Level:[level]") @@ -113,9 +115,10 @@ var/global/datum/controller/occupations/job_master Debug("GRJ non-human failed, Player: [player]") continue - if(player.mind.special_role && ticker && ticker.mode && (job.title in ticker.mode.restricted_jobs)) - Debug("GRJ player has a special role and this job is blocked from this special role") - continue + if(player.mind.special_role && ticker && ticker.mode) + if(job.title in ticker.mode.restricted_jobs || job.title in ticker.mode.protected_jobs) + Debug("GRJ player has a special role and this job is blocked from this special role") + continue if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) Debug("GRJ Random job given, Player: [player], Job: [job]") @@ -272,9 +275,10 @@ var/global/datum/controller/occupations/job_master Debug("DO non-human failed, Player: [player], Job:[job.title]") continue - if(player.mind.special_role && ticker && ticker.mode && (job.title in ticker.mode.restricted_jobs)) - Debug("DO player has a special role and this job is blocked from that special role") - continue + if(player.mind.special_role && ticker && ticker.mode) + if(job.title in ticker.mode.restricted_jobs || job.title in ticker.mode.protected_jobs) + Debug("DO player has a special role and this job is blocked from that special role") + continue // If the player wants that job on this level, then try give it to him. if(player.client.prefs.GetJobDepartment(job, level) & job.flag) From 7fa398836efe6dff28395365c7aa3f958b7f8a07 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Sun, 28 Sep 2014 23:34:10 +0100 Subject: [PATCH 2/2] Adds some missing checks for need_job_assign which caused Wizard and Nuke op AIs and HoS Cultists --- code/game/gamemodes/cult/cult.dm | 2 +- code/game/gamemodes/gang/gang.dm | 6 ++++++ code/game/jobs/job_controller.dm | 23 ++++++++++++++++++----- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 3c8b922bb94..0c7f68f88ee 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -74,6 +74,7 @@ var/datum/mind/cultist = pick(antag_candidates) antag_candidates -= cultist cult += cultist + cultist.special_role = "Cultist" log_game("[cultist.key] (ckey) has been selected as a cultist") return (cult.len>=required_enemies) @@ -104,7 +105,6 @@ update_cult_icons_added(cult_mind) cult_mind.current << "You are a member of the cult!" memorize_cult_objectives(cult_mind) - cult_mind.special_role = "Cultist" ..() diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index 11fa69970ec..061839062d1 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -46,6 +46,12 @@ if(!A_bosses.len || !B_bosses.len) return 0 +//Set a temporary special_role so the job controller doesn't hand out invalid jobs for these antags + for(var/datum/mind/boss_mind in A_bosses) + boss_mind.special_role = "Gang member" + for(var/datum/mind/boss_mind in B_bosses) + boss_mind.special_role = "Gang member" + return 1 diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 9dbfd022c6a..57365511158 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -47,9 +47,10 @@ var/global/datum/controller/occupations/job_master if(jobban_isbanned(player, rank)) return 0 if(!job.player_old_enough(player.client)) return 0 if(player.mind.special_role && ticker && ticker.mode) - if(job.title in ticker.mode.restricted_jobs || job.title in ticker.mode.protected_jobs) + if(job.title in ticker.mode.restricted_jobs) return 0 - + if(!player.mind.need_job_assign) + return 0 var/position_limit = job.total_positions if(!latejoin) position_limit = job.spawn_positions @@ -82,10 +83,13 @@ var/global/datum/controller/occupations/job_master continue if(player.mind.special_role && ticker && ticker.mode) - if(job.title in ticker.mode.restricted_jobs || job.title in ticker.mode.protected_jobs) + if(job.title in ticker.mode.restricted_jobs) Debug("FOC player has a special role and this job is blocked from this special role") continue + if(!player.mind.need_job_assign) + continue + if(player.client.prefs.GetJobDepartment(job, level) & job.flag) Debug("FOC pass, Player: [player], Level:[level]") candidates += player @@ -116,10 +120,13 @@ var/global/datum/controller/occupations/job_master continue if(player.mind.special_role && ticker && ticker.mode) - if(job.title in ticker.mode.restricted_jobs || job.title in ticker.mode.protected_jobs) + if(job.title in ticker.mode.restricted_jobs) Debug("GRJ player has a special role and this job is blocked from this special role") continue + if(!player.mind.need_job_assign) + continue + if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) Debug("GRJ Random job given, Player: [player], Job: [job]") AssignRole(player, job.title) @@ -276,10 +283,13 @@ var/global/datum/controller/occupations/job_master continue if(player.mind.special_role && ticker && ticker.mode) - if(job.title in ticker.mode.restricted_jobs || job.title in ticker.mode.protected_jobs) + if(job.title in ticker.mode.restricted_jobs) Debug("DO player has a special role and this job is blocked from that special role") continue + if(!player.mind.need_job_assign) + continue + // If the player wants that job on this level, then try give it to him. if(player.client.prefs.GetJobDepartment(job, level) & job.flag) @@ -308,6 +318,9 @@ var/global/datum/controller/occupations/job_master //Gives the player the stuff he should have with his rank /datum/controller/occupations/proc/EquipRank(var/mob/living/H, var/rank, var/joined_late = 0) + if(!H.mind.need_job_assign) + return 0 + var/datum/job/job = GetJob(rank) H.job = rank