Add consecrate command for priests

This commit is contained in:
skizzerz 2015-10-25 16:38:46 -05:00
parent 2127b217b7
commit f166baeaa9

View File

@ -1979,7 +1979,7 @@ def hurry_up(cli, gameid, change):
var.DAY_ID = 0 var.DAY_ID = 0
pl = var.list_players() pl = var.list_players()
avail = len(pl) - len(var.WOUNDED) - len(var.ASLEEP) avail = len(pl) - len(var.WOUNDED | var.ASLEEP | var.CONSECRATING)
votesneeded = avail // 2 + 1 votesneeded = avail // 2 + 1
not_lynching = len(var.NO_LYNCH) not_lynching = len(var.NO_LYNCH)
@ -2042,11 +2042,11 @@ def chk_decision(cli, force = ""):
return return
chan = botconfig.CHANNEL chan = botconfig.CHANNEL
pl = var.list_players() pl = var.list_players()
avail = len(pl) - len(var.WOUNDED) - len(var.ASLEEP) avail = len(pl) - len(var.WOUNDED | var.ASLEEP | var.CONSECRATING)
votesneeded = avail // 2 + 1 votesneeded = avail // 2 + 1
not_lynching = list(var.NO_LYNCH) not_lynching = list(var.NO_LYNCH)
for p in var.PACIFISTS: for p in var.PACIFISTS:
if p in pl and p not in var.WOUNDED and p not in var.ASLEEP: if p in pl and p not in (var.WOUNDED | var.ASLEEP | var.CONSECRATING):
not_lynching.append(p) not_lynching.append(p)
# .remove() will only remove the first instance, which means this plays nicely with pacifism countering this # .remove() will only remove the first instance, which means this plays nicely with pacifism countering this
@ -2074,7 +2074,7 @@ def chk_decision(cli, force = ""):
numvotes = 0 numvotes = 0
random.shuffle(var.IMPATIENT) random.shuffle(var.IMPATIENT)
for v in var.IMPATIENT: for v in var.IMPATIENT:
if v in pl and v not in voters and v != votee and v not in var.WOUNDED and v not in var.ASLEEP: if v in pl and v not in voters and v != votee and v not in (var.WOUNDED | var.ASLEEP | var.CONSECRATING):
# don't add them in if they have the same number or more of pacifism totems # don't add them in if they have the same number or more of pacifism totems
# this matters for desperation totem on the votee # this matters for desperation totem on the votee
imp_count = var.IMPATIENT.count(v) imp_count = var.IMPATIENT.count(v)
@ -2236,7 +2236,7 @@ def show_votes(cli, nick, chan, rest):
cli.msg(chan, msg) cli.msg(chan, msg)
pl = var.list_players() pl = var.list_players()
avail = len(pl) - len(var.WOUNDED) - len(var.ASLEEP) avail = len(pl) - len(var.WOUNDED | var.ASLEEP | var.CONSECRATING)
votesneeded = avail // 2 + 1 votesneeded = avail // 2 + 1
not_voting = len(var.NO_LYNCH) not_voting = len(var.NO_LYNCH)
if not_voting == 1: if not_voting == 1:
@ -2568,7 +2568,7 @@ def chk_win(cli, end_game=True, winner=None):
ltraitors = len(var.ROLES.get("traitor", ())) ltraitors = len(var.ROLES.get("traitor", ()))
lpipers = len(var.ROLES.get("piper", ())) lpipers = len(var.ROLES.get("piper", ()))
if var.PHASE == "day": if var.PHASE == "day":
for p in var.WOUNDED | var.ASLEEP: for p in var.WOUNDED | var.ASLEEP | var.CONSECRATING:
try: try:
role = var.get_role(p) role = var.get_role(p)
if role in var.WOLFCHAT_ROLES: if role in var.WOLFCHAT_ROLES:
@ -3057,6 +3057,7 @@ def del_player(cli, nick, forced_death = False, devoice = True, end_game = True,
var.NO_LYNCH.discard(nick) var.NO_LYNCH.discard(nick)
var.WOUNDED.discard(nick) var.WOUNDED.discard(nick)
var.ASLEEP.discard(nick) var.ASLEEP.discard(nick)
var.CONSECRATING.discard(nick)
chk_decision(cli) chk_decision(cli)
elif var.PHASE == "night" and ret: elif var.PHASE == "night" and ret:
chk_nightdone(cli) chk_nightdone(cli)
@ -3500,6 +3501,9 @@ def rename_player(cli, prefix, nick):
if prefix in var.PRIESTS: if prefix in var.PRIESTS:
var.PRIESTS.remove(prefix) var.PRIESTS.remove(prefix)
var.PRIESTS.add(nick) var.PRIESTS.add(nick)
if prefix in var.CONSECRATING:
var.CONSECRATING.remove(prefix)
var.CONSECRATING.add(nick)
with var.GRAVEYARD_LOCK: # to be safe with var.GRAVEYARD_LOCK: # to be safe
if prefix in var.LAST_SAID_TIME.keys(): if prefix in var.LAST_SAID_TIME.keys():
var.LAST_SAID_TIME[nick] = var.LAST_SAID_TIME.pop(prefix) var.LAST_SAID_TIME[nick] = var.LAST_SAID_TIME.pop(prefix)
@ -4628,6 +4632,14 @@ def no_lynch(cli, nick, chan, rest):
elif nick in var.WOUNDED: elif nick in var.WOUNDED:
cli.msg(chan, "{0}: You are wounded and resting, thus you are unable to vote for the day.".format(nick)) cli.msg(chan, "{0}: You are wounded and resting, thus you are unable to vote for the day.".format(nick))
return return
elif nick in var.ASLEEP:
pm(cli, nick, "As you place your vote, your totem emits a brilliant flash of light. " +
"After recovering, you notice that you are still in your bed. " +
"That entire sequence of events must have just been a dream...")
return
elif nick in var.CONSECRATING:
pm(cli, nick, "You are consecrating someone today and cannot participate in the vote.")
return
candidates = var.VOTES.keys() candidates = var.VOTES.keys()
for voter in list(candidates): for voter in list(candidates):
if nick in var.VOTES[voter]: if nick in var.VOTES[voter]:
@ -4660,6 +4672,9 @@ def lynch(cli, nick, chan, rest):
"After recovering, you notice that you are still in your bed. " + "After recovering, you notice that you are still in your bed. " +
"That entire sequence of events must have just been a dream...") "That entire sequence of events must have just been a dream...")
return return
if nick in var.CONSECRATING:
pm(cli, nick, "You are consecrating someone today and cannot participate in the vote.")
return
var.NO_LYNCH.discard(nick) var.NO_LYNCH.discard(nick)
@ -5379,6 +5394,36 @@ def bless(cli, nick, chan, rest):
pm(cli, victim, "You suddenly feel very safe.") pm(cli, victim, "You suddenly feel very safe.")
debuglog("{0} ({1}) BLESS: {2} ({3})".format(nick, var.get_role(nick), victim, var.get_role(victim))) debuglog("{0} ({1}) BLESS: {2} ({3})".format(nick, var.get_role(nick), victim, var.get_role(victim)))
@cmd("consecrate", chan=False, pm=True, playing=True, silenced=True, phases=("day",), roles=("priest",))
def consecrate(cli, nick, chan, rest):
"""Consecrates a corpse, putting its spirit to rest and preventing other unpleasant things from happening."""
alive = var.list_players()
victim = re.split(" +", rest)[0]
if not victim:
pm(cli, nick, "Not enough parameters")
return
dead = [x for x in var.ALL_PLAYERS if x not in alive]
deadl = [x.lower() for x in dead]
tempvictim, num_matches = complete_match(victim.lower(), deadl)
if not tempvictim:
pm(cli, nick, "\u0002{0}\u0002 is not currently playing or is not dead.".format(victim))
return
victim = dead[deadl.index(tempvictim)] #convert back to normal casing
# we have a target, so mark them as consecrated, right now all this does is silence a VG for a night
# but other roles that do stuff after death or impact dead players should have functionality here as well
# (for example, if there was a role that could raise corpses as undead somethings, this would prevent that from working)
# regardless if this has any actual effect or not, it still removes the priest from being able to vote
if victim in var.VENGEFUL_GHOSTS.keys():
var.SILENCED.add(victim)
var.CONSECRATING.add(nick)
pm(cli, nick, "You have consecrated the body of \u0002{0}\u0002.".format(victim))
debuglog("{0} ({1}) CONSECRATE: {2}".format(nick, var.get_role(nick), victim))
# consecrating can possibly cause game to end, so check for that
chk_win(cli)
@cmd("observe", chan=False, pm=True, playing=True, silenced=True, phases=("night",), roles=("werecrow", "sorcerer")) @cmd("observe", chan=False, pm=True, playing=True, silenced=True, phases=("night",), roles=("werecrow", "sorcerer"))
def observe(cli, nick, chan, rest): def observe(cli, nick, chan, rest):
"""Observe a player to obtain various information.""" """Observe a player to obtain various information."""
@ -6289,6 +6334,7 @@ def transition_night(cli):
var.NIGHT_COUNT += 1 var.NIGHT_COUNT += 1
var.FIRST_NIGHT = (var.NIGHT_COUNT == 1) var.FIRST_NIGHT = (var.NIGHT_COUNT == 1)
var.TOTEMS = {} var.TOTEMS = {}
var.CONSECRATING = set()
daydur_msg = "" daydur_msg = ""
@ -7172,6 +7218,7 @@ def start(cli, nick, chan, forced = False, restart = ""):
var.EXTRA_WOLVES = 0 var.EXTRA_WOLVES = 0
var.BLESSED = set() var.BLESSED = set()
var.PRIESTS = set() var.PRIESTS = set()
var.CONSECRATING = set()
var.DEADCHAT_PLAYERS = set() var.DEADCHAT_PLAYERS = set()