bugfixes
This commit is contained in:
parent
a10e706474
commit
f41b92a156
@ -762,7 +762,7 @@ def chk_decision(cli):
|
|||||||
elif votee in var.REVEALED:
|
elif votee in var.REVEALED:
|
||||||
lmsg = ("Before the rope is pulled, \u0002{0}\u0002's totem emits a brilliant flash of light. " +
|
lmsg = ("Before the rope is pulled, \u0002{0}\u0002's totem emits a brilliant flash of light. " +
|
||||||
"When the villagers are able to see again, they discover that {0} has escaped! " +
|
"When the villagers are able to see again, they discover that {0} has escaped! " +
|
||||||
"The left-behind totem seems to have taken on the shape of a \u0002{1}\u0002.").format(votee, var.get_reveal_role(votee))
|
"The left-behind totem seems to have taken on the shape of a(n) \u0002{1}\u0002.").format(votee, var.get_reveal_role(votee))
|
||||||
var.LOGGER.logBare(votee, "ACTIVATED REVEALING TOTEM")
|
var.LOGGER.logBare(votee, "ACTIVATED REVEALING TOTEM")
|
||||||
votee = None
|
votee = None
|
||||||
else:
|
else:
|
||||||
@ -1055,7 +1055,7 @@ def stop_game(cli, winner = ""):
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
won = False
|
won = False
|
||||||
elif plr in p.ORIGINAL_ROLES["monster"]:
|
elif plr in var.ORIGINAL_ROLES["monster"]:
|
||||||
if winner == "monsters":
|
if winner == "monsters":
|
||||||
won = True
|
won = True
|
||||||
elif winner == "":
|
elif winner == "":
|
||||||
@ -1859,6 +1859,7 @@ def transition_day(cli, gameid=0):
|
|||||||
else:
|
else:
|
||||||
var.OTHER_KILLS[ghost] = random.choice(villagers)
|
var.OTHER_KILLS[ghost] = random.choice(villagers)
|
||||||
victims += var.OTHER_KILLS.values()
|
victims += var.OTHER_KILLS.values()
|
||||||
|
victims += var.DYING
|
||||||
victims = set(victims) # remove duplicates
|
victims = set(victims) # remove duplicates
|
||||||
message = [("Night lasted \u0002{0:0>2}:{1:0>2}\u0002. It is now daytime. "+
|
message = [("Night lasted \u0002{0:0>2}:{1:0>2}\u0002. It is now daytime. "+
|
||||||
"The villagers awake, thankful for surviving the night, "+
|
"The villagers awake, thankful for surviving the night, "+
|
||||||
@ -2015,13 +2016,14 @@ def transition_day(cli, gameid=0):
|
|||||||
|
|
||||||
|
|
||||||
def chk_nightdone(cli):
|
def chk_nightdone(cli):
|
||||||
actedcount = len(var.SEEN + var.HVISITED.keys() + var.GUARDED.keys() + var.KILLS.keys() +
|
actedcount = len(var.SEEN + list(var.HVISITED.keys()) + list(var.GUARDED.keys()) +
|
||||||
var.OTHER_KILLS.keys() + var.OBSERVED + var.PASSED + var.HEXED +
|
list(var.KILLS.keys()) + list(var.OTHER_KILLS.keys()) +
|
||||||
var.SHAMANS + var.MATCHMAKERS + var.TARGETED.keys() + var.CLONED.keys())
|
list(var.OBSERVED.keys()) + var.PASSED + var.HEXED + var.SHAMANS +
|
||||||
|
var.MATCHMAKERS + list(var.TARGETED.keys()) + list(var.CLONED.keys()))
|
||||||
nightroles = (var.ROLES["seer"] + var.ROLES["oracle"] + var.ROLES["harlot"] +
|
nightroles = (var.ROLES["seer"] + var.ROLES["oracle"] + var.ROLES["harlot"] +
|
||||||
var.ROLES["guardian angel"] + var.ROLES["bodyguard"] + var.ROLES["wolf"] +
|
var.ROLES["guardian angel"] + var.ROLES["bodyguard"] + var.ROLES["wolf"] +
|
||||||
var.ROLES["werecrow"] + var.ROLES["sorcerer"] + var.ROLES["clone"] +
|
var.ROLES["werecrow"] + var.ROLES["sorcerer"] + var.ROLES["clone"] +
|
||||||
var.ROLES["hunter"] + var.VENGEFUL_GHOSTS.keys() + var.ROLES["hag"] +
|
var.ROLES["hunter"] + list(var.VENGEFUL_GHOSTS.keys()) + var.ROLES["hag"] +
|
||||||
var.ROLES["shaman"] + var.ROLES["crazed shaman"] + var.ROLES["assassin"])
|
var.ROLES["shaman"] + var.ROLES["crazed shaman"] + var.ROLES["assassin"])
|
||||||
playercount = len([p for p in nightroles if p not in var.SILENCED])
|
playercount = len([p for p in nightroles if p not in var.SILENCED])
|
||||||
|
|
||||||
@ -2327,7 +2329,7 @@ def kill(cli, nick, rest):
|
|||||||
role = None
|
role = None
|
||||||
if role in var.WOLFCHAT_ROLES and role not in ("wolf", "werecrow"):
|
if role in var.WOLFCHAT_ROLES and role not in ("wolf", "werecrow"):
|
||||||
return # they do this a lot.
|
return # they do this a lot.
|
||||||
if role not in ("wolf", "werecrow", "hunter") or nick not in var.VENGEFUL_GHOSTS.keys():
|
if role not in ("wolf", "werecrow", "hunter") and nick not in var.VENGEFUL_GHOSTS.keys():
|
||||||
pm(cli, nick, "Only a wolf, hunter, or dead vengeful ghost may use this command.")
|
pm(cli, nick, "Only a wolf, hunter, or dead vengeful ghost may use this command.")
|
||||||
return
|
return
|
||||||
if var.PHASE != "night":
|
if var.PHASE != "night":
|
||||||
@ -2737,7 +2739,7 @@ def see(cli, nick, rest):
|
|||||||
chk_nightdone(cli)
|
chk_nightdone(cli)
|
||||||
|
|
||||||
@pmcmd("give")
|
@pmcmd("give")
|
||||||
def give(cli, nick, *rest):
|
def give(cli, nick, rest):
|
||||||
if var.PHASE in ("none", "join"):
|
if var.PHASE in ("none", "join"):
|
||||||
cli.notice(nick, "No game is currently running.")
|
cli.notice(nick, "No game is currently running.")
|
||||||
return
|
return
|
||||||
@ -2776,7 +2778,7 @@ def give(cli, nick, *rest):
|
|||||||
pm(cli, nick,"\u0002{0}\u0002 is currently not playing.".format(victim))
|
pm(cli, nick,"\u0002{0}\u0002 is currently not playing.".format(victim))
|
||||||
return
|
return
|
||||||
victim = pl[pll.index(target)]
|
victim = pl[pll.index(target)]
|
||||||
if var.LASTGIVEN[nick] == victim:
|
if nick in var.LASTGIVEN and var.LASTGIVEN[nick] == victim:
|
||||||
pm(cli, nick, "You gave your totem to \u0002{0}\u0002 last time, you must choose someone else.".format(victim))
|
pm(cli, nick, "You gave your totem to \u0002{0}\u0002 last time, you must choose someone else.".format(victim))
|
||||||
return
|
return
|
||||||
type = ""
|
type = ""
|
||||||
@ -2784,10 +2786,10 @@ def give(cli, nick, *rest):
|
|||||||
type = " of " + var.TOTEMS[nick]
|
type = " of " + var.TOTEMS[nick]
|
||||||
pm(cli, nick, ("You have given a totem{0} to \u0002{1}\u0002.").format(type, victim))
|
pm(cli, nick, ("You have given a totem{0} to \u0002{1}\u0002.").format(type, victim))
|
||||||
if victim != nick:
|
if victim != nick:
|
||||||
pm(cli, nick, "You have been given a strange totem.")
|
pm(cli, victim, "You have been given a strange totem.")
|
||||||
totem = var.TOTEMS[nick]
|
totem = var.TOTEMS[nick]
|
||||||
if totem == "death":
|
if totem == "death":
|
||||||
var.OTHER_KILLS[nick] = victim
|
var.DYING.append(victim)
|
||||||
elif totem == "protection":
|
elif totem == "protection":
|
||||||
var.PROTECTED.append(victim)
|
var.PROTECTED.append(victim)
|
||||||
elif totem == "revealing":
|
elif totem == "revealing":
|
||||||
@ -2804,7 +2806,7 @@ def give(cli, nick, *rest):
|
|||||||
chk_nightdone(cli)
|
chk_nightdone(cli)
|
||||||
|
|
||||||
@pmcmd("pass")
|
@pmcmd("pass")
|
||||||
def pass_cmd(cli, nick, *rest):
|
def pass_cmd(cli, nick, rest):
|
||||||
if var.PHASE in ("none", "join"):
|
if var.PHASE in ("none", "join"):
|
||||||
cli.notice(nick, "No game is currently running.")
|
cli.notice(nick, "No game is currently running.")
|
||||||
return
|
return
|
||||||
@ -2832,19 +2834,19 @@ def pass_cmd(cli, nick, *rest):
|
|||||||
chk_nightdone(cli)
|
chk_nightdone(cli)
|
||||||
|
|
||||||
@pmcmd("choose")
|
@pmcmd("choose")
|
||||||
def choose(cli, nick, *rest):
|
def choose(cli, nick, rest):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@pmcmd("target")
|
@pmcmd("target")
|
||||||
def target(cli, nick, *rest):
|
def target(cli, nick, rest):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@pmcmd("hex")
|
@pmcmd("hex")
|
||||||
def hex(cli, nick, *rest):
|
def hex(cli, nick, rest):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@pmcmd("clone")
|
@pmcmd("clone")
|
||||||
def clone(cli, nick, *rest):
|
def clone(cli, nick, rest):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@hook("featurelist") # For multiple targets with PRIVMSG
|
@hook("featurelist") # For multiple targets with PRIVMSG
|
||||||
@ -2930,6 +2932,7 @@ def transition_night(cli):
|
|||||||
var.OBSERVED = {} # those whom werecrows have observed
|
var.OBSERVED = {} # those whom werecrows have observed
|
||||||
var.HVISITED = {}
|
var.HVISITED = {}
|
||||||
var.ASLEEP = []
|
var.ASLEEP = []
|
||||||
|
var.DYING = []
|
||||||
var.PROTECTED = []
|
var.PROTECTED = []
|
||||||
var.DESPERATE = []
|
var.DESPERATE = []
|
||||||
var.REVEALED = []
|
var.REVEALED = []
|
||||||
@ -3368,7 +3371,7 @@ def cgamemode(cli, *args):
|
|||||||
for arg in args:
|
for arg in args:
|
||||||
modeargs = arg.split("=", 1)
|
modeargs = arg.split("=", 1)
|
||||||
|
|
||||||
modeargs = map(strip, modeargs)
|
modeargs = [a.strip() for a in modeargs]
|
||||||
if modeargs[0] in var.GAME_MODES.keys():
|
if modeargs[0] in var.GAME_MODES.keys():
|
||||||
md = modeargs.pop(0)
|
md = modeargs.pop(0)
|
||||||
try:
|
try:
|
||||||
@ -3421,9 +3424,9 @@ def start(cli, nick, chann_, rest):
|
|||||||
cli.msg(chan, "{0}: At most \u0002{1}\u0002 players may play in this game mode.".format(nick, var.MAX_PLAYERS))
|
cli.msg(chan, "{0}: At most \u0002{1}\u0002 players may play in this game mode.".format(nick, var.MAX_PLAYERS))
|
||||||
return
|
return
|
||||||
|
|
||||||
for index in range(len(var.ROLE_INDEX), -1, -1):
|
for index in range(len(var.ROLE_INDEX) - 1, -1, -1):
|
||||||
if var.ROLE_INDEX[index] < len(villagers):
|
if var.ROLE_INDEX[index] <= len(villagers):
|
||||||
addroles = {k:v[index] for k,v in var.ROLE_GUIDE}
|
addroles = {k:v[index] for k,v in var.ROLE_GUIDE.items()}
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
cli.msg(chan, "{0}: No game settings are defined for \u0002{1}\u0002 player games.".format(nick, len(villagers)))
|
cli.msg(chan, "{0}: No game settings are defined for \u0002{1}\u0002 player games.".format(nick, len(villagers)))
|
||||||
@ -3483,8 +3486,10 @@ def start(cli, nick, chann_, rest):
|
|||||||
var.REVEALED = []
|
var.REVEALED = []
|
||||||
var.ASLEEP = []
|
var.ASLEEP = []
|
||||||
var.PROTECTED = []
|
var.PROTECTED = []
|
||||||
|
var.DYING = []
|
||||||
var.NIGHT_COUNT = 0
|
var.NIGHT_COUNT = 0
|
||||||
var.DAY_COUNT = 0
|
var.DAY_COUNT = 0
|
||||||
|
var.ANGRY_WOLVES = False
|
||||||
|
|
||||||
for role, count in addroles.items():
|
for role, count in addroles.items():
|
||||||
if role in var.TEMPLATE_RESTRICTIONS.keys():
|
if role in var.TEMPLATE_RESTRICTIONS.keys():
|
||||||
@ -3501,12 +3506,12 @@ def start(cli, nick, chann_, rest):
|
|||||||
continue # sharpshooter gets applied specially
|
continue # sharpshooter gets applied specially
|
||||||
possible = pl[:]
|
possible = pl[:]
|
||||||
for cannotbe in var.list_players(restrictions):
|
for cannotbe in var.list_players(restrictions):
|
||||||
possible.removed(cannotbe)
|
possible.remove(cannotbe)
|
||||||
var.ROLES[template] = random.sample(possible, len(var.ROLES[template]))
|
var.ROLES[template] = random.sample(possible, len(var.ROLES[template]))
|
||||||
|
|
||||||
# Handle gunner
|
# Handle gunner
|
||||||
cannot_be_sharpshooter = var.list_players(var.TEMPLATE_RESTRICTIONS["sharpshooter"])
|
cannot_be_sharpshooter = var.list_players(var.TEMPLATE_RESTRICTIONS["sharpshooter"])
|
||||||
for gunner in var.GUNNER_LIST:
|
for gunner in var.ROLES["gunner"]:
|
||||||
if gunner in var.ROLES["village drunk"]:
|
if gunner in var.ROLES["village drunk"]:
|
||||||
var.GUNNERS[gunner] = (var.DRUNK_SHOTS_MULTIPLIER * math.ceil(var.SHOTS_MULTIPLIER * len(pl)))
|
var.GUNNERS[gunner] = (var.DRUNK_SHOTS_MULTIPLIER * math.ceil(var.SHOTS_MULTIPLIER * len(pl)))
|
||||||
elif gunner not in cannot_be_sharpshooter and random.random() <= var.SHARPSHOOTER_CHANCE:
|
elif gunner not in cannot_be_sharpshooter and random.random() <= var.SHARPSHOOTER_CHANCE:
|
||||||
|
@ -129,9 +129,9 @@ ROLE_GUIDE = {# village roles
|
|||||||
# If every wolf role dies, the game ends and village wins and there are no remaining traitors, the game ends and villagers win
|
# If every wolf role dies, the game ends and village wins and there are no remaining traitors, the game ends and villagers win
|
||||||
WOLF_ROLES = ["wolf", "werecrow", "wolf cub"]
|
WOLF_ROLES = ["wolf", "werecrow", "wolf cub"]
|
||||||
# Access to wolfchat, and counted towards the # of wolves vs villagers when determining if a side has won
|
# Access to wolfchat, and counted towards the # of wolves vs villagers when determining if a side has won
|
||||||
WOLFCHAT_ROLES = ["wolf", "traitor", "werecrow", "hag", "wolf cub", "sorceror"]
|
WOLFCHAT_ROLES = ["wolf", "traitor", "werecrow", "hag", "wolf cub", "sorcerer"]
|
||||||
# Wins with the wolves, even if the roles are not necessarily wolves themselves
|
# Wins with the wolves, even if the roles are not necessarily wolves themselves
|
||||||
WOLFTEAM_ROLES = ["wolf", "traitor", "werecrow", "hag", "wolf cub", "sorceror", "minion", "cultist"]
|
WOLFTEAM_ROLES = ["wolf", "traitor", "werecrow", "hag", "wolf cub", "sorcerer", "minion", "cultist"]
|
||||||
# These roles never win as a team, only ever individually (either instead of or in addition to the regular winners)
|
# These roles never win as a team, only ever individually (either instead of or in addition to the regular winners)
|
||||||
TRUE_NEUTRAL_ROLES = ["vengeful ghost", "crazed shaman", "fool"]
|
TRUE_NEUTRAL_ROLES = ["vengeful ghost", "crazed shaman", "fool"]
|
||||||
|
|
||||||
@ -201,15 +201,19 @@ def get_reveal_role(nick):
|
|||||||
def del_player(pname):
|
def del_player(pname):
|
||||||
prole = get_role(pname)
|
prole = get_role(pname)
|
||||||
ROLES[prole].remove(pname)
|
ROLES[prole].remove(pname)
|
||||||
tpls = get_templates(nick)
|
tpls = get_templates(pname)
|
||||||
for t in tpls:
|
for t in tpls:
|
||||||
ROLES[t].remove(pname)
|
ROLES[t].remove(pname)
|
||||||
|
|
||||||
def get_templates(nick):
|
def get_templates(nick):
|
||||||
tpl = []
|
tpl = []
|
||||||
for x in TEMPLATE_RESTRICTIONS.keys():
|
for x in TEMPLATE_RESTRICTIONS.keys():
|
||||||
if nick in ROLES[x]:
|
try:
|
||||||
tpl.append(x)
|
if nick in ROLES[x]:
|
||||||
|
tpl.append(x)
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
return tpl
|
return tpl
|
||||||
|
|
||||||
class InvalidModeException(Exception): pass
|
class InvalidModeException(Exception): pass
|
||||||
@ -227,9 +231,13 @@ class ChangedRolesMode(object):
|
|||||||
|
|
||||||
def __init__(self, arg = ""):
|
def __init__(self, arg = ""):
|
||||||
self.ROLE_GUIDE = ROLE_GUIDE.copy()
|
self.ROLE_GUIDE = ROLE_GUIDE.copy()
|
||||||
|
self.ROLE_INDEX = (MIN_PLAYERS,)
|
||||||
pairs = arg.split(",")
|
pairs = arg.split(",")
|
||||||
if not pairs:
|
if not pairs:
|
||||||
raise InvalidModeException("Invalid syntax for mode roles.")
|
raise InvalidModeException("Invalid syntax for mode roles.")
|
||||||
|
|
||||||
|
for role in self.ROLE_GUIDE.keys():
|
||||||
|
self.ROLE_GUIDE[role] = (0,)
|
||||||
for pair in pairs:
|
for pair in pairs:
|
||||||
change = pair.split(":")
|
change = pair.split(":")
|
||||||
if len(change) != 2:
|
if len(change) != 2:
|
||||||
@ -424,4 +432,4 @@ def get_game_totals():
|
|||||||
else:
|
else:
|
||||||
return "Total games ({0}) | {1}".format(total, ", ".join(size_totals))
|
return "Total games ({0}) | {1}".format(total, ", ".join(size_totals))
|
||||||
|
|
||||||
# vim : set expandtab:sw=4:ts=4:
|
# vim: set expandtab:sw=4:ts=4:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user