From 48b5db2d9c30e74c551ac1b5ca21950fe470217b Mon Sep 17 00:00:00 2001 From: skizzerz Date: Wed, 3 Feb 2016 23:11:58 -0600 Subject: [PATCH] Maelstrom fixes - Don't allow dead players to re-join - Don't end game via a midgame join (e.g. ensure that numbers are good after the join) --- messages/en.json | 3 ++- src/gamemodes.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/messages/en.json b/messages/en.json index d1ed00d..d69c8ef 100644 --- a/messages/en.json +++ b/messages/en.json @@ -774,5 +774,6 @@ "fspectate_deadchat_disabled": "Deadchat is disabled and may not be spectated.", "fspectate_in_deadchat": "You are currently in deadchat.", "fspectate_on": "You are now spectating {0}.", - "fspectate_off": "You are no longer spectating {0}." + "fspectate_off": "You are no longer spectating {0}.", + "maelstrom_dead": "You are dead and cannot join again." } diff --git a/src/gamemodes.py b/src/gamemodes.py index a0a048a..f0d3c29 100644 --- a/src/gamemodes.py +++ b/src/gamemodes.py @@ -1074,6 +1074,9 @@ class MaelstromMode(GameMode): def on_join(self, evt, cli, var, nick, chan, rest, forced=False): if var.PHASE != "day" or (nick != chan and chan != botconfig.CHANNEL): return + if nick in var.ALL_PLAYERS: + cli.notice(nick, messages["maelstrom_dead"]) + return if not forced and evt.data["join_player"](cli, nick, botconfig.CHANNEL, sanity=False): self._on_join(cli, var, nick, chan) evt.prevent_default = True @@ -1087,6 +1090,20 @@ class MaelstromMode(GameMode): var.ROLES[role].add(nick) var.ORIGINAL_ROLES[role].add(nick) var.FINAL_ROLES[nick] = role + + lpl = len(var.list_players()) + lwolves = len(var.list_players(var.WOLFCHAT_ROLES)) + lcubs = len(var.ROLES["wolf cub"]) + lrealwolves = len(var.list_players(var.WOLF_ROLES)) - lcubs + lmonsters = len(var.ROLES["monster"]) + ldemoniacs = len(var.ROLES["demoniac"]) + ltraitors = len(var.ROLES["traitor"]) + lpipers = len(var.ROLES["piper"]) + lsuccubi = len(var.ROLES["succubus"]) + + if self.chk_win_conditions(lpl, lwolves, lcubs, lrealwolves, lmonsters, ldemoniacs, ltraitors, lpipers, lsuccubi, 0, cli, end_game=False): + return self._on_join(cli, var, nick, chan) + if role == "doctor": lpl = len(var.list_players()) var.DOCTORS[nick] = math.ceil(var.DOCTOR_IMMUNIZATION_MULTIPLIER * lpl)