Update event listeners for del_player
This commit is contained in:
parent
39dfd2095f
commit
89cabd933b
@ -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")
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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")
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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):
|
||||
|
@ -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()
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user