From e9210b0701eed1e8bac89ad4715929457e5c6693 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 7 Jul 2013 02:28:34 -0700 Subject: [PATCH 1/2] Removed jobbanned and random pick drafting in understaffed modes, and implements voter-based forcedrafting. --- code/controllers/voting.dm | 7 ++++++ code/game/gamemodes/game_mode.dm | 40 +++++++++++++++++++++----------- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index db705ac53a1..d8bb478fb99 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -1,5 +1,7 @@ var/datum/controller/vote/vote = new() +var/global/list/round_voters = list() //Keeps track of the individuals voting for a given round, for use in forcedrafting. + datum/controller/vote var/initiator = null var/started_time = null @@ -119,6 +121,11 @@ datum/controller/vote for(var/option in winners) text += "\t[option]\n" . = pick(winners) + + for(var/key in current_votes) + if(choices[current_votes[key]] == .) + round_voters += key // Keep track of who voted for the winning round. + text += "Vote Result: [.]" else text += "Vote Result: Inconclusive - No Votes!" diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index c2d0126799e..708f710ab39 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -264,8 +264,8 @@ Implants; /datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=0) var/list/players = list() var/list/candidates = list() - var/list/drafted = list() - var/datum/mind/applicant = null + //var/list/drafted = list() + //var/datum/mind/applicant = null var/roletext switch(role) @@ -277,29 +277,40 @@ Implants; if(BE_CULTIST) roletext="cultist" if(BE_NINJA) roletext="ninja" - // Ultimate randomizing code right here + // Assemble a list of active players without jobbans. for(var/mob/new_player/player in player_list) - if(player.client && player.ready) - players += player + if( player.client && player.ready ) + if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, roletext)) + players += player - // Shuffling, the players list is now ping-independent!!! - // Goodbye antag dante + // Shuffle the players list so that it becomes ping-independent. players = shuffle(players) + // Get a list of all the people who want to be the antagonist for this round for(var/mob/new_player/player in players) - if(player.client && player.ready) - if(player.client.prefs.be_special & role) - if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, roletext)) //Nodrak/Carn: Antag Job-bans - candidates += player.mind // Get a list of all the people who want to be the antagonist for this round - log_debug("[player.key] had [roletext] enabled, so drafting them.") + if(player.client.prefs.be_special & role) + log_debug("[player.key] had [roletext] enabled, so we are drafting them.") + candidates += player.mind + players -= player + // If we don't have enough antags, draft people who voted for the round. + if(candidates.len < recommended_enemies) + for(var/key in round_voters) + for(var/mob/new_player/player in players) + if(player.ckey == key) + log_debug("[player.key] voted for this round, so we are drafting them.") + candidates += player.mind + players -= player + break + + // Remove candidates who want to be antagonist but have a job that precludes it if(restricted_jobs) for(var/datum/mind/player in candidates) - for(var/job in restricted_jobs) // Remove people who want to be antagonist but have a job already that precludes it + for(var/job in restricted_jobs) if(player.assigned_role == job) candidates -= player - if(candidates.len < recommended_enemies) + /*if(candidates.len < recommended_enemies) for(var/mob/new_player/player in players) if(player.client && player.ready) if(!(player.client.prefs.be_special & role)) // We don't have enough people who want to be antagonist, make a seperate list of people who don't want to be one @@ -349,6 +360,7 @@ Implants; else // Not enough scrubs, ABORT ABORT ABORT break + */ return candidates // Returns: The number of people who had the antagonist role set to yes, regardless of recomended_enemies, if that number is greater than recommended_enemies // recommended_enemies if the number of people with that role set to yes is less than recomended_enemies, From 78653b31756c4cafca881d9c3720f43bdc166cb7 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 7 Jul 2013 02:42:28 -0700 Subject: [PATCH 2/2] Removes visible tallies from votes. --- code/controllers/voting.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index d8bb478fb99..8c31d17f6c1 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -277,9 +277,9 @@ datum/controller/vote var/votes = choices[choices[i]] if(!votes) votes = 0 if(current_votes[C.ckey] == i) - . += "
  • [choices[i]] ([votes] votes)
  • " + . += "
  • [choices[i]]
  • " else - . += "
  • [choices[i]] ([votes] votes)
  • " + . += "
  • [choices[i]]
  • " . += "
    " if(admin)