diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 43c74b8b08..19ccf5fdc1 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -45,6 +45,8 @@ #define ROLE_RESPAWN "respawnsystem" /// Not an actual antag. Lets players force all antags off. #define ROLE_NO_ANTAGONISM "NO_ANTAGS" +//Define for disabling individual antagonists for dynamic +#define HAS_ANTAG_PREF(C,ROLE) (!(ROLE_NO_ANTAGONISM in C.prefs.be_special) && (ROLE in C.prefs.be_special)) //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough //(in game days played) to play that role diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm index c510620334..30004a3b69 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm @@ -210,12 +210,16 @@ candidates.Remove(candidate_player) continue + if(ROLE_NO_ANTAGONISM in candidate_player.client.prefs.be_special) + candidates.Remove(candidate_player) + continue + if(antag_flag_override) - if(!(antag_flag_override in candidate_client.prefs.be_special) || jobban_isbanned(candidate_player.ckey, list(antag_flag_override, ROLE_SYNDICATE))) + if(!(HAS_ANTAG_PREF(candidate_player.client, antag_flag_override))) candidates.Remove(candidate_player) continue else - if(!(antag_flag in candidate_client.prefs.be_special) || jobban_isbanned(candidate_player.ckey, list(antag_flag, ROLE_SYNDICATE))) + if(!(HAS_ANTAG_PREF(candidate_player.client, antag_flag))) candidates.Remove(candidate_player) continue diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index 557abc29cc..76f09793fb 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -14,11 +14,13 @@ candidates.Remove(P) else if((exclusive_roles.len > 0) && !(P.mind.assigned_role in exclusive_roles)) // Is the rule exclusive to their job? candidates.Remove(P) + else if(ROLE_NO_ANTAGONISM in P.client.prefs.be_special) + candidates.Remove(P) else if(antag_flag_override) - if(!(antag_flag_override in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag_override, ROLE_SYNDICATE))) + if(!(HAS_ANTAG_PREF(P.client, antag_flag_override))) candidates.Remove(P) else - if(!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag, ROLE_SYNDICATE))) + if(!(HAS_ANTAG_PREF(P.client, antag_flag))) candidates.Remove(P) /datum/dynamic_ruleset/latejoin/ready(forced = 0) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index f1d42ee122..619c2de303 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -46,12 +46,15 @@ if(!mode.check_age(M.client, minimum_required_age)) trimmed_list.Remove(M) continue + if(ROLE_NO_ANTAGONISM in M.client.prefs.be_special) + trimmed_list.Remove(M) + continue if(antag_flag_override) - if(!(antag_flag_override in M.client.prefs.be_special) || jobban_isbanned(M.ckey, list(antag_flag_override, ROLE_SYNDICATE))) + if(!(HAS_ANTAG_PREF(M.client, antag_flag_override))) trimmed_list.Remove(M) continue else - if(!(antag_flag in M.client.prefs.be_special) || jobban_isbanned(M.ckey, list(antag_flag, ROLE_SYNDICATE))) + if(!(HAS_ANTAG_PREF(M.client, antag_flag))) trimmed_list.Remove(M) continue if (M.mind)