Additional piper fixes
This commit is contained in:
parent
6efbcca3fe
commit
40b2c345dc
@ -7,6 +7,7 @@ from collections import defaultdict
|
|||||||
import botconfig
|
import botconfig
|
||||||
import src.settings as var
|
import src.settings as var
|
||||||
from src.utilities import *
|
from src.utilities import *
|
||||||
|
from src.functions import get_players, get_all_players, get_target, get_main_role
|
||||||
from src import channels, users, debuglog, errlog, plog
|
from src import channels, users, debuglog, errlog, plog
|
||||||
from src.decorators import command, event_listener
|
from src.decorators import command, event_listener
|
||||||
from src.messages import messages
|
from src.messages import messages
|
||||||
@ -44,50 +45,56 @@ def charm(var, wrapper, message):
|
|||||||
evt1.dispatch(wrapper.client, var, "charm", wrapper.source.nick, target1.nick, frozenset({"detrimental"}))
|
evt1.dispatch(wrapper.client, var, "charm", wrapper.source.nick, target1.nick, frozenset({"detrimental"}))
|
||||||
if evt1.prevent_default:
|
if evt1.prevent_default:
|
||||||
return
|
return
|
||||||
target1 = users._get(evt.data["target"]) # FIXME: need to make targeted_command use users
|
target1 = users._get(evt1.data["target"]) # FIXME: need to make targeted_command use users
|
||||||
|
|
||||||
if target2 is not None:
|
if target2 is not None:
|
||||||
evt2 = Event("targeted_command", {"target": target2.nick, "misdirection": True, "exchange": True})
|
evt2 = Event("targeted_command", {"target": target2.nick, "misdirection": True, "exchange": True})
|
||||||
evt2.dispatch(wrapper.client, var, "charm", wrapper.source.nick, target2.nick, frozenset({"detrimental"}))
|
evt2.dispatch(wrapper.client, var, "charm", wrapper.source.nick, target2.nick, frozenset({"detrimental"}))
|
||||||
if evt2.prevent_default:
|
if evt2.prevent_default:
|
||||||
return
|
return
|
||||||
target2 = users._get(evt.data["target"]) # FIXME
|
target2 = users._get(evt2.data["target"]) # FIXME
|
||||||
|
|
||||||
# Do these checks based on original targets, so piper doesn't know to change due to misdirection/luck totem
|
# Do these checks based on original targets, so piper doesn't know to change due to misdirection/luck totem
|
||||||
if orig1 is orig2:
|
if orig1 is orig2:
|
||||||
wrapper.pm(messages["must_charm_multiple"])
|
wrapper.send(messages["must_charm_multiple"])
|
||||||
return
|
return
|
||||||
|
|
||||||
if orig1 in CHARMED and orig2 in CHARMED:
|
if orig1 in CHARMED and orig2 in CHARMED:
|
||||||
wrapper.pm(messages["targets_already_charmed"].format(orig1, orig2))
|
wrapper.send(messages["targets_already_charmed"].format(orig1, orig2))
|
||||||
return
|
return
|
||||||
elif orig1 in CHARMED:
|
elif orig1 in CHARMED:
|
||||||
wrapper.pm(messages["target_already_charmed"].format(orig1))
|
wrapper.send(messages["target_already_charmed"].format(orig1))
|
||||||
return
|
return
|
||||||
elif orig2 in CHARMED:
|
elif orig2 in CHARMED:
|
||||||
wrapper.pm(messages["target_already_charmed"].format(orig2))
|
wrapper.send(messages["target_already_charmed"].format(orig2))
|
||||||
return
|
return
|
||||||
|
|
||||||
TOBECHARMED[wrapper.source] = set(target1, target2)
|
TOBECHARMED[wrapper.source] = {target1, target2}
|
||||||
TOBECHARMED[wrapper.source].discard(None)
|
TOBECHARMED[wrapper.source].discard(None)
|
||||||
|
|
||||||
if orig2:
|
if orig2:
|
||||||
debuglog("{0} (piper) CHARM {1} ({2}) && {3} ({4})".format(wrapper.source,
|
debuglog("{0} (piper) CHARM {1} ({2}) && {3} ({4})".format(wrapper.source,
|
||||||
target1, get_main_role(target1),
|
target1, get_main_role(target1),
|
||||||
target2, get_main_role(target2)))
|
target2, get_main_role(target2)))
|
||||||
wrapper.pm(messages["charm_multiple_success"].format(orig1, ori2))
|
wrapper.send(messages["charm_multiple_success"].format(orig1, orig2))
|
||||||
else:
|
else:
|
||||||
debuglog("{0} (piper) CHARM {1} ({2})".format(wrapper.source, target1, get_main_role(target1)))
|
debuglog("{0} (piper) CHARM {1} ({2})".format(wrapper.source, target1, get_main_role(target1)))
|
||||||
wrapper.pm(messages["charm_success"].format(orig1))
|
wrapper.send(messages["charm_success"].format(orig1))
|
||||||
|
|
||||||
chk_nightdone(wrapper.client)
|
chk_nightdone(wrapper.client)
|
||||||
|
|
||||||
@event_listener("chk_win", priority=2)
|
@event_listener("chk_win", priority=2)
|
||||||
def on_chk_win(evt, cli, var, rolemap, mainroles, lpl, lwolves, lrealwolves):
|
def on_chk_win(evt, cli, var, rolemap, mainroles, lpl, lwolves, lrealwolves):
|
||||||
lp = len(rolemap.get("piper", ()))
|
|
||||||
# lpl doesn't included wounded/sick people or consecrating priests
|
# lpl doesn't included wounded/sick people or consecrating priests
|
||||||
# whereas we want to ensure EVERYONE (even wounded people) are charmed for piper win
|
# whereas we want to ensure EVERYONE (even wounded people) are charmed for piper win
|
||||||
if var.PHASE == "day" and lp + len(CHARMED) == len(get_players()):
|
pipers = set(users._get(p) for p in rolemap.get("piper", ())) # FIXME
|
||||||
|
lp = len(pipers)
|
||||||
|
if lp == 0: # no alive pipers, short-circuit this check
|
||||||
|
return
|
||||||
|
|
||||||
|
uncharmed = set(get_players()) - CHARMED - pipers
|
||||||
|
|
||||||
|
if var.PHASE == "day" and len(uncharmed) == 0:
|
||||||
evt.data["winner"] = "pipers"
|
evt.data["winner"] = "pipers"
|
||||||
evt.data["message"] = messages["piper_win"].format("s" if lp > 1 else "", "s" if lp == 1 else "")
|
evt.data["message"] = messages["piper_win"].format("s" if lp > 1 else "", "s" if lp == 1 else "")
|
||||||
|
|
||||||
@ -108,40 +115,41 @@ def on_del_player(evt, var, player, mainrole, allroles, death_triggers):
|
|||||||
|
|
||||||
@event_listener("transition_day_begin")
|
@event_listener("transition_day_begin")
|
||||||
def on_transition_day_begin(evt, var):
|
def on_transition_day_begin(evt, var):
|
||||||
tocharm = set(itertools.chain(TOBECHARMED.values()))
|
tocharm = set(itertools.chain.from_iterable(TOBECHARMED.values()))
|
||||||
# remove pipers from set; they can never be charmed
|
# remove pipers from set; they can never be charmed
|
||||||
# but might end up in there due to misdirection/luck totems
|
# but might end up in there due to misdirection/luck totems
|
||||||
tocharm.difference_update(get_all_players(("piper",)))
|
tocharm.difference_update(get_all_players(("piper",)))
|
||||||
|
|
||||||
# Send out PMs to players who have been charmed
|
# Send out PMs to players who have been charmed
|
||||||
for target in tocharm:
|
for target in tocharm:
|
||||||
charmedlist = list(CHARMED | tocharm - {victim})
|
charmedlist = list(CHARMED | tocharm - {target})
|
||||||
message = messages["charmed"]
|
message = messages["charmed"]
|
||||||
|
|
||||||
if len(charmedlist) <= 0:
|
if len(charmedlist) <= 0:
|
||||||
target.pm(message + messages["no_charmed_players"])
|
target.send(message + messages["no_charmed_players"])
|
||||||
elif len(charmedlist) == 1:
|
elif len(charmedlist) == 1:
|
||||||
target.pm(message + messages["one_charmed_player"].format(charmedlist[0]))
|
target.send(message + messages["one_charmed_player"].format(charmedlist[0]))
|
||||||
elif len(charmedlist) == 2:
|
elif len(charmedlist) == 2:
|
||||||
target.pm(message + messages["two_charmed_players"].format(charmedlist[0], charmedlist[1]))
|
target.send(message + messages["two_charmed_players"].format(charmedlist[0], charmedlist[1]))
|
||||||
else:
|
else:
|
||||||
target.pm(message + messages["many_charmed_players"].format("\u0002, \u0002".join(charmedlist[:-1]), charmedlist[-1]))
|
target.send(message + messages["many_charmed_players"].format("\u0002, \u0002".join(p.nick for p in charmedlist[:-1]), charmedlist[-1]))
|
||||||
|
|
||||||
for target in CHARMED:
|
if len(tocharm) > 0:
|
||||||
tobecharmedlist = list(tocharm)
|
for target in CHARMED:
|
||||||
|
tobecharmedlist = list(tocharm)
|
||||||
|
|
||||||
if len(tobecharmedlist) == 1:
|
if len(tobecharmedlist) == 1:
|
||||||
message = messages["players_charmed_one"].format(tobecharmedlist[0])
|
message = messages["players_charmed_one"].format(tobecharmedlist[0])
|
||||||
elif len(tobecharmedlist) == 2:
|
elif len(tobecharmedlist) == 2:
|
||||||
message = messages["players_charmed_two"].format(tobecharmedlist[0], tobecharmedlist[1])
|
message = messages["players_charmed_two"].format(tobecharmedlist[0], tobecharmedlist[1])
|
||||||
else:
|
else:
|
||||||
message = messages["players_charmed_many"].format("\u0002, \u0002".join(tobecharmedlist[:-1]), tobecharmedlist[-1])
|
message = messages["players_charmed_many"].format("\u0002, \u0002".join(p.nick for p in tobecharmedlist[:-1]), tobecharmedlist[-1])
|
||||||
|
|
||||||
previouscharmed = CHARMED - {target}
|
previouscharmed = CHARMED - {target}
|
||||||
if len(previouscharmed):
|
if len(previouscharmed):
|
||||||
target.pm(message + messages["previously_charmed"].format("\u0002, \u0002".join(previouscharmed)))
|
target.send(message + messages["previously_charmed"].format("\u0002, \u0002".join(p.nick for p in previouscharmed)))
|
||||||
else:
|
else:
|
||||||
target.pm(message)
|
target.send(message)
|
||||||
|
|
||||||
CHARMED.update(tocharm)
|
CHARMED.update(tocharm)
|
||||||
TOBECHARMED.clear()
|
TOBECHARMED.clear()
|
||||||
@ -160,13 +168,13 @@ def on_chk_nightdone(evt, var):
|
|||||||
def on_transition_night_end(evt, var):
|
def on_transition_night_end(evt, var):
|
||||||
ps = set(get_players()) - CHARMED
|
ps = set(get_players()) - CHARMED
|
||||||
for piper in get_all_players(("piper",)):
|
for piper in get_all_players(("piper",)):
|
||||||
pl = ps[:]
|
pl = list(ps)
|
||||||
random.shuffle(pl)
|
random.shuffle(pl)
|
||||||
pl.remove(piper)
|
pl.remove(piper)
|
||||||
to_send = "piper_notify"
|
to_send = "piper_notify"
|
||||||
if piper.prefers_simple():
|
if piper.prefers_simple():
|
||||||
to_send = "piper_simple"
|
to_send = "piper_simple"
|
||||||
piper.send(messages[to_send], "Players: " + ", ".join(pl), sep="\n")
|
piper.send(messages[to_send], "Players: " + ", ".join(p.nick for p in pl), sep="\n")
|
||||||
|
|
||||||
@event_listener("exchange_roles")
|
@event_listener("exchange_roles")
|
||||||
def on_exchange(evt, var, actor, target, actor_role, target_role):
|
def on_exchange(evt, var, actor, target, actor_role, target_role):
|
||||||
@ -178,7 +186,7 @@ def on_exchange(evt, var, actor, target, actor_role, target_role):
|
|||||||
|
|
||||||
@event_listener("get_special")
|
@event_listener("get_special")
|
||||||
def on_get_special(evt, var):
|
def on_get_special(evt, var):
|
||||||
evt.data["special"].extend(get_players(("piper",)))
|
evt.data["special"].update(get_players(("piper",)))
|
||||||
|
|
||||||
@event_listener("reset")
|
@event_listener("reset")
|
||||||
def on_reset(evt, var):
|
def on_reset(evt, var):
|
||||||
@ -188,6 +196,6 @@ def on_reset(evt, var):
|
|||||||
@event_listener("revealroles")
|
@event_listener("revealroles")
|
||||||
def on_revealroles(evt, var, wrapper):
|
def on_revealroles(evt, var, wrapper):
|
||||||
if CHARMED:
|
if CHARMED:
|
||||||
evt.data["output"].append("\u0002charmed players\u0002: {0}".format(", ".join(CHARMED)))
|
evt.data["output"].append("\u0002charmed players\u0002: {0}".format(", ".join(p.nick for p in CHARMED)))
|
||||||
|
|
||||||
# vim: set sw=4 expandtab:
|
# vim: set sw=4 expandtab:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user