Update the chk_nightdone function and event

This commit is contained in:
Vgr E. Barry 2017-09-04 13:56:33 -04:00
parent a5c3f0694c
commit 516d1d0c8c
14 changed files with 40 additions and 39 deletions

View File

@ -210,9 +210,9 @@ class VillagergameMode(GameMode):
else:
evt.data["winner"] = None
def chk_nightdone(self, evt, cli, var):
def chk_nightdone(self, evt, var):
transition_day = evt.data["transition_day"]
evt.data["transition_day"] = lambda cli2, gameid=0: self.prolong_night(cli2, var, gameid, transition_day)
evt.data["transition_day"] = lambda cli, gameid=0: self.prolong_night(cli, var, gameid, transition_day)
def prolong_night(self, cli, var, gameid, transition_day):
nspecials = len(var.ROLES["seer"] | var.ROLES["harlot"] | var.ROLES["shaman"] | var.ROLES["crazed shaman"])
@ -1126,7 +1126,7 @@ class SleepyMode(GameMode):
pm(cli, self.having_nightmare, messages["sleepy_nightmare_restart"])
self.nightmare_step(cli)
def prolong_night(self, evt, cli, var):
def prolong_night(self, evt, var):
if self.having_nightmare is not None:
evt.data["actedcount"] = -1

View File

@ -112,9 +112,9 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
del LASTGUARDED[nick]
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(GUARDED) + len(PASSED)
evt.data["nightroles"].extend(list_players(("guardian angel", "bodyguard")))
evt.data["nightroles"].extend(get_players(("guardian angel", "bodyguard")))
@event_listener("transition_day", priority=4.2)
def on_transition_day(evt, cli, var):

View File

@ -107,9 +107,9 @@ def on_get_special(evt, var):
evt.data["special"].update(get_players(("doomsayer",)))
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(SEEN)
evt.data["nightroles"].extend(get_roles("doomsayer"))
evt.data["nightroles"].extend(get_all_players(("doomsayer",)))
@event_listener("abstain")
def on_abstain(evt, cli, var, nick):

View File

@ -154,7 +154,7 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
TARGET[users._get(actor)] = TARGETS.pop(k) - {users._get(actor)} # FIXME
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
spl = set(get_players())
evt.data["actedcount"] += len(KILLS)
for dullahan, targets in TARGETS.items():

View File

@ -104,9 +104,9 @@ def on_night_acted(evt, var, user, actor):
evt.data["acted"] = True
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(VISITED)
evt.data["nightroles"].extend(var.ROLES["harlot"])
evt.data["nightroles"].extend(get_all_players(("harlot",)))
@event_listener("exchange_roles")
def on_exchange_roles(evt, cli, var, actor, nick, actor_role, nick_role):

View File

@ -124,9 +124,9 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
PASSED.discard(target)
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(KILLS) + len(PASSED)
hunter_users = (users._get(p) for p in var.ROLES["hunter"]) # FIXME
hunter_users = get_all_players(("hunter",))
evt.data["nightroles"].extend([p for p in hunter_users if p not in HUNTERS or p in KILLS])
@event_listener("transition_night_end", priority=2)

View File

@ -5,7 +5,7 @@ import src.settings as var
from src.utilities import *
from src import debuglog, errlog, plog
from src.decorators import cmd, event_listener
from src.functions import get_players, get_main_role
from src.functions import get_players, get_all_players, get_main_role
from src.messages import messages
from src.events import Event
@ -100,9 +100,9 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
SEEN.discard(actor)
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(SEEN)
evt.data["nightroles"].extend(get_roles("seer", "oracle", "augur"))
evt.data["nightroles"].extend(get_all_players(("seer", "oracle", "augur")))
@event_listener("transition_night_end", priority=2)
def on_transition_night_end(evt, var):

View File

@ -176,9 +176,9 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
TOTEMS[nick] = actor_totem
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(SHAMANS)
evt.data["nightroles"].extend(list_players(var.TOTEM_ORDER))
evt.data["nightroles"].extend(get_players(var.TOTEM_ORDER))
@event_listener("get_voters")
def on_get_voters(evt, var):

View File

@ -251,9 +251,9 @@ def on_night_acted(evt, var, user, actor):
evt.data["acted"] = True
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(VISITED)
evt.data["nightroles"].extend(var.ROLES["succubus"])
evt.data["nightroles"].extend(get_all_players(("succubus",)))
@event_listener("targeted_command")
def on_targeted_command(evt, cli, var, cmd, actor, orig_target, tags):

View File

@ -184,9 +184,9 @@ def on_get_participant_role(evt, var, user):
evt.data["role"] = "villager"
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(KILLS)
evt.data["nightroles"].extend([p.nick for p in GHOSTS if GHOSTS[p][0] != "!"])
evt.data["nightroles"].extend([p for p in GHOSTS if GHOSTS[p][0] != "!"])
@event_listener("transition_night_end", priority=2)
def on_transition_night_end(evt, var):

View File

@ -118,9 +118,9 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
PASSED.discard(nick)
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(KILLS) + len(PASSED)
evt.data["nightroles"].extend(get_roles("vigilante"))
evt.data["nightroles"].extend(get_all_players(("vigilante",)))
@event_listener("transition_night_end", priority=2)
def on_transition_night_end(evt, var):

View File

@ -124,10 +124,10 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
child.send(messages["no_other_wolves"])
@event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
if var.FIRST_NIGHT:
evt.data["actedcount"] += len(IDOLS.keys())
evt.data["nightroles"].extend(var.ROLES["wild child"])
evt.data["nightroles"].extend(get_all_players(("wild child",)))
@event_listener("transition_day_begin")
def on_transition_day_begin(evt, cli, var):

View File

@ -289,13 +289,13 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
del KILLS[nick]
@event_listener("chk_nightdone", priority=3)
def on_chk_nightdone(evt, cli, var):
def on_chk_nightdone(evt, var):
if not var.DISEASED_WOLVES:
evt.data["actedcount"] += len(KILLS)
evt.data["nightroles"].extend(list_players(CAN_KILL))
evt.data["nightroles"].extend(get_players(CAN_KILL))
@event_listener("chk_nightdone", priority=20)
def on_chk_nightdone2(evt, cli, var):
def on_chk_nightdone2(evt, var):
if not evt.prevent_default:
nevt = Event("wolf_numkills", {"numkills": 1})
nevt.dispatch(var)

View File

@ -49,7 +49,7 @@ import src.settings as var
from src.utilities import *
from src import db, events, dispatcher, channels, users, hooks, logger, proxy, debuglog, errlog, plog
from src.decorators import command, cmd, hook, handle_error, event_listener, COMMANDS
from src.functions import get_players, get_participants, get_main_role
from src.functions import get_players, get_all_players, get_participants, get_main_role
from src.messages import messages
from src.warnings import *
from src.context import IRCContext
@ -3850,12 +3850,12 @@ def chk_nightdone(cli):
if var.PHASE != "night":
return
pl = list_players()
pl = get_players()
spl = set(pl)
actedcount = sum(map(len, (var.PASSED, var.OBSERVED,
var.HEXED, var.CURSED, var.CHARMERS)))
nightroles = get_roles("sorcerer", "hag", "warlock", "werecrow", "piper", "prophet")
nightroles = list(get_all_players(("sorcerer", "hag", "warlock", "werecrow", "piper", "prophet")))
for nick, info in var.PRAYED.items():
if info[0] > 0:
@ -3863,31 +3863,32 @@ def chk_nightdone(cli):
if var.FIRST_NIGHT:
actedcount += len(var.MATCHMAKERS | var.CLONED.keys())
nightroles.extend(get_roles("matchmaker", "clone"))
nightroles.extend(get_all_players(("matchmaker", "clone")))
if var.ALPHA_ENABLED:
# alphas both kill and bite if they're activated at night, so add them into the counts
nightroles.extend(get_roles("alpha wolf"))
nightroles.extend(get_all_players(("alpha wolf",)))
actedcount += len([p for p in var.ALPHA_WOLVES if p in var.ROLES["alpha wolf"]])
# add in turncoats who should be able to act -- if they passed they're already in var.PASSED
# but if they can act they're in var.TURNCOATS where the second tuple item is the current night
# (if said tuple item is the previous night, then they are not allowed to act tonight)
for tc, tu in var.TURNCOATS.items():
if tc not in pl:
user = users._get(tc) # FIXME
if user not in pl:
continue
if tu[1] == var.NIGHT_COUNT:
nightroles.append(tc)
nightroles.append(user)
actedcount += 1
elif tu[1] < var.NIGHT_COUNT - 1:
nightroles.append(tc)
nightroles.append(user)
event = Event("chk_nightdone", {"actedcount": actedcount, "nightroles": nightroles, "transition_day": transition_day})
event.dispatch(cli, var)
event.dispatch(var)
actedcount = event.data["actedcount"]
# remove all instances of their name if they are silenced (makes implementing the event easier)
nightroles = [p for p in nightroles if p not in var.SILENCED]
# remove all instances of them if they are silenced (makes implementing the event easier)
nightroles = [p for p in nightroles if p.nick not in var.SILENCED]
if var.PHASE == "night" and actedcount >= len(nightroles):
if not event.prevent_default: