Change a bunch of things because we felt like it

* Convert the del_player event
* HAAAAAAAAAAAAAAANDS
* <insert snarky commit message here>
This commit is contained in:
Em Barry 2017-08-30 13:09:31 -04:00 committed by Ryan Schmidt
parent 17688050d6
commit a9067bb8ca
18 changed files with 126 additions and 124 deletions

View File

@ -9,6 +9,7 @@ import botconfig
import src.settings as var
from src.utilities import *
from src.messages import messages
from src.functions import get_players, get_all_players
from src.decorators import handle_error
from src import events, channels, users
@ -1135,25 +1136,25 @@ class SleepyMode(GameMode):
var.DYING.add(self.having_nightmare)
pm(cli, self.having_nightmare, messages["sleepy_nightmare_death"])
def happy_fun_times(self, evt, cli, var, nick, mainrole, allroles, death_triggers):
def happy_fun_times(self, evt, var, user, mainrole, allroles, death_triggers):
if death_triggers:
if mainrole == "priest":
pl = evt.data["pl"]
turn_chance = 3/4
seers = [p for p in var.ROLES["seer"] if p in pl and random.random() < turn_chance]
harlots = [p for p in var.ROLES["harlot"] if p in pl and random.random() < turn_chance]
cultists = [p for p in var.ROLES["cultist"] if p in pl and random.random() < turn_chance]
cli.msg(botconfig.CHANNEL, messages["sleepy_priest_death"])
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]
channels.Main.send(messages["sleepy_priest_death"])
for seer in seers:
change_role(users._get(seer), "seer", "doomsayer") # FIXME
pm(cli, seer, messages["sleepy_doomsayer_turn"])
relay_wolfchat_command(cli, seer, messages["sleepy_doomsayer_wolfchat"].format(seer), var.WOLF_ROLES, is_wolf_command=True, is_kill_command=True)
change_role(seer, "seer", "doomsayer")
seer.send(messages["sleepy_doomsayer_turn"])
relay_wolfchat_command(seer.client, seer.nick, messages["sleepy_doomsayer_wolfchat"].format(seer), var.WOLF_ROLES, is_wolf_command=True, is_kill_command=True)
for harlot in harlots:
change_role(users._get(harlot), "harlot", "succubus") # FIXME
pm(cli, harlot, messages["sleepy_succubus_turn"])
change_role(harlot, "harlot", "succubus")
harlot.send(messages["sleepy_succubus_turn"])
for cultist in cultists:
change_role(users._get(cultist), "cultist", "demoniac") # FIXME
pm(cli, cultist, messages["sleepy_demoniac_turn"])
change_role(cultist, "cultist", "demoniac")
cultist.send(messages["sleepy_demoniac_turn"])
# NOTE: chk_win is called by del_player, don't need to call it here even though this has a chance of ending game
@game_mode("maelstrom", minp = 8, maxp = 24, likelihood = 0)
@ -1189,15 +1190,15 @@ class MaelstromMode(GameMode):
events.remove_listener("del_player", self.on_del_player)
events.remove_listener("join", self.on_join)
def on_del_player(self, evt, cli, var, nick, mainrole, allroles, death_triggers):
if is_fake_nick(nick):
def on_del_player(self, evt, var, user, mainrole, allroles, death_triggers):
if user.is_fake:
return
if not var.DISABLE_ACCOUNTS:
self.DEAD_ACCOUNTS.add(irc_lower(var.USERS[nick]["account"]))
self.DEAD_ACCOUNTS.add(user.lower().account)
if not var.ACCOUNTS_ONLY:
self.DEAD_HOSTS.add(var.USERS[nick]["host"].lower())
self.DEAD_HOSTS.add(user.lower().host)
def on_join(self, evt, var, wrapper, message, forced=False):
if var.PHASE != "day" or (wrapper.public and wrapper.target is not channels.Main):

View File

@ -80,15 +80,14 @@ def on_rename(evt, cli, var, prefix, nick):
PASSED.add(nick)
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
if var.PHASE == "night" and nick in GUARDED:
pm(cli, GUARDED[nick], messages["protector_disappeared"])
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
if var.PHASE == "night" and user.nick in GUARDED:
pm(user.client, GUARDED[user.nick], messages["protector_disappeared"])
for dictvar in (GUARDED, LASTGUARDED):
for k,v in list(dictvar.items()):
if nick in (k, v):
if user.nick in (k, v):
del dictvar[k]
if nick in PASSED:
PASSED.discard(nick)
PASSED.discard(user.nick)
@event_listener("night_acted")
def on_acted(evt, var, nick, sender):

View File

@ -62,12 +62,12 @@ def on_rename(evt, cli, var, prefix, nick):
INVESTIGATED.add(nick)
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
INVESTIGATED.discard(nick)
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
INVESTIGATED.discard(user.nick)
@event_listener("get_special")
def on_get_special(evt, var):
evt.data["special"].update(get_all_players(("detective",)))
evt.data["special"].update(get_players(("detective",)))
@event_listener("exchange_roles")
def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):

View File

@ -87,11 +87,11 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
mapping.pop(nick, None)
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
SEEN.discard(nick)
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
SEEN.discard(user.nick)
for name, dictvar in _mappings:
for k, v in list(dictvar.items()):
if nick == k or nick == v:
if user.nick in (k, v):
del dictvar[k]
@event_listener("doctor_immunize")
@ -104,7 +104,7 @@ def on_doctor_immunize(evt, cli, var, doctor, target):
@event_listener("get_special")
def on_get_special(evt, var):
evt.data["special"].update(get_all_players(("doomsayer",)))
evt.data["special"].update(get_players(("doomsayer",)))
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):

View File

@ -59,16 +59,16 @@ def on_player_win(evt, var, user, role, winner, survived):
evt.data["iwon"] = True
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
for h, v in list(KILLS.items()):
if v.nick == nick:
if v is user:
h.send(messages["hunter_discard"])
del KILLS[h]
elif h.nick == nick:
elif h is user:
del KILLS[h]
if death_triggers and "dullahan" in allroles:
pl = evt.data["pl"]
targets = TARGETS[users._get(nick)].intersection(users._get(x) for x in pl) # FIXME
targets = TARGETS[user].intersection(users._get(x) for x in pl) # FIXME
if targets:
target = random.choice(list(targets))
prots = deque(var.ACTIVE_PROTECTIONS[target.nick])
@ -79,7 +79,7 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
refresh_pl=evt.params.refresh_pl,
message_prefix="dullahan_die_",
source="dullahan",
killer=nick,
killer=user.nick,
killer_mainrole=mainrole,
killer_allroles=allroles,
prots=prots)
@ -87,7 +87,7 @@ def on_del_player(evt, cli, var, nick, 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(cli, var, nick, target.nick, prots[0]):
if not aevt.dispatch(user.client, var, user.nick, target.nick, prots[0]):
evt.data["pl"] = aevt.data["pl"]
if target is not aevt.data["target"]:
target = aevt.data["target"]
@ -101,11 +101,11 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
if var.ROLE_REVEAL in ("on", "team"):
role = get_reveal_role(target)
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
cli.msg(botconfig.CHANNEL, messages["dullahan_die_success"].format(nick, target, an, role))
channels.Main.send(messages["dullahan_die_success"].format(user, target, an, role))
else:
cli.msg(botconfig.CHANNEL, messages["dullahan_die_success_noreveal"].format(nick, 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="dullahan", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False)
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)
evt.data["pl"] = evt.params.refresh_pl(pl)
@event_listener("night_acted")
@ -131,7 +131,7 @@ def on_swap(evt, var, old_user, user):
@event_listener("get_special")
def on_get_special(evt, var):
evt.data["special"].update(get_all_players(("dullahan",)))
evt.data["special"].update(get_players(("dullahan",)))
@event_listener("transition_day", priority=2)
def on_transition_day(evt, cli, var):

View File

@ -138,14 +138,13 @@ def on_begin_day(evt, var):
@event_listener("get_special")
def on_get_special(evt, var):
evt.data["special"].update(get_all_players(("harlot",)))
evt.data["special"].update(get_players(("harlot",)))
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
if "harlot" not in allroles:
return
if nick in VISITED:
del VISITED[nick]
VISITED.pop(user.nick, None)
@event_listener("rename_player")
def on_rename(evt, cli, var, prefix, nick):

View File

@ -70,8 +70,7 @@ def hunter_pass(var, wrapper, message):
chk_nightdone(wrapper.client)
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
user = users._get(nick) # FIXME
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
HUNTERS.discard(user)
PASSED.discard(user)
KILLS.pop(user, None)
@ -102,7 +101,7 @@ def on_acted(evt, var, nick, sender):
@event_listener("get_special")
def on_get_special(evt, var):
evt.data["special"].update(get_all_players(("hunter",)))
evt.data["special"].update(get_players(("hunter",)))
@event_listener("transition_day", priority=2)
def on_transition_day(evt, cli, var):

View File

@ -48,12 +48,12 @@ def _get_targets(var, pl, nick):
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
if not death_triggers or "mad scientist" not in allroles:
return
pl = evt.data["pl"]
target1, target2 = _get_targets(var, pl, nick)
target1, target2 = _get_targets(var, pl, user.nick)
# apply protections (if applicable)
prots1 = deque(var.ACTIVE_PROTECTIONS[target1.nick])
@ -68,13 +68,13 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
refresh_pl=evt.params.refresh_pl,
message_prefix="mad_scientist_fail_",
source="mad scientist",
killer=nick,
killer=user.nick,
killer_mainrole=mainrole,
killer_allroles=allroles,
prots=prots1)
while len(prots1) > 0:
# events may be able to cancel this kill
if not aevt.dispatch(cli, var, nick, target1.nick, prots1[0]):
if not aevt.dispatch(user.client, var, user.nick, target1.nick, 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, cli, var, nick, mainrole, allroles, death_triggers):
aevt.params.prots = prots2
while len(prots2) > 0:
# events may be able to cancel this kill
if not aevt.dispatch(cli, var, nick, target2.nick, prots2[0]):
if not aevt.dispatch(user.client, var, user.nick, target2.nick, prots2[0]):
pl = aevt.data["pl"]
if target2 is not aevt.data["target"]:
target2 = aevt.data["target"]
@ -107,46 +107,46 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
an1 = "n" if r1.startswith(("a", "e", "i", "o", "u")) else ""
r2 = get_reveal_role(target2.nick)
an2 = "n" if r2.startswith(("a", "e", "i", "o", "u")) else ""
tmsg = messages["mad_scientist_kill"].format(nick, target1, an1, r1, target2, an2, r2)
tmsg = messages["mad_scientist_kill"].format(user, target1, an1, r1, target2, an2, r2)
else:
tmsg = messages["mad_scientist_kill_no_reveal"].format(nick, target1, target2)
cli.msg(botconfig.CHANNEL, tmsg)
debuglog(nick, "(mad scientist) KILL: {0} ({1}) - {2} ({3})".format(target1, get_role(target1.nick), target2, get_role(target2.nick)))
tmsg = messages["mad_scientist_kill_no_reveal"].format(user, target1, target2)
channels.Main.send(tmsg)
debuglog(user.nick, "(mad scientist) KILL: {0} ({1}) - {2} ({3})".format(target1, get_role(target1.nick), target2, get_role(target2.nick)))
# here we DO want to tell that the other one is dying already so chained deaths don't mess things up
deadlist1 = evt.params.deadlist[:]
deadlist1.append(target2.nick)
deadlist2 = evt.params.deadlist[:]
deadlist2.append(target1.nick)
evt.params.del_player(cli, target1.nick, True, end_game=False, killer_role="mad scientist", deadlist=deadlist1, original=evt.params.original, ismain=False)
evt.params.del_player(cli, target2.nick, True, end_game=False, killer_role="mad scientist", deadlist=deadlist2, original=evt.params.original, ismain=False)
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)
pl = evt.params.refresh_pl(pl)
else:
if var.ROLE_REVEAL in ("on", "team"):
r1 = get_reveal_role(target1.nick)
an1 = "n" if r1.startswith(("a", "e", "i", "o", "u")) else ""
tmsg = messages["mad_scientist_kill_single"].format(nick, target1, an1, r1)
tmsg = messages["mad_scientist_kill_single"].format(user, target1, an1, r1)
else:
tmsg = messages["mad_scientist_kill_single_no_reveal"].format(nick, target1)
cli.msg(botconfig.CHANNEL, tmsg)
debuglog(nick, "(mad scientist) KILL: {0} ({1})".format(target1, get_role(target1.nick)))
evt.params.del_player(cli, target1.nick, True, end_game=False, killer_role="mad scientist", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False)
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)
pl = evt.params.refresh_pl(pl)
else:
if kill2:
if var.ROLE_REVEAL in ("on", "team"):
r2 = get_reveal_role(target2.nick)
an2 = "n" if r2.startswith(("a", "e", "i", "o", "u")) else ""
tmsg = messages["mad_scientist_kill_single"].format(nick, target2, an2, r2)
tmsg = messages["mad_scientist_kill_single"].format(user, target2, an2, r2)
else:
tmsg = messages["mad_scientist_kill_single_no_reveal"].format(nick, target2)
cli.msg(botconfig.CHANNEL, tmsg)
debuglog(nick, "(mad scientist) KILL: {0} ({1})".format(target2, get_role(target2.nick)))
evt.params.del_player(cli, target2.nick, True, end_game=False, killer_role="mad scientist", deadlist=evt.params.deadlist, original=evt.params.original, ismain=False)
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)
pl = evt.params.refresh_pl(pl)
else:
tmsg = messages["mad_scientist_fail"].format(nick)
cli.msg(botconfig.CHANNEL, tmsg)
debuglog(nick, "(mad scientist) KILL FAIL")
tmsg = messages["mad_scientist_fail"].format(user)
channels.Main.send(tmsg)
debuglog(user.nick, "(mad scientist) KILL FAIL")
evt.data["pl"] = pl

View File

@ -67,6 +67,6 @@ def on_transition_night_end(evt, var):
@event_listener("get_special")
def on_get_special(evt, var):
# mystics count as special even though they don't have any commands
evt.data["special"].update(get_all_players(("mystic",)))
evt.data["special"].update(get_players(("mystic",)))
# vim: set sw=4 expandtab:

View File

@ -82,8 +82,8 @@ def on_rename(evt, cli, var, prefix, nick):
SEEN.add(nick)
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
SEEN.discard(nick)
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
SEEN.discard(user.nick)
@event_listener("night_acted")
def on_acted(evt, var, nick, sender):

View File

@ -136,9 +136,9 @@ def on_see(evt, cli, var, nick, victim):
evt.data["role"] = "wolf"
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
for a,(b,c) in list(SHAMANS.items()):
if nick in (a, b, c):
if user.nick in (a, b, c):
del SHAMANS[a]
@event_listener("night_acted")

View File

@ -164,18 +164,18 @@ def on_can_exchange(evt, var, actor, nick):
evt.stop_processing = True
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
global ALL_SUCC_IDLE
if "succubus" not in allroles:
return
if nick in VISITED:
if user.nick in VISITED:
# if it's night, also unentrance the person they visited
if var.PHASE == "night" and var.GAMEPHASE == "night":
if VISITED[nick] in ENTRANCED:
ENTRANCED.discard(visited[nick])
ENTRANCED_DYING.discard(visited[nick])
pm(cli, VISITED[nick], messages["entranced_revert_win"])
del VISITED[nick]
if VISITED[user.nick] in ENTRANCED:
ENTRANCED.discard(VISITED[user.nick])
ENTRANCED_DYING.discard(VISITED[user.nick])
pm(user.client, VISITED[user.nick], messages["entranced_revert_win"])
del VISITED[user.nick]
# if all succubi are dead, one of two things happen:
# 1. if all succubi idled out (every last one of them), un-entrance people
@ -188,7 +188,7 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
if ALL_SUCC_IDLE:
while ENTRANCED:
e = ENTRANCED.pop()
pm(cli, e, messages["entranced_revert_win"])
pm(user.client, e, messages["entranced_revert_win"])
elif entranced_alive:
msg = []
# Run in two loops so we can play the message for everyone dying at once before we actually
@ -204,18 +204,18 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
else:
msg.append("\u0002{0}\u0002".format(e))
if len(msg) == 1:
cli.msg(botconfig.CHANNEL, messages["succubus_die_kill"].format(msg[0] + comma))
channels.Main.send(messages["succubus_die_kill"].format(msg[0] + comma))
elif len(msg) == 2:
cli.msg(botconfig.CHANNEL, messages["succubus_die_kill"].format(msg[0] + comma + " and " + msg[1] + comma))
channels.Main.send(messages["succubus_die_kill"].format(msg[0] + comma + " and " + msg[1] + comma))
else:
cli.msg(botconfig.CHANNEL, messages["succubus_die_kill"].format(", ".join(msg[:-1]) + ", and " + msg[-1] + comma))
channels.Main.send(messages["succubus_die_kill"].format(", ".join(msg[:-1]) + ", and " + msg[-1] + comma))
for e in entranced_alive:
# to ensure we do not double-kill someone, notify all child deaths that we'll be
# killing off everyone else that is entranced so they don't need to bother
dlc = list(evt.params.deadlist)
dlc.extend(entranced_alive - {e})
debuglog("{0} (succubus) SUCCUBUS DEATH KILL: {1} ({2})".format(nick, e, get_role(e)))
evt.params.del_player(cli, e, end_game=False, killer_role="succubus",
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",
deadlist=dlc, original=evt.params.original, ismain=False)
evt.data["pl"] = evt.params.refresh_pl(evt.data["pl"])
ENTRANCED_DYING.clear()
@ -299,7 +299,7 @@ def on_transition_day(evt, cli, var):
@event_listener("get_special")
def on_get_special(evt, var):
evt.data["special"].update(get_all_players(("succubus",)))
evt.data["special"].update(get_players(("succubus",)))
@event_listener("vg_kill")
def on_vg_kill(evt, var, ghost, target):

View File

@ -89,22 +89,21 @@ 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, cli, var, nick, nickrole, nicktpls, death_triggers):
def on_del_player(evt, var, user, nickrole, nicktpls, death_triggers):
for h,v in list(KILLS.items()):
if v == nick:
pm(cli, h, messages["hunter_discard"])
if v == user.nick:
pm(user.client, h, messages["hunter_discard"])
del KILLS[h]
# 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.
user = users._get(nick) # FIXME
if death_triggers and nickrole == "vengeful ghost" and user not in GHOSTS:
if evt.params.killer_role in var.WOLFTEAM_ROLES:
GHOSTS[user] = "wolves"
else:
GHOSTS[user] = "villagers"
user.send(messages["vengeful_turn"].format(GHOSTS[user]))
debuglog(nick, "(vengeful ghost) TRIGGER", GHOSTS[user])
debuglog(user.nick, "(vengeful ghost) TRIGGER", GHOSTS[user])
@event_listener("rename_player")
def on_rename(evt, cli, var, prefix, nick):

View File

@ -62,13 +62,13 @@ def vigilante_pass(cli, nick, chan, rest):
chk_nightdone(cli)
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
PASSED.discard(nick)
if nick in KILLS:
del KILLS[nick]
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
PASSED.discard(user.nick)
if user.nick in KILLS:
del KILLS[user.nick]
for h,v in list(KILLS.items()):
if v == nick:
pm(cli, h, messages["hunter_discard"])
if v == user.nick:
pm(user.client, h, messages["hunter_discard"])
del KILLS[h]
@event_listener("rename_player")
@ -94,7 +94,7 @@ def on_acted(evt, var, nick, sender):
@event_listener("get_special")
def on_get_special(evt, var):
evt.data["special"].update(get_all_players(("vigilante",)))
evt.data["special"].update(get_players(("vigilante",)))
@event_listener("transition_day", priority=2)
def on_transition_day(evt, cli, var):

View File

@ -4,7 +4,7 @@ import re
import src.settings as var
from src.utilities import *
from src import users, debuglog, errlog, plog
from src.functions import get_players, get_all_players
from src.functions import get_players, get_all_players, get_main_role
from src.decorators import cmd, event_listener
from src.messages import messages
from src.events import Event
@ -82,19 +82,19 @@ def on_myrole(evt, cli, var, nick):
evt.data["messages"].append(messages["wild_child_idol"].format(IDOLS[nick]))
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
if var.PHASE not in var.GAME_PHASES:
return
for child in var.ROLES["wild child"].copy():
if child not in IDOLS or child in evt.params.deadlist or IDOLS[child] not in evt.params.deadlist:
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:
continue
# change their main role to wolf, even if wild child was a template
pm(cli, child, messages["idol_died"])
WILD_CHILDREN.add(child)
change_role(users._get(child), get_role(child), "wolf") # FIXME
var.ROLES["wild child"].discard(child)
child.send(messages["idol_died"])
WILD_CHILDREN.add(child.nick)
change_role(child, get_main_role(child), "wolf")
var.ROLES["wild child"].discard(child.nick)
wcroles = var.WOLFCHAT_ROLES
if var.RESTRICT_WOLFCHAT & var.RW_REM_NON_WOLVES:
@ -102,22 +102,26 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
wcroles = var.WOLF_ROLES
else:
wcroles = var.WOLF_ROLES | {"traitor"}
wolves = list_players(wcroles)
wolves = get_players(wcroles)
wolves.remove(child)
mass_privmsg(cli, wolves, messages["wild_child_as_wolf"].format(child))
if wolves:
for wolf in wolves:
wolf.queue_message(messages["wild_child_as_wolf"].format(child))
wolf.send_messages()
if var.PHASE == "day":
random.shuffle(wolves)
new = []
for i, wolf in enumerate(wolves):
wolfroles = get_role(wolf)
wolfroles = get_main_role(wolf)
cursed = ""
if wolf in var.ROLES["cursed villager"]:
if wolf in get_all_players(("cursed villager",)):
cursed = "cursed "
wolves[i] = "\u0002{0}\u0002 ({1}{2})".format(wolf, cursed, wolfroles)
new.append("\u0002{0}\u0002 ({1}{2})".format(wolf, cursed, wolfroles))
if wolves:
pm(cli, child, "Wolves: " + ", ".join(wolves))
if new:
child.send("Wolves: " + ", ".join(new))
else:
pm(cli, child, messages["no_other_wolves"])
child.send(messages["no_other_wolves"])
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):

View File

@ -109,7 +109,7 @@ def wolf_retract(cli, nick, chan, rest):
relay_wolfchat_command(cli, nick, messages["wolfchat_no_bite"].format(nick), ("alpha wolf",), is_wolf_command=True)
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
if death_triggers:
# TODO: split into alpha
if allroles & var.WOLF_ROLES:
@ -117,9 +117,9 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
for a,b in list(KILLS.items()):
for n in b:
if n == nick:
KILLS[a].remove(nick)
if a == nick or len(KILLS[a]) == 0:
if n == user.nick:
KILLS[a].remove(user.nick)
if a == user.nick or len(KILLS[a]) == 0:
del KILLS[a]
@event_listener("rename_player")

View File

@ -20,7 +20,7 @@ def on_wolf_numkills(evt, var):
evt.data["numkills"] = max(evt.data["numkills"], 2)
@event_listener("del_player")
def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers):
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
if death_triggers and "wolf cub" in allroles:
global ANGRY_WOLVES
ANGRY_WOLVES = True

View File

@ -2584,11 +2584,12 @@ def del_player(cli, nick, forced_death=False, devoice=True, end_game=True, death
pl = refresh_pl(pl)
# i herd u liek parameters
evt_death_triggers = death_triggers and var.PHASE in var.GAME_PHASES
user = users._get(nick) # FIXME
event = Event("del_player", {"pl": pl},
forced_death=forced_death, end_game=end_game,
deadlist=deadlist, original=original, killer_role=killer_role,
ismain=ismain, refresh_pl=refresh_pl, del_player=del_player)
event.dispatch(cli, var, nick, nickrole, allroles, evt_death_triggers)
event.dispatch(var, user, nickrole, allroles, evt_death_triggers)
# update var.ROLE_STATS
# Event priorities: