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: else:
evt.data["winner"] = None evt.data["winner"] = None
def chk_nightdone(self, evt, cli, var): def chk_nightdone(self, evt, var):
transition_day = evt.data["transition_day"] 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): def prolong_night(self, cli, var, gameid, transition_day):
nspecials = len(var.ROLES["seer"] | var.ROLES["harlot"] | var.ROLES["shaman"] | var.ROLES["crazed shaman"]) 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"]) pm(cli, self.having_nightmare, messages["sleepy_nightmare_restart"])
self.nightmare_step(cli) self.nightmare_step(cli)
def prolong_night(self, evt, cli, var): def prolong_night(self, evt, var):
if self.having_nightmare is not None: if self.having_nightmare is not None:
evt.data["actedcount"] = -1 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] del LASTGUARDED[nick]
@event_listener("chk_nightdone") @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["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) @event_listener("transition_day", priority=4.2)
def on_transition_day(evt, cli, var): 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",))) evt.data["special"].update(get_players(("doomsayer",)))
@event_listener("chk_nightdone") @event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(SEEN) evt.data["actedcount"] += len(SEEN)
evt.data["nightroles"].extend(get_roles("doomsayer")) evt.data["nightroles"].extend(get_all_players(("doomsayer",)))
@event_listener("abstain") @event_listener("abstain")
def on_abstain(evt, cli, var, nick): 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 TARGET[users._get(actor)] = TARGETS.pop(k) - {users._get(actor)} # FIXME
@event_listener("chk_nightdone") @event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
spl = set(get_players()) spl = set(get_players())
evt.data["actedcount"] += len(KILLS) evt.data["actedcount"] += len(KILLS)
for dullahan, targets in TARGETS.items(): for dullahan, targets in TARGETS.items():

View File

@ -104,9 +104,9 @@ def on_night_acted(evt, var, user, actor):
evt.data["acted"] = True evt.data["acted"] = True
@event_listener("chk_nightdone") @event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(VISITED) evt.data["actedcount"] += len(VISITED)
evt.data["nightroles"].extend(var.ROLES["harlot"]) evt.data["nightroles"].extend(get_all_players(("harlot",)))
@event_listener("exchange_roles") @event_listener("exchange_roles")
def on_exchange_roles(evt, cli, var, actor, nick, actor_role, nick_role): 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) PASSED.discard(target)
@event_listener("chk_nightdone") @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["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]) 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) @event_listener("transition_night_end", priority=2)

View File

@ -5,7 +5,7 @@ import src.settings as var
from src.utilities import * from src.utilities import *
from src import debuglog, errlog, plog from src import debuglog, errlog, plog
from src.decorators import cmd, event_listener 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.messages import messages
from src.events import Event from src.events import Event
@ -100,9 +100,9 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role):
SEEN.discard(actor) SEEN.discard(actor)
@event_listener("chk_nightdone") @event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(SEEN) 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) @event_listener("transition_night_end", priority=2)
def on_transition_night_end(evt, var): 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 TOTEMS[nick] = actor_totem
@event_listener("chk_nightdone") @event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(SHAMANS) 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") @event_listener("get_voters")
def on_get_voters(evt, var): def on_get_voters(evt, var):

View File

@ -251,9 +251,9 @@ def on_night_acted(evt, var, user, actor):
evt.data["acted"] = True evt.data["acted"] = True
@event_listener("chk_nightdone") @event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(VISITED) evt.data["actedcount"] += len(VISITED)
evt.data["nightroles"].extend(var.ROLES["succubus"]) evt.data["nightroles"].extend(get_all_players(("succubus",)))
@event_listener("targeted_command") @event_listener("targeted_command")
def on_targeted_command(evt, cli, var, cmd, actor, orig_target, tags): 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" evt.data["role"] = "villager"
@event_listener("chk_nightdone") @event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
evt.data["actedcount"] += len(KILLS) 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) @event_listener("transition_night_end", priority=2)
def on_transition_night_end(evt, var): 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) PASSED.discard(nick)
@event_listener("chk_nightdone") @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["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) @event_listener("transition_night_end", priority=2)
def on_transition_night_end(evt, var): 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"]) child.send(messages["no_other_wolves"])
@event_listener("chk_nightdone") @event_listener("chk_nightdone")
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
if var.FIRST_NIGHT: if var.FIRST_NIGHT:
evt.data["actedcount"] += len(IDOLS.keys()) 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") @event_listener("transition_day_begin")
def on_transition_day_begin(evt, cli, var): 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] del KILLS[nick]
@event_listener("chk_nightdone", priority=3) @event_listener("chk_nightdone", priority=3)
def on_chk_nightdone(evt, cli, var): def on_chk_nightdone(evt, var):
if not var.DISEASED_WOLVES: if not var.DISEASED_WOLVES:
evt.data["actedcount"] += len(KILLS) 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) @event_listener("chk_nightdone", priority=20)
def on_chk_nightdone2(evt, cli, var): def on_chk_nightdone2(evt, var):
if not evt.prevent_default: if not evt.prevent_default:
nevt = Event("wolf_numkills", {"numkills": 1}) nevt = Event("wolf_numkills", {"numkills": 1})
nevt.dispatch(var) nevt.dispatch(var)

View File

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