From ce0cf2b86f1d91c32c0b5542cbd906fffb4489d3 Mon Sep 17 00:00:00 2001 From: skull132 Date: Thu, 26 Jan 2017 01:33:44 +0200 Subject: [PATCH] Fix general antagonist bans (#1643) All full blanket antagonist bans are now classes as Antagonist, instead of Syndicate bans, as Syndicate refers to a specific subset of antags. This made global banning someone from all roles impossible. --- code/game/gamemodes/antagspawner.dm | 4 ++-- code/game/machinery/syndicatebeacon.dm | 2 +- code/game/response_team.dm | 2 +- code/modules/admin/banjob.dm | 18 +++++++++++++++++- code/modules/admin/topic.dm | 4 ++-- code/modules/ghosttrap/trap.dm | 2 +- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/antagspawner.dm b/code/game/gamemodes/antagspawner.dm index 1dc299d712b..c1c3f187fbe 100644 --- a/code/game/gamemodes/antagspawner.dm +++ b/code/game/gamemodes/antagspawner.dm @@ -32,11 +32,11 @@ for(var/mob/dead/observer/O in player_list) if(!O.MayRespawn()) continue - if(jobban_isbanned(O, "Syndicate") && jobban_isbanned(O, "Mercenary") && jobban_isbanned(O, "Cyborg")) + if(jobban_isbanned(O, "Antagonist") && jobban_isbanned(O, "Mercenary") && jobban_isbanned(O, "Cyborg")) continue if(O.client && O.client.prefs && (MODE_MERCENARY in O.client.prefs.be_special_role)) question(O.client) - + spawn(600) searching = 0 if(!used) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 99d713cccba..be5b402ee1d 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -46,7 +46,7 @@ src.updateUsrDialog() return var/mob/M = locate(href_list["traitormob"]) - if(M.mind.special_role || jobban_isbanned(M, "Syndicate")) + if(M.mind.special_role || jobban_isbanned(M, "Antagonist")) temptext = "We have no need for you at this time. Have a pleasant day.
" src.updateUsrDialog() return diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 7a536cd6cac..0cd466d75a3 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -50,7 +50,7 @@ client/verb/JoinResponseTeam() if(!send_emergency_team) usr << "No emergency response team is currently being sent." return - if(jobban_isbanned(usr, "Syndicate") || jobban_isbanned(usr, "Emergency Response Team") || jobban_isbanned(usr, "Security Officer")) + if(jobban_isbanned(usr, "Antagonist") || jobban_isbanned(usr, "Emergency Response Team") || jobban_isbanned(usr, "Security Officer")) usr << "You are jobbanned from the emergency reponse team!" return if(ert.current_antagonists.len >= ert.hard_cap) diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 96899fc6d9c..45435caf4fa 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -26,8 +26,24 @@ var/jobban_keylist[0] //to store the keys & ranks if(config.usewhitelist && !check_whitelist(M)) return "Whitelisted Job" + var/static/list/antag_bantypes + + if (isnull(antag_bantypes)) + antag_bantypes = list() + for (var/antag_type in all_antag_types) + var/datum/antagonist/antag = all_antag_types[antag_type] + if (antag && antag.bantype) + antag_bantypes |= "[antag.bantype]" + + // We manage antagonist bans at this end point. + // Alternative is to manage it at each call to jobban_isbanned, however, + // there is no actual reason why you should be able to play an antag if you're banned from all of them. + var/antag_ban = FALSE + if (rank in antag_bantypes) + antag_ban = TRUE + for (var/s in jobban_keylist) - if( findtext(s,"[M.ckey] - [rank]") == 1 ) + if(findtext(s,"[M.ckey] - [rank]") == 1 || (antag_ban && findtext(s, "[M.ckey] - Antagonist") == 1)) var/startpos = findtext(s, "## ")+3 if(startpos && startpos