diff --git a/modules/wolfgame.py b/modules/wolfgame.py index e322259..5e93a35 100644 --- a/modules/wolfgame.py +++ b/modules/wolfgame.py @@ -736,8 +736,23 @@ def hurry_up(cli, gameid, change): found_dup = False maxfound = (0, "") - for votee, voters in iter(var.VOTES.items()): - numvotes = sum([var.BUREAUCRAT_VOTES if p in var.ROLES["bureaucrat"] else 1 for p in voters]) + votelist = copy.deepcopy(var.VOTES) + for votee, voters in votelist.items(): + numvotes = 0 + for v in var.IMPATIENT: + if v in pl and v not in voters and v != votee: + voters.append(v) + for v in voters: + weight = 1 + imp_count = sum([1 if p == v else 0 for p in var.IMPATIENT]) + pac_count = sum([1 if p == v else 0 for p in var.PACIFISTS]) + if pac_count > imp_count: + weight = 0 # more pacifists than impatience totems + elif imp_count == pac_count and v not in var.VOTES[votee]: + weight = 0 # impatience and pacifist cancel each other out, so don't count impatience + if v in var.ROLES["bureaucrat"] or v in var.INFLUENTIAL: # the two do not stack + weight *= 2 + numvotes += weight if numvotes > maxfound[0]: maxfound = (numvotes, votee) found_dup = False diff --git a/settings/wolfgame.py b/settings/wolfgame.py index a290cf5..f70d017 100644 --- a/settings/wolfgame.py +++ b/settings/wolfgame.py @@ -98,49 +98,49 @@ SIMPLE_NOTIFY = [] # cloaks of people who !simple, who want everything /notice' # TODO: move this to a game mode called "fixed" once we implement a way to randomize roles (and have that game mode be called "random") DEFAULT_ROLE = "villager" -ROLE_INDEX = ( 4 , 6 , 8 , 10 , 12 , 15 , 17 , 18 , 21 ) +ROLE_INDEX = ( 4 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 15 , 16 , 18 , 20 , 21 , 23 , 24 ) ROLE_GUIDE = {# village roles - "villager" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "seer" : ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), - "oracle" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "augur" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "village drunk" : ( 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 ), - "harlot" : ( 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 ), - "guardian angel" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "bodyguard" : ( 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 ), - "detective" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ), - "village elder" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "time lord" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "matchmaker" : ( 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 ), - "mad scientist" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "hunter" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ), - "shaman" : ( 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "villager" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "seer" : ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "oracle" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "augur" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 ), + "village drunk" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "harlot" : ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "guardian angel" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "bodyguard" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ), + "detective" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "village elder" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "time lord" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "matchmaker" : ( 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "mad scientist" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "hunter" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "shaman" : ( 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), # wolf roles - "wolf" : ( 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 3 ), - "traitor" : ( 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), - "werecrow" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ), - "cultist" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ), - "minion" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "hag" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "wolf cub" : ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 ), - "sorcerer" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "wolf" : ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 ), + "traitor" : ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "werecrow" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "cultist" : ( 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "minion" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "hag" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ), + "wolf cub" : ( 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "sorcerer" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 ), # neutral roles - "lycan" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ), - "vengeful ghost" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "clone" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "crazed shaman" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "fool" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ), - "jester" : ( 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 ), - "monster" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ), - "amnesiac" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "lycan" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "vengeful ghost" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "clone" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "crazed shaman" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "fool" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), + "jester" : ( 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "monster" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 ), + "amnesiac" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 ), # templates - "cursed villager" : ( 0 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 ), - "gunner" : ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 ), + "cursed villager" : ( 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 ), + "gunner" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 ), # NB: for sharpshooter, numbers can't be higher than gunner, since gunners get converted to sharpshooters. This is the MAX number of gunners that can be converted. - "sharpshooter" : ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 ), - "mayor" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), - "assassin" : ( 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 ), - "bureaucrat" : ( 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "sharpshooter" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "mayor" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 ), + "assassin" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), + "bureaucrat" : ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), } # Harlot dies when visiting, gunner kills when shooting, GA and bodyguard have a chance at dying when guarding