Fix wolf cub not working
The dead player is already removed from var.ROLES by the time the event fires. Also, tweak del_player event to make it much easier to support arbitrary roles as not being the player's main role by changing nicktpls to allroles (which is a set that includes mainrole). The assassinate event is similarly tweaked.
This commit is contained in:
parent
c0aa797342
commit
c4282bd237
@ -79,7 +79,7 @@ def on_rename(evt, cli, var, prefix, nick):
|
|||||||
PASSED.add(nick)
|
PASSED.add(nick)
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
if var.PHASE == "night" and nick in GUARDED:
|
if var.PHASE == "night" and nick in GUARDED:
|
||||||
pm(cli, GUARDED[nick], messages["protector_disappeared"])
|
pm(cli, GUARDED[nick], messages["protector_disappeared"])
|
||||||
for dictvar in (GUARDED, LASTGUARDED):
|
for dictvar in (GUARDED, LASTGUARDED):
|
||||||
|
@ -61,7 +61,7 @@ def on_rename(evt, cli, var, prefix, nick):
|
|||||||
INVESTIGATED.add(nick)
|
INVESTIGATED.add(nick)
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
INVESTIGATED.discard(nick)
|
INVESTIGATED.discard(nick)
|
||||||
|
|
||||||
@event_listener("get_special")
|
@event_listener("get_special")
|
||||||
|
@ -86,7 +86,7 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
|
|||||||
mapping.pop(nick, None)
|
mapping.pop(nick, None)
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
SEEN.discard(nick)
|
SEEN.discard(nick)
|
||||||
for name, dictvar in _mappings:
|
for name, dictvar in _mappings:
|
||||||
for k, v in list(dictvar.items()):
|
for k, v in list(dictvar.items()):
|
||||||
|
@ -59,14 +59,14 @@ def on_player_win(evt, var, user, role, winner, survived):
|
|||||||
evt.data["iwon"] = True
|
evt.data["iwon"] = True
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
for h, v in list(KILLS.items()):
|
for h, v in list(KILLS.items()):
|
||||||
if v.nick == nick:
|
if v.nick == nick:
|
||||||
h.send(messages["hunter_discard"])
|
h.send(messages["hunter_discard"])
|
||||||
del KILLS[h]
|
del KILLS[h]
|
||||||
elif h.nick == nick:
|
elif h.nick == nick:
|
||||||
del KILLS[h]
|
del KILLS[h]
|
||||||
if death_triggers and nickrole == "dullahan":
|
if death_triggers and "dullahan" in allroles:
|
||||||
pl = evt.data["pl"]
|
pl = evt.data["pl"]
|
||||||
targets = TARGETS[users._get(nick)].intersection(users._get(x) for x in pl) # FIXME
|
targets = TARGETS[users._get(nick)].intersection(users._get(x) for x in pl) # FIXME
|
||||||
if targets:
|
if targets:
|
||||||
@ -78,8 +78,8 @@ def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
|||||||
original=evt.params.original,
|
original=evt.params.original,
|
||||||
refresh_pl=evt.params.refresh_pl,
|
refresh_pl=evt.params.refresh_pl,
|
||||||
message_prefix="dullahan_die_",
|
message_prefix="dullahan_die_",
|
||||||
nickrole=nickrole,
|
killer_mainrole=mainrole,
|
||||||
nicktpls=nicktpls,
|
killer_allroles=allroles,
|
||||||
prots=prots)
|
prots=prots)
|
||||||
while len(prots) > 0:
|
while len(prots) > 0:
|
||||||
# an event can read the current active protection and cancel the totem
|
# an event can read the current active protection and cancel the totem
|
||||||
@ -95,8 +95,8 @@ def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
|||||||
cli.msg(botconfig.CHANNEL, messages["dullahan_die_success"].format(nick, target, an, role))
|
cli.msg(botconfig.CHANNEL, messages["dullahan_die_success"].format(nick, target, an, role))
|
||||||
else:
|
else:
|
||||||
cli.msg(botconfig.CHANNEL, messages["dullahan_die_success_noreveal"].format(nick, target))
|
cli.msg(botconfig.CHANNEL, messages["dullahan_die_success_noreveal"].format(nick, target))
|
||||||
debuglog("{0} ({1}) DULLAHAN ASSASSINATE: {2} ({3})".format(nick, nickrole, target, get_role(target)))
|
debuglog("{0} (dullahan) DULLAHAN ASSASSINATE: {1} ({2})".format(nick, target, get_role(target)))
|
||||||
evt.params.del_player(cli, target, True, end_game=False, killer_role=nickrole, deadlist=evt.params.deadlist, original=evt.params.original, ismain=False)
|
evt.params.del_player(cli, target, 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)
|
evt.data["pl"] = evt.params.refresh_pl(pl)
|
||||||
|
|
||||||
@event_listener("night_acted")
|
@event_listener("night_acted")
|
||||||
|
@ -141,8 +141,8 @@ def on_get_special(evt, cli, var):
|
|||||||
evt.data["special"].update(var.ROLES["harlot"])
|
evt.data["special"].update(var.ROLES["harlot"])
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
if nickrole != "harlot":
|
if "harlot" not in allroles:
|
||||||
return
|
return
|
||||||
if nick in VISITED:
|
if nick in VISITED:
|
||||||
del VISITED[nick]
|
del VISITED[nick]
|
||||||
|
@ -70,7 +70,7 @@ def hunter_pass(cli, nick, chan, rest):
|
|||||||
chk_nightdone(cli)
|
chk_nightdone(cli)
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
HUNTERS.discard(nick)
|
HUNTERS.discard(nick)
|
||||||
PASSED.discard(nick)
|
PASSED.discard(nick)
|
||||||
if nick in KILLS:
|
if nick in KILLS:
|
||||||
|
@ -81,7 +81,7 @@ def on_rename(evt, cli, var, prefix, nick):
|
|||||||
SEEN.add(nick)
|
SEEN.add(nick)
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
SEEN.discard(nick)
|
SEEN.discard(nick)
|
||||||
|
|
||||||
@event_listener("night_acted")
|
@event_listener("night_acted")
|
||||||
|
@ -135,7 +135,7 @@ def on_see(evt, cli, var, nick, victim):
|
|||||||
evt.data["role"] = "wolf"
|
evt.data["role"] = "wolf"
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
for a,(b,c) in list(SHAMANS.items()):
|
for a,(b,c) in list(SHAMANS.items()):
|
||||||
if nick in (a, b, c):
|
if nick in (a, b, c):
|
||||||
del SHAMANS[a]
|
del SHAMANS[a]
|
||||||
|
@ -163,9 +163,9 @@ def on_can_exchange(evt, var, actor, nick):
|
|||||||
evt.stop_processing = True
|
evt.stop_processing = True
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
global ALL_SUCC_IDLE
|
global ALL_SUCC_IDLE
|
||||||
if nickrole != "succubus":
|
if "succubus" not in allroles:
|
||||||
return
|
return
|
||||||
if nick in VISITED:
|
if nick in VISITED:
|
||||||
# if it's night, also unentrance the person they visited
|
# if it's night, also unentrance the person they visited
|
||||||
|
@ -61,7 +61,7 @@ def vigilante_pass(cli, nick, chan, rest):
|
|||||||
chk_nightdone(cli)
|
chk_nightdone(cli)
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
PASSED.discard(nick)
|
PASSED.discard(nick)
|
||||||
if nick in KILLS:
|
if nick in KILLS:
|
||||||
del KILLS[nick]
|
del KILLS[nick]
|
||||||
|
@ -81,7 +81,7 @@ def on_myrole(evt, cli, var, nick):
|
|||||||
evt.data["messages"].append(messages["wild_child_idol"].format(IDOLS[nick]))
|
evt.data["messages"].append(messages["wild_child_idol"].format(IDOLS[nick]))
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
if var.PHASE not in var.GAME_PHASES:
|
if var.PHASE not in var.GAME_PHASES:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -96,13 +96,13 @@ def wolf_retract(cli, nick, chan, rest):
|
|||||||
relay_wolfchat_command(cli, nick, messages["wolfchat_no_bite"].format(nick), ("alpha wolf",), is_wolf_command=True)
|
relay_wolfchat_command(cli, nick, messages["wolfchat_no_bite"].format(nick), ("alpha wolf",), is_wolf_command=True)
|
||||||
|
|
||||||
@event_listener("del_player")
|
@event_listener("del_player")
|
||||||
def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers):
|
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
|
||||||
if death_triggers:
|
if death_triggers:
|
||||||
# TODO: split into cub
|
# TODO: split into cub
|
||||||
if nick in var.ROLES["wolf cub"]:
|
if "wolf cub" in allroles:
|
||||||
var.ANGRY_WOLVES = True
|
var.ANGRY_WOLVES = True
|
||||||
# TODO: split into alpha
|
# TODO: split into alpha
|
||||||
if nickrole in var.WOLF_ROLES:
|
if allroles & var.WOLF_ROLES:
|
||||||
var.ALPHA_ENABLED = True
|
var.ALPHA_ENABLED = True
|
||||||
|
|
||||||
for a,b in list(KILLS.items()):
|
for a,b in list(KILLS.items()):
|
||||||
|
@ -2393,6 +2393,7 @@ def del_player(cli, nick, forced_death=False, devoice=True, end_game=True, death
|
|||||||
nickrole = get_role(nick)
|
nickrole = get_role(nick)
|
||||||
nickreveal = get_reveal_role(nick)
|
nickreveal = get_reveal_role(nick)
|
||||||
nicktpls = get_templates(nick)
|
nicktpls = get_templates(nick)
|
||||||
|
allroles = {nickrole} | set(nicktpls)
|
||||||
del var.MAIN_ROLES[users._get(nick)] # FIXME
|
del var.MAIN_ROLES[users._get(nick)] # FIXME
|
||||||
var.ROLES[nickrole].remove(nick)
|
var.ROLES[nickrole].remove(nick)
|
||||||
for t in nicktpls:
|
for t in nicktpls:
|
||||||
@ -2493,8 +2494,8 @@ def del_player(cli, nick, forced_death=False, devoice=True, end_game=True, death
|
|||||||
original=original,
|
original=original,
|
||||||
refresh_pl=refresh_pl,
|
refresh_pl=refresh_pl,
|
||||||
message_prefix="assassin_fail_",
|
message_prefix="assassin_fail_",
|
||||||
nickrole=nickrole,
|
killer_mainrole=nickrole,
|
||||||
nicktpls=nicktpls,
|
killer_allroles=allroles,
|
||||||
prots=prots)
|
prots=prots)
|
||||||
while len(prots) > 0:
|
while len(prots) > 0:
|
||||||
# an event can read the current active protection and cancel the assassination
|
# an event can read the current active protection and cancel the assassination
|
||||||
@ -2653,7 +2654,7 @@ def del_player(cli, nick, forced_death=False, devoice=True, end_game=True, death
|
|||||||
forced_death=forced_death, end_game=end_game,
|
forced_death=forced_death, end_game=end_game,
|
||||||
deadlist=deadlist, original=original, killer_role=killer_role,
|
deadlist=deadlist, original=original, killer_role=killer_role,
|
||||||
ismain=ismain, refresh_pl=refresh_pl, del_player=del_player)
|
ismain=ismain, refresh_pl=refresh_pl, del_player=del_player)
|
||||||
event.dispatch(cli, var, nick, nickrole, nicktpls, evt_death_triggers)
|
event.dispatch(cli, var, nick, nickrole, allroles, evt_death_triggers)
|
||||||
|
|
||||||
# update var.ROLE_STATS
|
# update var.ROLE_STATS
|
||||||
# Event priorities:
|
# Event priorities:
|
||||||
|
Loading…
Reference in New Issue
Block a user