From 2b57abc1fb41b61ff84e342a521ef268cb96db7a Mon Sep 17 00:00:00 2001 From: Yizhe Shen Date: Sun, 9 Feb 2014 01:08:02 -0500 Subject: [PATCH] Added an option for hidden traitor. Added the option in ./modules/wolfgame.py. When activated, if traitor dies before turning, he will only be revealed as a villager. Also, when "stats" command is used, traitor will be counted as a villager. By default, it is set to True. --- modules/wolfgame.py | 29 +++++++++++++++++------------ settings/wolfgame.py | 6 ++++++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/modules/wolfgame.py b/modules/wolfgame.py index 4337d35..03622b3 100644 --- a/modules/wolfgame.py +++ b/modules/wolfgame.py @@ -568,6 +568,11 @@ def stats(cli, nick, chan, rest): vb = "is" for role in rs: count = len(var.ROLES[role]) + if role == "traitor" and var.HIDDEN_TRAITOR: + continue + elif role == "villager" and var.HIDDEN_TRAITOR: + count += len(var.ROLES["traitor"]) + if count > 1 or count == 0: message.append("\u0002{0}\u0002 {1}".format(count if count else "\u0002no\u0002", var.plural(role))) else: @@ -664,7 +669,7 @@ def chk_decision(cli): votesneeded = avail // 2 + 1 for votee, voters in iter(var.VOTES.items()): if len(voters) >= votesneeded: - lmsg = random.choice(var.LYNCH_MESSAGES).format(votee, var.get_role(votee)) + lmsg = random.choice(var.LYNCH_MESSAGES).format(votee, var.get_reveal_role(votee)) cli.msg(botconfig.CHANNEL, lmsg) var.LOGGER.logMessage(lmsg.replace("\02", "")) var.LOGGER.logBare(votee, "LYNCHED") @@ -1002,7 +1007,7 @@ def reaper(cli, gameid): continue cli.msg(chan, ("\u0002{0}\u0002 didn't get out of bed for a very long "+ "time and has been found dead. The survivors bury "+ - "the \u0002{1}\u0002's body.").format(nck, var.get_role(nck))) + "the \u0002{1}\u0002's body.").format(nck, var.get_reveal_role(nck))) make_stasis(nck, var.IDLE_STASIS_PENALTY) if not del_player(cli, nck): return @@ -1016,14 +1021,14 @@ def reaper(cli, gameid): _, timeofdc, what = var.DISCONNECTED[dcedplayer] if what == "quit" and (datetime.now() - timeofdc) > timedelta(seconds=var.QUIT_GRACE_TIME): cli.msg(chan, ("\02{0}\02 was mauled by wild animals and has died. It seems that "+ - "\02{1}\02 meat is tasty.").format(dcedplayer, var.get_role(dcedplayer))) + "\02{1}\02 meat is tasty.").format(dcedplayer, var.get_reveal_role(dcedplayer))) if var.PHASE != "join": make_stasis(dcedplayer, var.PART_STASIS_PENALTY) if not del_player(cli, dcedplayer, devoice = False): return elif what == "part" and (datetime.now() - timeofdc) > timedelta(seconds=var.PART_GRACE_TIME): cli.msg(chan, ("\02{0}\02, a \02{1}\02, ate some poisonous berries "+ - "and has died.").format(dcedplayer, var.get_role(dcedplayer))) + "and has died.").format(dcedplayer, var.get_reveal_role(dcedplayer))) if var.PHASE != "join": make_stasis(dcedplayer, var.PART_STASIS_PENALTY) if not del_player(cli, dcedplayer, devoice = False): @@ -1222,16 +1227,16 @@ def leave(cli, what, nick, why=""): killplayer = True if what == "part" and (not var.PART_GRACE_TIME or var.PHASE == "join"): msg = ("\02{0}\02, a \02{1}\02, ate some poisonous berries and has "+ - "died.").format(nick, var.get_role(nick)) + "died.").format(nick, var.get_reveal_role(nick)) elif what == "quit" and (not var.QUIT_GRACE_TIME or var.PHASE == "join"): msg = ("\02{0}\02 was mauled by wild animals and has died. It seems that "+ - "\02{1}\02 meat is tasty.").format(nick, var.get_role(nick)) + "\02{1}\02 meat is tasty.").format(nick, var.get_reveal_role(nick)) elif what != "kick": msg = "\u0002{0}\u0002 has gone missing.".format(nick) killplayer = False else: msg = ("\02{0}\02 died due to falling off a cliff. The "+ - "\02{1}\02 is lost to the ravine forever.").format(nick, var.get_role(nick)) + "\02{1}\02 is lost to the ravine forever.").format(nick, var.get_reveal_role(nick)) cli.msg(botconfig.CHANNEL, msg) var.LOGGER.logMessage(msg.replace("\02", "")) if killplayer: @@ -1263,8 +1268,8 @@ def leave_game(cli, nick, chan, rest): if nick not in var.list_players() or nick in var.DISCONNECTED.keys(): # not playing cli.notice(nick, "You're not currently playing.") return - cli.msg(botconfig.CHANNEL, ("\02{0}\02, a \02{1}\02, has died of an unknown disease.{2}").format(nick, var.get_role(nick), population)) - var.LOGGER.logMessage(("{0}, a {1}, has died of an unknown disease.").format(nick, var.get_role(nick))) + cli.msg(botconfig.CHANNEL, ("\02{0}\02, a \02{1}\02, has died of an unknown disease.{2}").format(nick, var.get_reveal_role(nick), population)) + var.LOGGER.logMessage(("{0}, a {1}, has died of an unknown disease.").format(nick, var.get_reveal_role(nick))) if var.PHASE != "join": make_stasis(nick, var.LEAVE_STASIS_PENALTY) @@ -1668,7 +1673,7 @@ def shoot(cli, nick, chann_, rest): cli.msg(chan, ("\u0002{0}\u0002 shoots \u0002{1}\u0002 with "+ "a silver bullet!").format(nick, victim)) var.LOGGER.logMessage("{0} shoots {1} with a silver bullet!".format(nick, victim)) - victimrole = var.get_role(victim) + victimrole = var.get_reveal_role(victim) if victimrole in ("wolf", "werecrow"): cli.msg(chan, ("\u0002{0}\u0002 is a {1}, and is dying from "+ "the silver bullet.").format(victim, victimrole)) @@ -1707,9 +1712,9 @@ def shoot(cli, nick, chann_, rest): var.LOGGER.logMessage("{0} is a lousy shooter and missed!".format(nick)) else: cli.msg(chan, ("Oh no! \u0002{0}\u0002's gun was poorly maintained and has exploded! "+ - "The village mourns a gunner-\u0002{1}\u0002.").format(nick, var.get_role(nick))) + "The village mourns a gunner-\u0002{1}\u0002.").format(nick, var.get_reveal_role(nick))) var.LOGGER.logMessage(("Oh no! {0}'s gun was poorly maintained and has exploded! "+ - "The village mourns a gunner-{1}.").format(nick, var.get_role(nick))) + "The village mourns a gunner-{1}.").format(nick, var.get_reveal_role(nick))) if not del_player(cli, nick): return # Someone won. diff --git a/settings/wolfgame.py b/settings/wolfgame.py index 52666b6..c318146 100644 --- a/settings/wolfgame.py +++ b/settings/wolfgame.py @@ -31,6 +31,7 @@ PART_STASIS_PENALTY = 1 GOAT_HERDER = True SELF_LYNCH_ALLOWED = True +HIDDEN_TRAITOR = True CARE_BOLD = False CARE_COLOR = False @@ -125,6 +126,11 @@ def list_players_and_roles(): get_role = lambda plyr: list_players_and_roles()[plyr] +def get_reveal_role(nick): + if HIDDEN_TRAITOR and get_role(nick) == "traitor": + return "villager" + else: + return get_role(nick) def del_player(pname): prole = get_role(pname)