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)
This commit is contained in:
skizzerz 2016-02-03 23:11:58 -06:00
parent 805ee7e18a
commit 48b5db2d9c
2 changed files with 19 additions and 1 deletions

View File

@ -774,5 +774,6 @@
"fspectate_deadchat_disabled": "Deadchat is disabled and may not be spectated.", "fspectate_deadchat_disabled": "Deadchat is disabled and may not be spectated.",
"fspectate_in_deadchat": "You are currently in deadchat.", "fspectate_in_deadchat": "You are currently in deadchat.",
"fspectate_on": "You are now spectating {0}.", "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."
} }

View File

@ -1074,6 +1074,9 @@ class MaelstromMode(GameMode):
def on_join(self, evt, cli, var, nick, chan, rest, forced=False): def on_join(self, evt, cli, var, nick, chan, rest, forced=False):
if var.PHASE != "day" or (nick != chan and chan != botconfig.CHANNEL): if var.PHASE != "day" or (nick != chan and chan != botconfig.CHANNEL):
return 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): if not forced and evt.data["join_player"](cli, nick, botconfig.CHANNEL, sanity=False):
self._on_join(cli, var, nick, chan) self._on_join(cli, var, nick, chan)
evt.prevent_default = True evt.prevent_default = True
@ -1087,6 +1090,20 @@ class MaelstromMode(GameMode):
var.ROLES[role].add(nick) var.ROLES[role].add(nick)
var.ORIGINAL_ROLES[role].add(nick) var.ORIGINAL_ROLES[role].add(nick)
var.FINAL_ROLES[nick] = role 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": if role == "doctor":
lpl = len(var.list_players()) lpl = len(var.list_players())
var.DOCTORS[nick] = math.ceil(var.DOCTOR_IMMUNIZATION_MULTIPLIER * lpl) var.DOCTORS[nick] = math.ceil(var.DOCTOR_IMMUNIZATION_MULTIPLIER * lpl)