diff --git a/src/roles/dullahan.py b/src/roles/dullahan.py index 67797e6..0fb3e19 100644 --- a/src/roles/dullahan.py +++ b/src/roles/dullahan.py @@ -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"]: diff --git a/src/roles/hunter.py b/src/roles/hunter.py index aad8b10..b5c8554 100644 --- a/src/roles/hunter.py +++ b/src/roles/hunter.py @@ -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) diff --git a/src/roles/shaman.py b/src/roles/shaman.py index 6c89374..b97fc4a 100644 --- a/src/roles/shaman.py +++ b/src/roles/shaman.py @@ -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 diff --git a/src/roles/traitor.py b/src/roles/traitor.py index c9cb85c..2e6d3c4 100644 --- a/src/roles/traitor.py +++ b/src/roles/traitor.py @@ -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(): diff --git a/src/roles/vengefulghost.py b/src/roles/vengefulghost.py index 50dddef..d7a2741 100644 --- a/src/roles/vengefulghost.py +++ b/src/roles/vengefulghost.py @@ -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: diff --git a/src/roles/vigilante.py b/src/roles/vigilante.py index f4ea1fe..f48b81c 100644 --- a/src/roles/vigilante.py +++ b/src/roles/vigilante.py @@ -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"]) diff --git a/src/roles/wolf.py b/src/roles/wolf.py index d6f1c49..f8f91fd 100644 --- a/src/roles/wolf.py +++ b/src/roles/wolf.py @@ -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 diff --git a/src/settings.py b/src/settings.py index dafef99..129960c 100644 --- a/src/settings.py +++ b/src/settings.py @@ -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") diff --git a/src/wolfgame.py b/src/wolfgame.py index 38de752..3f07fe6 100644 --- a/src/wolfgame.py +++ b/src/wolfgame.py @@ -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