Voting fixes for mudkip and succubus

- Remove short-circuit in chk_decision event on day timeout. No idea why
  I put that there to begin with...
- Don't make succubus remove voters from the list, rather just set their
  weight to 0. This causes their vote to not count while still letting
  stuff interact with the fact they voted succ (such as desperation totem)
- Ensure that mudkip's vote change works on day timeout as well
This commit is contained in:
skizzerz 2018-01-11 10:02:05 -07:00
parent 1989be5c8d
commit 0fa7664526
4 changed files with 5 additions and 11 deletions

View File

@ -1339,7 +1339,7 @@ class MudkipMode(GameMode):
avail = len(evt.params.voters) avail = len(evt.params.voters)
voted = sum(map(len, evt.data["votelist"].values())) voted = sum(map(len, evt.data["votelist"].values()))
if avail != voted: if avail != voted and not evt.params.timeout:
return return
majority = avail // 2 + 1 majority = avail // 2 + 1

View File

@ -229,11 +229,6 @@ def on_chk_decision(evt, cli, var, force):
evt.data["weights"][votee][v] = weight evt.data["weights"][votee][v] = weight
evt.data["numvotes"][votee] = numvotes evt.data["numvotes"][votee] = numvotes
@event_listener("chk_decision", priority=1.1)
def on_hurry_up(evt, cli, var, force):
if evt.params.timeout:
evt.stop_processing = True
@event_listener("chk_decision_abstain") @event_listener("chk_decision_abstain")
def on_chk_decision_abstain(evt, cli, var, nl): def on_chk_decision_abstain(evt, cli, var, nl):
for p in nl: for p in nl:

View File

@ -101,13 +101,14 @@ def on_get_random_totem_targets(evt, var, shaman):
if succubus in evt.data["targets"]: if succubus in evt.data["targets"]:
evt.data["targets"].remove(succubus) evt.data["targets"].remove(succubus)
@event_listener("chk_decision", priority=0) @event_listener("chk_decision")
def on_chk_decision(evt, cli, var, force): def on_chk_decision(evt, cli, var, force):
for votee, voters in evt.data["votelist"].items(): for votee, voters in evt.data["votelist"].items():
if users._get(votee) in get_all_players(("succubus",)): # FIXME if users._get(votee) in get_all_players(("succubus",)): # FIXME
for vtr in ENTRANCED: for vtr in ENTRANCED:
if vtr.nick in voters: if vtr.nick in voters:
voters.remove(vtr.nick) evt.data["numvotes"][votee] -= evt.data["weights"][votee][vtr.nick]
evt.data["weights"][votee][vtr.nick] = 0
def _kill_entranced_voters(var, votelist, not_lynching, votee): def _kill_entranced_voters(var, votelist, not_lynching, votee):
if not {p.nick for p in get_all_players(("succubus",))} & (set(itertools.chain(*votelist.values())) | not_lynching): # FIXME if not {p.nick for p in get_all_players(("succubus",))} & (set(itertools.chain(*votelist.values())) | not_lynching): # FIXME

View File

@ -1748,9 +1748,7 @@ def hurry_up(cli, gameid, change):
votelist = copy.deepcopy(var.VOTES) votelist = copy.deepcopy(var.VOTES)
# Note: this event can be differentiated between regular chk_decision # Note: this event can be differentiated between regular chk_decision
# by checking evt.param.timeout. A priority 1.1 event stops event # by checking evt.params.timeout.
# propagation, so your priority should be between 1 and 1.1 if you wish
# to handle this event
event = Event("chk_decision", { event = Event("chk_decision", {
"not_lynching": not_lynching, "not_lynching": not_lynching,
"votelist": votelist, "votelist": votelist,