Convert harlot
This commit is contained in:
parent
1408ab9c4a
commit
bfc5e6a9dd
@ -238,9 +238,10 @@ class VillagergameMode(GameMode):
|
|||||||
if len(var.ROLES["harlot"]) == 1:
|
if len(var.ROLES["harlot"]) == 1:
|
||||||
hlt = list(var.ROLES["harlot"])[0]
|
hlt = list(var.ROLES["harlot"])[0]
|
||||||
from src.roles import harlot
|
from src.roles import harlot
|
||||||
hvst = harlot.VISITED.get(hlt)
|
hvst = harlot.VISITED.get(users._get(hlt)) # FIXME
|
||||||
if hvst:
|
if hvst is not None:
|
||||||
pl.remove(hlt)
|
pl.remove(hlt)
|
||||||
|
hvst = hvst.nick # FIXME
|
||||||
if len(var.ROLES["shaman"]) == 1:
|
if len(var.ROLES["shaman"]) == 1:
|
||||||
shmn = list(var.ROLES["shaman"])[0]
|
shmn = list(var.ROLES["shaman"])[0]
|
||||||
if random.random() < 0.3:
|
if random.random() < 0.3:
|
||||||
|
@ -8,69 +8,70 @@ import botconfig
|
|||||||
import src.settings as var
|
import src.settings as var
|
||||||
from src.utilities import *
|
from src.utilities import *
|
||||||
from src import channels, users, debuglog, errlog, plog
|
from src import channels, users, debuglog, errlog, plog
|
||||||
from src.functions import get_players, get_all_players, get_main_role
|
from src.functions import get_players, get_all_players, get_main_role, get_target
|
||||||
from src.decorators import cmd, event_listener
|
from src.decorators import cmd, event_listener
|
||||||
from src.messages import messages
|
from src.messages import messages
|
||||||
from src.events import Event
|
from src.events import Event
|
||||||
|
|
||||||
VISITED = {}
|
VISITED = {}
|
||||||
|
PASSED = set()
|
||||||
|
|
||||||
@cmd("visit", chan=False, pm=True, playing=True, silenced=True, phases=("night",), roles=("harlot",))
|
@command("visit", chan=False, pm=True, playing=True, silenced=True, phases=("night",), roles=("harlot",))
|
||||||
def hvisit(cli, nick, chan, rest):
|
def hvisit(var, wrapper, message):
|
||||||
"""Visit a player. You will die if you visit a wolf or a target of the wolves."""
|
"""Visit a player. You will die if you visit a wolf or a target of the wolves."""
|
||||||
|
|
||||||
if VISITED.get(nick):
|
if VISITED.get(wrapper.source):
|
||||||
pm(cli, nick, messages["harlot_already_visited"].format(VISITED[nick]))
|
wrapper.pm(messages["harlot_already_visited"].format(VISITED[wrapper.source]))
|
||||||
return
|
return
|
||||||
victim = get_victim(cli, nick, re.split(" +",rest)[0], False, True)
|
target = get_target(var, wrapper, re.split(" +", message)[0], allow_bot=True)
|
||||||
if not victim:
|
if not target:
|
||||||
return
|
return
|
||||||
|
|
||||||
if nick == victim:
|
if target is wrapper.source:
|
||||||
pm(cli, nick, messages["harlot_not_self"])
|
wrapper.pm(messages["harlot_not_self"])
|
||||||
return
|
return
|
||||||
|
|
||||||
evt = Event("targeted_command", {"target": victim, "misdirection": True, "exchange": True})
|
evt = Event("targeted_command", {"target": target.nick, "misdirection": True, "exchange": True})
|
||||||
evt.dispatch(cli, var, "visit", nick, victim, frozenset({"immediate"}))
|
evt.dispatch(wrapper.client, var, "visit", wrapper.source.nick, target.nick, frozenset({"immediate"}))
|
||||||
if evt.prevent_default:
|
if evt.prevent_default:
|
||||||
return
|
return
|
||||||
victim = evt.data["target"]
|
target = users._get(evt.data["target"]) # FIXME
|
||||||
vrole = get_role(victim)
|
vrole = get_main_role(target)
|
||||||
|
|
||||||
VISITED[nick] = victim
|
VISITED[wrapper.source] = target
|
||||||
pm(cli, nick, messages["harlot_success"].format(victim))
|
PASSED.discard(wrapper.source)
|
||||||
if nick != victim:
|
|
||||||
pm(cli, victim, messages["harlot_success"].format(nick))
|
wrapper.pm(messages["harlot_success"].format(target))
|
||||||
|
if target is not wrapper.source:
|
||||||
|
wrapper.pm(messages["harlot_success"].format(wrapper.source))
|
||||||
revt = Event("harlot_visit", {})
|
revt = Event("harlot_visit", {})
|
||||||
revt.dispatch(cli, var, nick, victim)
|
revt.dispatch(var, wrapper.source, target)
|
||||||
|
|
||||||
debuglog("{0} ({1}) VISIT: {2} ({3})".format(nick, get_role(nick), victim, vrole))
|
debuglog("{0} (harlot) VISIT: {1} ({2})".format(wrapper.source, target, vrole))
|
||||||
chk_nightdone(cli)
|
chk_nightdone(wrapper.client)
|
||||||
|
|
||||||
@cmd("pass", chan=False, pm=True, playing=True, silenced=True, phases=("night",), roles=("harlot",))
|
@command("pass", chan=False, pm=True, playing=True, silenced=True, phases=("night",), roles=("harlot",))
|
||||||
def pass_cmd(cli, nick, chan, rest):
|
def pass_cmd(var, wrapper, message):
|
||||||
"""Do not visit someone tonight."""
|
"""Do not visit someone tonight."""
|
||||||
if VISITED.get(nick):
|
if VISITED.get(wrapper.source):
|
||||||
pm(cli, nick, messages["harlot_already_visited"].format(VISITED[nick]))
|
wrapper.pm(messages["harlot_already_visited"].format(VISITED[wrapper.source]))
|
||||||
return
|
return
|
||||||
VISITED[nick] = None
|
PASSED.add(wrapper.source)
|
||||||
pm(cli, nick, messages["no_visit"])
|
wrapper.pm(messages["no_visit"])
|
||||||
debuglog("{0} ({1}) PASS".format(nick, get_role(nick)))
|
debuglog("{0} (harlot) PASS".format(wrapper.source))
|
||||||
chk_nightdone(cli)
|
chk_nightdone(wrapper.client)
|
||||||
|
|
||||||
@event_listener("bite")
|
@event_listener("bite")
|
||||||
def on_bite(evt, var, alpha, target):
|
def on_bite(evt, var, alpha, target):
|
||||||
if target.nick not in var.ROLES["harlot"] or target.nick not in VISITED:
|
if target.nick not in var.ROLES["harlot"] or target not in VISITED:
|
||||||
return
|
return
|
||||||
hvisit = VISITED[target.nick]
|
hvisit = VISITED[target]
|
||||||
if hvisit is not None:
|
if get_main_role(hvisit) not in var.WOLFCHAT_ROLES and (hvisit not in evt.params.bywolves or hvisit in evt.params.protected):
|
||||||
visited = users._get(hvisit) # FIXME
|
evt.data["can_bite"] = False
|
||||||
if get_main_role(visited) not in var.WOLFCHAT_ROLES and (visited not in evt.params.bywolves or visited in evt.params.protected):
|
|
||||||
evt.data["can_bite"] = False
|
|
||||||
|
|
||||||
@event_listener("transition_day_resolve", priority=1)
|
@event_listener("transition_day_resolve", priority=1)
|
||||||
def on_transition_day_resolve(evt, var, victim):
|
def on_transition_day_resolve(evt, var, victim):
|
||||||
if victim.nick in var.ROLES["harlot"] and VISITED.get(victim.nick) and victim not in evt.data["dead"] and victim in evt.data["onlybywolves"]:
|
if victim.nick in var.ROLES["harlot"] and VISITED.get(victim) and victim not in evt.data["dead"] and victim in evt.data["onlybywolves"]:
|
||||||
if victim not in evt.data["bitten"]:
|
if victim not in evt.data["bitten"]:
|
||||||
evt.data["message"].append(messages["target_not_home"])
|
evt.data["message"].append(messages["target_not_home"])
|
||||||
evt.data["novictmsg"] = False
|
evt.data["novictmsg"] = False
|
||||||
@ -80,22 +81,21 @@ def on_transition_day_resolve(evt, var, victim):
|
|||||||
@event_listener("transition_day_resolve_end", priority=1)
|
@event_listener("transition_day_resolve_end", priority=1)
|
||||||
def on_transition_day_resolve_end(evt, var, victims):
|
def on_transition_day_resolve_end(evt, var, victims):
|
||||||
for victim in victims + evt.data["bitten"]:
|
for victim in victims + evt.data["bitten"]:
|
||||||
if victim in evt.data["dead"] and victim.nick in VISITED.values() and (victim in evt.data["bywolves"] or victim in evt.data["bitten"]):
|
if victim in evt.data["dead"] and victim in VISITED.values() and (victim in evt.data["bywolves"] or victim in evt.data["bitten"]):
|
||||||
for hlt in VISITED:
|
for hlt in VISITED:
|
||||||
user = users._get(hlt) # FIXME
|
if VISITED[hlt] is victim and hlt not in evt.data["bitten"] and hlt not in evt.data["dead"]:
|
||||||
if VISITED[hlt] == victim.nick and user not in evt.data["bitten"] and user not in evt.data["dead"]:
|
|
||||||
if var.ROLE_REVEAL in ("on", "team"):
|
if var.ROLE_REVEAL in ("on", "team"):
|
||||||
evt.data["message"].append(messages["visited_victim"].format(hlt, get_reveal_role(hlt)))
|
evt.data["message"].append(messages["visited_victim"].format(hlt, get_reveal_role(hlt.nick)))
|
||||||
else:
|
else:
|
||||||
evt.data["message"].append(messages["visited_victim_noreveal"].format(hlt))
|
evt.data["message"].append(messages["visited_victim_noreveal"].format(hlt))
|
||||||
evt.data["bywolves"].add(user)
|
evt.data["bywolves"].add(hlt)
|
||||||
evt.data["onlybywolves"].add(user)
|
evt.data["onlybywolves"].add(hlt)
|
||||||
evt.data["dead"].append(user)
|
evt.data["dead"].append(hlt)
|
||||||
|
|
||||||
@event_listener("transition_day_resolve_end", priority=3)
|
@event_listener("transition_day_resolve_end", priority=3)
|
||||||
def on_transition_day_resolve_end3(evt, var, victims):
|
def on_transition_day_resolve_end3(evt, var, victims):
|
||||||
for harlot in get_all_players(("harlot",)):
|
for harlot in get_all_players(("harlot",)):
|
||||||
if VISITED.get(harlot.nick) in list_players(var.WOLF_ROLES) and harlot not in evt.data["dead"] and harlot not in evt.data["bitten"]:
|
if VISITED.get(harlot) in get_players(var.WOLF_ROLES) and harlot not in evt.data["dead"] and harlot not in evt.data["bitten"]:
|
||||||
evt.data["message"].append(messages["harlot_visited_wolf"].format(harlot))
|
evt.data["message"].append(messages["harlot_visited_wolf"].format(harlot))
|
||||||
evt.data["bywolves"].add(harlot)
|
evt.data["bywolves"].add(harlot)
|
||||||
evt.data["onlybywolves"].add(harlot)
|
evt.data["onlybywolves"].add(harlot)
|
||||||
@ -103,28 +103,26 @@ def on_transition_day_resolve_end3(evt, var, victims):
|
|||||||
|
|
||||||
@event_listener("night_acted")
|
@event_listener("night_acted")
|
||||||
def on_night_acted(evt, var, user, actor):
|
def on_night_acted(evt, var, user, actor):
|
||||||
if VISITED.get(user.nick):
|
if VISITED.get(user):
|
||||||
evt.data["acted"] = True
|
evt.data["acted"] = True
|
||||||
|
|
||||||
@event_listener("chk_nightdone")
|
@event_listener("chk_nightdone")
|
||||||
def on_chk_nightdone(evt, var):
|
def on_chk_nightdone(evt, var):
|
||||||
evt.data["actedcount"] += len(VISITED)
|
evt.data["actedcount"] += len(VISITED) + len(PASSED)
|
||||||
evt.data["nightroles"].extend(get_all_players(("harlot",)))
|
evt.data["nightroles"].extend(get_all_players(("harlot",)))
|
||||||
|
|
||||||
@event_listener("exchange_roles")
|
@event_listener("exchange_roles")
|
||||||
def on_exchange_roles(evt, var, actor, target, actor_role, target_role):
|
def on_exchange_roles(evt, var, actor, target, actor_role, target_role):
|
||||||
if actor_role == "harlot":
|
if actor_role == "harlot":
|
||||||
if actor.nick in VISITED:
|
if actor in VISITED:
|
||||||
if VISITED[actor.nick] is not None:
|
VISITED[actor].send(messages["harlot_disappeared"].format(actor))
|
||||||
visited = users._get(VISITED[actor.nick]) # FIXME
|
del VISITED[actor]
|
||||||
visited.send(messages["harlot_disappeared"].format(actor))
|
PASSED.discard(actor)
|
||||||
del VISITED[actor.nick]
|
|
||||||
if target_role == "harlot":
|
if target_role == "harlot":
|
||||||
if target.nick in VISITED:
|
if target in VISITED:
|
||||||
if VISITED[target.nick] is not None:
|
VISITED[target].send(messages["harlot_disappeared"].format(target))
|
||||||
visited = users._get(VISITED[target.nick]) # FIXME
|
del VISITED[target]
|
||||||
visited.send(messages["harlot_disappeared"].format(target))
|
PASSED.discard(target)
|
||||||
del VISITED[target.nick]
|
|
||||||
|
|
||||||
@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):
|
||||||
@ -140,6 +138,7 @@ def on_transition_night_end(evt, var):
|
|||||||
@event_listener("begin_day")
|
@event_listener("begin_day")
|
||||||
def on_begin_day(evt, var):
|
def on_begin_day(evt, var):
|
||||||
VISITED.clear()
|
VISITED.clear()
|
||||||
|
PASSED.clear()
|
||||||
|
|
||||||
@event_listener("get_special")
|
@event_listener("get_special")
|
||||||
def on_get_special(evt, var):
|
def on_get_special(evt, var):
|
||||||
@ -149,21 +148,12 @@ def on_get_special(evt, var):
|
|||||||
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
|
def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
|
||||||
if "harlot" not in allroles:
|
if "harlot" not in allroles:
|
||||||
return
|
return
|
||||||
VISITED.pop(user.nick, None)
|
VISITED.pop(user, None)
|
||||||
|
PASSED.discard(user)
|
||||||
@event_listener("rename_player")
|
|
||||||
def on_rename(evt, cli, var, prefix, nick):
|
|
||||||
kvp = {}
|
|
||||||
for a,b in VISITED.items():
|
|
||||||
s = nick if a == prefix else a
|
|
||||||
t = nick if b == prefix else b
|
|
||||||
kvp[s] = t
|
|
||||||
VISITED.update(kvp)
|
|
||||||
if prefix in VISITED:
|
|
||||||
del VISITED[prefix]
|
|
||||||
|
|
||||||
@event_listener("reset")
|
@event_listener("reset")
|
||||||
def on_reset(evt, var):
|
def on_reset(evt, var):
|
||||||
VISITED.clear()
|
VISITED.clear()
|
||||||
|
PASSED.clear()
|
||||||
|
|
||||||
# vim: set sw=4 expandtab:
|
# vim: set sw=4 expandtab:
|
||||||
|
@ -83,11 +83,11 @@ def pass_cmd(cli, nick, chan, rest):
|
|||||||
chk_nightdone(cli)
|
chk_nightdone(cli)
|
||||||
|
|
||||||
@event_listener("harlot_visit")
|
@event_listener("harlot_visit")
|
||||||
def on_harlot_visit(evt, cli, var, nick, victim):
|
def on_harlot_visit(evt, var, actor, victim):
|
||||||
if victim in var.ROLES["succubus"]:
|
if victim.nick in var.ROLES["succubus"]:
|
||||||
pm(cli, nick, messages["notify_succubus_target"].format(victim))
|
actor.send(messages["notify_succubus_target"].format(victim))
|
||||||
pm(cli, victim, messages["succubus_harlot_success"].format(nick))
|
victim.send(messages["succubus_harlot_success"].format(actor))
|
||||||
ENTRANCED.add(nick)
|
ENTRANCED.add(actor.nick)
|
||||||
|
|
||||||
@event_listener("get_random_totem_targets")
|
@event_listener("get_random_totem_targets")
|
||||||
def on_get_random_totem_targets(evt, var, shaman):
|
def on_get_random_totem_targets(evt, var, shaman):
|
||||||
|
@ -963,9 +963,8 @@ def join_player(var, wrapper, who=None, forced=False, *, sanity=True):
|
|||||||
|
|
||||||
@handle_error
|
@handle_error
|
||||||
def kill_join(var, wrapper):
|
def kill_join(var, wrapper):
|
||||||
pl = list_players()
|
pl = [x.nick for x in get_players()]
|
||||||
pl.sort(key=lambda x: x.lower())
|
pl.sort(key=lambda x: x.lower())
|
||||||
msg = "PING! " + break_long_message(pl).replace("\n", "\nPING! ")
|
|
||||||
reset_modes_timers(var)
|
reset_modes_timers(var)
|
||||||
reset()
|
reset()
|
||||||
wrapper.send(*pl, first="PING! ")
|
wrapper.send(*pl, first="PING! ")
|
||||||
@ -3517,7 +3516,7 @@ def transition_day(cli, gameid=0):
|
|||||||
victims.append(v)
|
victims.append(v)
|
||||||
elif v.nick in var.ROLES["bodyguard"] and v.nick in angel.GUARDED and users._get(angel.GUARDED[v.nick]) in victims_set: # FIXME
|
elif v.nick in var.ROLES["bodyguard"] and v.nick in angel.GUARDED and users._get(angel.GUARDED[v.nick]) in victims_set: # FIXME
|
||||||
vappend.append(v)
|
vappend.append(v)
|
||||||
elif v.nick in var.ROLES["harlot"] and harlot.VISITED.get(v.nick) is not None and users._get(harlot.VISITED[v.nick]) in victims_set: # FIXME
|
elif v.nick in var.ROLES["harlot"] and harlot.VISITED[v] in victims_set:
|
||||||
vappend.append(v)
|
vappend.append(v)
|
||||||
else:
|
else:
|
||||||
victims.append(v)
|
victims.append(v)
|
||||||
@ -3535,7 +3534,7 @@ def transition_day(cli, gameid=0):
|
|||||||
if v.nick in var.ROLES["bodyguard"] and users._get(angel.GUARDED.get(v.nick)) not in vappend: # FIXME
|
if v.nick in var.ROLES["bodyguard"] and users._get(angel.GUARDED.get(v.nick)) not in vappend: # FIXME
|
||||||
vappend.remove(v)
|
vappend.remove(v)
|
||||||
victims.append(v)
|
victims.append(v)
|
||||||
elif v.nick in var.ROLES["harlot"] and users._get(harlot.VISITED.get(v.nick)) not in vappend: # FIXME
|
elif v.nick in var.ROLES["harlot"] and harlot.VISITED.get(v) not in vappend:
|
||||||
vappend.remove(v)
|
vappend.remove(v)
|
||||||
victims.append(v)
|
victims.append(v)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user