Add additional aliases

mm = matchmaker, ms = mad scientist, vg = vengeful ghost

Additionally, allow all special keys to be queried via pstats in an
extensible manner (used for vg activated and vg driven off)
This commit is contained in:
skizzerz 2017-03-28 12:13:59 -05:00
parent d029302ead
commit f096814fec
9 changed files with 19 additions and 9 deletions

View File

@ -243,7 +243,7 @@ def on_reset(evt, var):
TARGETS.clear()
@event_listener("get_role_metadata")
def on_get_role_metadata(evt, cli, var, kind):
def on_get_role_metadata(evt, var, kind):
if kind == "night_kills":
num = 0
for dull in var.ROLES["dullahan"]:

View File

@ -168,7 +168,7 @@ def on_reset(evt, var):
HUNTERS.clear()
@event_listener("get_role_metadata")
def on_get_role_metadata(evt, cli, var, kind):
def on_get_role_metadata(evt, var, kind):
if kind == "night_kills":
# hunters is the set of all hunters that have not killed in a *previous* night
# (if they're in both HUNTERS and KILLS, then they killed tonight and should be counted)

View File

@ -641,7 +641,7 @@ def on_frole_role(evt, cli, var, who, role, oldrole, args):
break
@event_listener("get_role_metadata")
def on_get_role_metadata(evt, cli, var, kind):
def on_get_role_metadata(evt, var, kind):
if kind == "night_kills":
# only add shamans here if they were given a death totem
# even though retribution kills, it is given a special kill message

View File

@ -45,7 +45,7 @@ def on_update_stats3(evt, cli, var, nick, nickrole, nickreveal, nicktpls):
return
if var.PHASE == "day" and var.GAMEPHASE == "night":
mevt = Event("get_role_metadata", {})
mevt.dispatch(cli, var, "night_kills")
mevt.dispatch(var, "night_kills")
nonwolf = 0
total = 0
for role, num in mevt.data.items():

View File

@ -248,8 +248,10 @@ def on_reset(evt, var):
GHOSTS.clear()
@event_listener("get_role_metadata")
def on_get_role_metadata(evt, cli, var, kind):
def on_get_role_metadata(evt, var, kind):
if kind == "night_kills":
evt.data["vengeful ghost"] = sum(1 for against in GHOSTS.values() if against[0] != "!")
elif kind == "special_keys":
evt.data["vengeful ghost"] = {"vg activated", "vg driven off"}
# vim: set sw=4 expandtab:

View File

@ -151,7 +151,7 @@ def on_reset(evt, var):
PASSED.clear()
@event_listener("get_role_metadata")
def on_get_role_metadata(evt, cli, var, kind):
def on_get_role_metadata(evt, var, kind):
if kind == "night_kills":
evt.data["vigilante"] = len(var.ROLES["vigilante"])

View File

@ -450,7 +450,7 @@ def on_reset(evt, var):
KILLS.clear()
@event_listener("get_role_metadata")
def on_get_role_metadata(evt, cli, var, kind):
def on_get_role_metadata(evt, var, kind):
if kind == "night_kills":
if var.DISEASED_WOLVES:
evt.data["wolf"] = 0

View File

@ -215,6 +215,9 @@ ROLE_ALIASES = {
"drunk": "village drunk",
"cs": "crazed shaman",
"potato": "villager",
"vg": "vengeful ghost",
"mm": "matchmaker",
"ms": "mad scientist",
}
# 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")

View File

@ -6784,9 +6784,14 @@ def player_stats(cli, nick, chan, rest):
else:
role = " ".join(params[1:])
if role not in var.ROLE_GUIDE.keys():
matches = complete_match(role, var.ROLE_GUIDE.keys() | {"lover"})
if not matches and role.lower() in var.ROLE_ALIASES:
special_keys = {"lover"}
evt = Event("get_role_metadata", {})
evt.dispatch(var, "special_keys")
special_keys = functools.reduce(lambda x, y: x | y, evt.data.values(), special_keys)
if role.lower() in var.ROLE_ALIASES:
matches = (var.ROLE_ALIASES[role.lower()],)
else:
matches = complete_match(role, var.ROLE_GUIDE.keys() | special_keys)
if not matches:
reply(cli, nick, chan, messages["no_such_role"].format(role))
return