From 89cabd933bfb99e88d246300836089f40f62f8f4 Mon Sep 17 00:00:00 2001 From: "Vgr E. Barry" Date: Mon, 18 Sep 2017 16:35:09 -0400 Subject: [PATCH] Update event listeners for del_player --- src/gamemodes.py | 6 +++--- src/roles/angel.py | 12 ++++++------ src/roles/blessed.py | 6 +++--- src/roles/dullahan.py | 13 ++++++------- src/roles/fallenangel.py | 2 +- src/roles/madscientist.py | 30 +++++++++++++++--------------- src/roles/shaman.py | 6 +++--- src/roles/succubus.py | 6 +++--- src/roles/vengefulghost.py | 4 ++-- src/roles/wildchild.py | 2 +- 10 files changed, 43 insertions(+), 44 deletions(-) diff --git a/src/gamemodes.py b/src/gamemodes.py index 0f08d18..c57abce 100644 --- a/src/gamemodes.py +++ b/src/gamemodes.py @@ -1143,9 +1143,9 @@ class SleepyMode(GameMode): if mainrole == "priest": pl = evt.data["pl"] turn_chance = 3/4 - seers = [p for p in get_all_players(("seer",)) if p.nick in pl and random.random() < turn_chance] - harlots = [p for p in get_all_players(("harlot",)) if p.nick in pl and random.random() < turn_chance] - cultists = [p for p in get_all_players(("cultist",)) if p.nick in pl and random.random() < turn_chance] + seers = [p for p in get_all_players(("seer",)) if p in pl and random.random() < turn_chance] + harlots = [p for p in get_all_players(("harlot",)) if p in pl and random.random() < turn_chance] + cultists = [p for p in get_all_players(("cultist",)) if p in pl and random.random() < turn_chance] channels.Main.send(messages["sleepy_priest_death"]) for seer in seers: change_role(seer, "seer", "doomsayer") diff --git a/src/roles/angel.py b/src/roles/angel.py index fdbc62c..23d6c1a 100644 --- a/src/roles/angel.py +++ b/src/roles/angel.py @@ -266,19 +266,19 @@ def on_transition_night_end(evt, var): gangel.send(messages[to_send].format(warning, gself), "Players: " + ", ".join(p.nick for p in pl), sep="\n") @event_listener("assassinate") -def on_assassinate(evt, cli, var, nick, target, prot): +def on_assassinate(evt, var, killer, target, prot): if prot == "angel" and var.GAMEPHASE == "night": - var.ACTIVE_PROTECTIONS[target].remove("angel") + var.ACTIVE_PROTECTIONS[target.nick].remove("angel") evt.prevent_default = True evt.stop_processing = True - cli.msg(botconfig.CHANNEL, messages[evt.params.message_prefix + "angel"].format(nick, target)) + channels.Main.send(messages[evt.params.message_prefix + "angel"].format(killer, target)) elif prot == "bodyguard": - var.ACTIVE_PROTECTIONS[target].remove("bodyguard") + var.ACTIVE_PROTECTIONS[target.nick].remove("bodyguard") evt.prevent_default = True evt.stop_processing = True for bg in var.ROLES["bodyguard"]: - if GUARDED.get(bg) == target: - cli.msg(botconfig.CHANNEL, messages[evt.params.message_prefix + "bodyguard"].format(nick, target, bg)) + if GUARDED.get(bg) == target.nick: + channels.Main.send(messages[evt.params.message_prefix + "bodyguard"].format(killer, target, bg)) # redirect the assassination to the bodyguard evt.data["target"] = users._get(bg) # FIXME break diff --git a/src/roles/blessed.py b/src/roles/blessed.py index ce8eb5e..03b80e8 100644 --- a/src/roles/blessed.py +++ b/src/roles/blessed.py @@ -65,13 +65,13 @@ def on_retribution(evt, var, victim, target, prot): evt.stop_processing = True @event_listener("assassinate") -def on_assassinate(evt, cli, var, nick, target, prot): +def on_assassinate(evt, var, killer, target, prot): if prot == "blessing": - var.ACTIVE_PROTECTIONS[target].remove("blessing") + var.ACTIVE_PROTECTIONS[target.nick].remove("blessing") evt.prevent_default = True evt.stop_processing = True # don't message the channel whenever a blessing blocks a kill, but *do* let the killer know so they don't try to report it as a bug - pm(cli, nick, messages["assassin_fail_blessed"].format(target)) + killer.send(messages["assassin_fail_blessed"].format(target)) @event_listener("myrole") def on_myrole(evt, var, user): diff --git a/src/roles/dullahan.py b/src/roles/dullahan.py index 76633b6..1dcdabf 100644 --- a/src/roles/dullahan.py +++ b/src/roles/dullahan.py @@ -68,7 +68,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): del KILLS[h] if death_triggers and "dullahan" in allroles: pl = evt.data["pl"] - targets = TARGETS[user].intersection(users._get(x) for x in pl) # FIXME + targets = TARGETS[user].intersection(pl) if targets: target = random.choice(list(targets)) prots = deque(var.ACTIVE_PROTECTIONS[target.nick]) @@ -79,7 +79,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): refresh_pl=evt.params.refresh_pl, message_prefix="dullahan_die_", source="dullahan", - killer=user.nick, + killer=user, killer_mainrole=mainrole, killer_allroles=allroles, prots=prots) @@ -87,7 +87,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): # an event can read the current active protection and cancel or redirect the assassination # if it cancels, it is responsible for removing the protection from var.ACTIVE_PROTECTIONS # so that it cannot be used again (if the protection is meant to be usable once-only) - if not aevt.dispatch(user.client, var, user.nick, target.nick, prots[0]): + if not aevt.dispatch(var, user, target, prots[0]): evt.data["pl"] = aevt.data["pl"] if target is not aevt.data["target"]: target = aevt.data["target"] @@ -97,15 +97,14 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): return prots.popleft() - target = target.nick # FIXME if var.ROLE_REVEAL in ("on", "team"): - role = get_reveal_role(target) + role = get_reveal_role(target.nick) an = "n" if role.startswith(("a", "e", "i", "o", "u")) else "" channels.Main.send(messages["dullahan_die_success"].format(user, target, an, role)) else: channels.Main.send(messages["dullahan_die_success_noreveal"].format(user, target)) - debuglog("{0} (dullahan) DULLAHAN ASSASSINATE: {1} ({2})".format(user, target, get_role(target))) - evt.params.del_player(user.client, target, True, end_game=False, killer_role="dullahan", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False) + debuglog("{0} (dullahan) DULLAHAN ASSASSINATE: {1} ({2})".format(user, target, get_role(target.nick))) + evt.params.del_player(target, forced_death=True, end_game=False, killer_role="dullahan", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False) evt.data["pl"] = evt.params.refresh_pl(pl) @event_listener("night_acted") diff --git a/src/roles/fallenangel.py b/src/roles/fallenangel.py index 6fc1b48..e3427af 100644 --- a/src/roles/fallenangel.py +++ b/src/roles/fallenangel.py @@ -42,7 +42,7 @@ def on_transition_day(evt, var): evt.data["killers"][p].append(killer) @event_listener("assassinate", priority=1) -def on_assassinate(evt, cli, var, nick, target, prot): +def on_assassinate(evt, var, killer, target, prot): # bypass all protection if FA is doing the killing # we do this by stopping propagation, meaning future events won't fire if "fallen angel" in evt.params.killer_allroles: diff --git a/src/roles/madscientist.py b/src/roles/madscientist.py index 5e0fb7c..c62decc 100644 --- a/src/roles/madscientist.py +++ b/src/roles/madscientist.py @@ -13,7 +13,7 @@ from src.decorators import command, event_listener from src.messages import messages from src.events import Event -def _get_targets(var, pl, nick): +def _get_targets(var, pl, user): """Gets the mad scientist's targets. var - settings module @@ -21,8 +21,8 @@ def _get_targets(var, pl, nick): nick - nick of the mad scientist """ - for index, user in enumerate(var.ALL_PLAYERS): - if user.nick == nick: # FIXME + for index, player in enumerate(var.ALL_PLAYERS): + if player is user: # FIXME break num_players = len(var.ALL_PLAYERS) @@ -33,14 +33,14 @@ def _get_targets(var, pl, nick): i = index while True: i = (i - 1) % num_players - if var.ALL_PLAYERS[i].nick in pl or var.ALL_PLAYERS[i].nick == nick: + if var.ALL_PLAYERS[i] in pl or var.ALL_PLAYERS[i] is user: target1 = var.ALL_PLAYERS[i] break # determine right player i = index while True: i = (i + 1) % num_players - if var.ALL_PLAYERS[i].nick in pl or var.ALL_PLAYERS[i].nick == nick: + if var.ALL_PLAYERS[i] in pl or var.ALL_PLAYERS[i] is user: target2 = var.ALL_PLAYERS[i] break @@ -53,7 +53,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): return pl = evt.data["pl"] - target1, target2 = _get_targets(var, pl, user.nick) + target1, target2 = _get_targets(var, pl, user) # apply protections (if applicable) prots1 = deque(var.ACTIVE_PROTECTIONS[target1.nick]) @@ -68,13 +68,13 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): refresh_pl=evt.params.refresh_pl, message_prefix="mad_scientist_fail_", source="mad scientist", - killer=user.nick, + killer=user, killer_mainrole=mainrole, killer_allroles=allroles, prots=prots1) while len(prots1) > 0: # events may be able to cancel this kill - if not aevt.dispatch(user.client, var, user.nick, target1.nick, prots1[0]): + if not aevt.dispatch(var, user, target1, prots1[0]): pl = aevt.data["pl"] if target1 is not aevt.data["target"]: target1 = aevt.data["target"] @@ -87,7 +87,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): aevt.params.prots = prots2 while len(prots2) > 0: # events may be able to cancel this kill - if not aevt.dispatch(user.client, var, user.nick, target2.nick, prots2[0]): + if not aevt.dispatch(var, user, target2, prots2[0]): pl = aevt.data["pl"] if target2 is not aevt.data["target"]: target2 = aevt.data["target"] @@ -97,8 +97,8 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): break prots2.popleft() - kill1 = target1.nick in pl and len(prots1) == 0 - kill2 = target2.nick in pl and len(prots2) == 0 and target1 is not target2 + kill1 = target1 in pl and len(prots1) == 0 + kill2 = target2 in pl and len(prots2) == 0 and target1 is not target2 if kill1: if kill2: @@ -117,8 +117,8 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): deadlist1.append(target2.nick) deadlist2 = evt.params.deadlist[:] deadlist2.append(target1.nick) - evt.params.del_player(user.client, target1.nick, True, end_game=False, killer_role="mad scientist", deadlist=deadlist1, original=evt.params.original, ismain=False) - evt.params.del_player(user.client, target2.nick, True, end_game=False, killer_role="mad scientist", deadlist=deadlist2, original=evt.params.original, ismain=False) + evt.params.del_player(target1, forced_death=True, end_game=False, killer_role="mad scientist", deadlist=deadlist1, original=evt.params.original, ismain=False) + evt.params.del_player(target2, forced_death=True, end_game=False, killer_role="mad scientist", deadlist=deadlist2, original=evt.params.original, ismain=False) pl = evt.params.refresh_pl(pl) else: if var.ROLE_REVEAL in ("on", "team"): @@ -129,7 +129,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): tmsg = messages["mad_scientist_kill_single_no_reveal"].format(user, target1) channels.Main.send(tmsg) debuglog(user.nick, "(mad scientist) KILL: {0} ({1})".format(target1, get_role(target1.nick))) - evt.params.del_player(user.client, target1.nick, True, end_game=False, killer_role="mad scientist", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False) + evt.params.del_player(target1, forced_death=True, end_game=False, killer_role="mad scientist", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False) pl = evt.params.refresh_pl(pl) else: if kill2: @@ -141,7 +141,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): tmsg = messages["mad_scientist_kill_single_no_reveal"].format(user, target2) channels.Main.send(tmsg) debuglog(user.nick, "(mad scientist) KILL: {0} ({1})".format(target2, get_role(target2.nick))) - evt.params.del_player(user.client, target2.nick, True, end_game=False, killer_role="mad scientist", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False) + evt.params.del_player(target2, forced_death=True, end_game=False, killer_role="mad scientist", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False) pl = evt.params.refresh_pl(pl) else: tmsg = messages["mad_scientist_fail"].format(user) diff --git a/src/roles/shaman.py b/src/roles/shaman.py index 8eed488..368c294 100644 --- a/src/roles/shaman.py +++ b/src/roles/shaman.py @@ -576,12 +576,12 @@ def on_lynch(evt, cli, var, nick): evt.prevent_default = True @event_listener("assassinate") -def on_assassinate(evt, cli, var, nick, target, prot): +def on_assassinate(evt, var, killer, target, prot): if prot == "totem": - var.ACTIVE_PROTECTIONS[target].remove("totem") + var.ACTIVE_PROTECTIONS[target.nick].remove("totem") evt.prevent_default = True evt.stop_processing = True - cli.msg(botconfig.CHANNEL, messages[evt.params.message_prefix + "totem"].format(nick, target)) + channels.Main.send(messages[evt.params.message_prefix + "totem"].format(killer, target)) @event_listener("succubus_visit") def on_succubus_visit(evt, cli, var, nick, victim): diff --git a/src/roles/succubus.py b/src/roles/succubus.py index 1e6553b..f9f59a3 100644 --- a/src/roles/succubus.py +++ b/src/roles/succubus.py @@ -184,7 +184,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): if death_triggers: ALL_SUCC_IDLE = False if len(var.ROLES["succubus"]) == 0: - entranced_alive = ENTRANCED - set(evt.params.deadlist) + entranced_alive = {users._get(x) for x in ENTRANCED}.difference(evt.params.deadlist) # FIXME if ALL_SUCC_IDLE: while ENTRANCED: e = ENTRANCED.pop() @@ -198,7 +198,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): comma = "," for e in entranced_alive: if var.ROLE_REVEAL in ("on", "team"): - role = get_reveal_role(e) + role = get_reveal_role(e.nick) an = "n" if role.startswith(("a", "e", "i", "o", "u")) else "" msg.append("\u0002{0}\u0002, a{1} \u0002{2}\u0002".format(e, an, role)) else: @@ -215,7 +215,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): dlc = list(evt.params.deadlist) dlc.extend(entranced_alive - {e}) debuglog("{0} (succubus) SUCCUBUS DEATH KILL: {1} ({2})".format(user, e, get_role(e))) - evt.params.del_player(user.client, e, end_game=False, killer_role="succubus", + evt.params.del_player(e, end_game=False, killer_role="succubus", deadlist=dlc, original=evt.params.original, ismain=False) evt.data["pl"] = evt.params.refresh_pl(evt.data["pl"]) ENTRANCED_DYING.clear() diff --git a/src/roles/vengefulghost.py b/src/roles/vengefulghost.py index f9838a0..50e01c4 100644 --- a/src/roles/vengefulghost.py +++ b/src/roles/vengefulghost.py @@ -89,7 +89,7 @@ def on_player_win(evt, var, user, role, winner, survived): evt.data["iwon"] = False @event_listener("del_player", priority=6) -def on_del_player(evt, var, user, nickrole, nicktpls, death_triggers): +def on_del_player(evt, var, user, mainrole, allroles, death_triggers): for h, v in list(KILLS.items()): if user is v: h.send(messages["hunter_discard"]) @@ -97,7 +97,7 @@ def on_del_player(evt, var, user, nickrole, nicktpls, death_triggers): # extending VG to work with new teams can be done by registering a listener # at priority < 6, importing src.roles.vengefulghost, and setting # GHOSTS[user] to something; if that is done then this logic is not run. - if death_triggers and nickrole == "vengeful ghost" and user not in GHOSTS: + if death_triggers and mainrole == "vengeful ghost" and user not in GHOSTS: if evt.params.killer_role in var.WOLFTEAM_ROLES: GHOSTS[user] = "wolves" else: diff --git a/src/roles/wildchild.py b/src/roles/wildchild.py index 5539e49..169469d 100644 --- a/src/roles/wildchild.py +++ b/src/roles/wildchild.py @@ -85,7 +85,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers): return for child in get_all_players(("wild child",)): - if child.nick not in IDOLS or child.nick in evt.params.deadlist or IDOLS[child.nick] not in evt.params.deadlist: + if child.nick not in IDOLS or child in evt.params.deadlist or users._get(IDOLS[child.nick]) not in evt.params.deadlist: # FIXME continue # change their main role to wolf, even if wild child was a template