def on_transition_day_begin(evt, var): # Select random totem recipients if shamans didn't act pl = get_players() for shaman in get_all_players(("shaman", )): if is_silent(var, shaman): continue ps = pl[:] for given in itertools.chain.from_iterable(LASTGIVEN[shaman].values()): if given in ps: ps.remove(given) for given in itertools.chain.from_iterable(SHAMANS[shaman].values()): if given in ps: ps.remove(given) for totem, count in TOTEMS[shaman].items(): mustgive = count - len(SHAMANS[shaman][totem]) for i in range(mustgive): if ps: target = random.choice(ps) ps.remove(target) dispatcher = MessageDispatcher(shaman, shaman) given = give_totem(var, dispatcher, target, totem, key="shaman_success_random_known", role="shaman") if given: SHAMANS[shaman][totem].append(given[0])
def on_transition_day_begin(evt, var): # Select random totem recipients if shamans didn't act pl = get_players() for shaman in get_players(("wolf shaman", )): if is_silent(var, shaman): continue ps = pl[:] for given in itertools.chain.from_iterable(LASTGIVEN[shaman].values()): if given in ps: ps.remove(given) for given in itertools.chain.from_iterable(SHAMANS[shaman].values()): if given in ps: ps.remove(given) for totem, count in TOTEMS[shaman].items(): mustgive = count - len(SHAMANS[shaman][totem]) for i in range(mustgive): if ps: target = random.choice(ps) ps.remove(target) dispatcher = MessageDispatcher(shaman, shaman) given = give_totem(var, dispatcher, target, prefix=messages["random_totem_prefix"], role="wolf shaman", msg=" of {0}".format(totem)) if given: relay_wolfchat_command( shaman.client, shaman.nick, messages["shaman_wolfchat"].format(shaman, target), ("wolf shaman", ), is_wolf_command=True) SHAMANS[shaman][totem].append(given[0])
def crazed_shaman_totem(var, wrapper, message): """Give a random totem to a player.""" totem_types = list(TOTEMS[wrapper.source].keys()) totem, target = get_totem_target(var, wrapper, message, LASTGIVEN, []) # don't pass totem_types so they can't autocomplete what random totems they have if not target: return # get the first totem type they haven't fully given out yet for type in totem_types: given = len(SHAMANS[wrapper.source][type]) total = TOTEMS[wrapper.source][type] if given < total: totem = type break else: # all totems are given out, change targets for a random one totem = random.choice(totem_types) orig_target = target target = RETARGET[wrapper.source].get(target, target) if target in itertools.chain.from_iterable(SHAMANS[wrapper.source].values()): wrapper.send(messages["shaman_no_stacking"].format(orig_target)) return given = give_totem(var, wrapper, target, prefix="You", role="crazed shaman", msg="") if given: victim, target = given if victim is not target: RETARGET[wrapper.source][target] = victim SHAMANS[wrapper.source][totem].append(victim) if len(SHAMANS[wrapper.source][totem]) > TOTEMS[wrapper.source][totem]: SHAMANS[wrapper.source][totem].pop(0)
def on_transition_day_begin(evt, var): # Select random totem recipients if shamans didn't act pl = get_players() for shaman in get_players(("wolf shaman", )): if shaman not in SHAMANS and not is_silent(var, shaman): ps = pl[:] if shaman in LASTGIVEN: if LASTGIVEN[shaman] in ps: ps.remove(LASTGIVEN[shaman]) if ps: target = random.choice(ps) dispatcher = MessageDispatcher(shaman, shaman) SHAMANS[shaman] = give_totem( var, dispatcher, target, prefix=messages["random_totem_prefix"], role="wolf shaman", msg=" of {0}".format(TOTEMS[shaman])) relay_wolfchat_command(shaman.client, shaman.nick, messages["shaman_wolfchat"].format( shaman, target), ("wolf shaman", ), is_wolf_command=True) else: LASTGIVEN[shaman] = None elif shaman not in SHAMANS: LASTGIVEN[shaman] = None
def wolf_shaman_totem(var, wrapper, message): """Give a totem to a player.""" totem_types = list(TOTEMS[wrapper.source].keys()) totem, target = get_totem_target(var, wrapper, message, LASTGIVEN, totem_types) if not target: return if not totem: totem_types = list(TOTEMS[wrapper.source].keys()) if len(totem_types) == 1: totem = totem_types[0] else: wrapper.send(messages["shaman_ambiguous_give"]) return orig_target = target target = RETARGET[wrapper.source].get(target, target) if target in itertools.chain.from_iterable(SHAMANS[wrapper.source].values()): wrapper.send(messages["shaman_no_stacking"].format(orig_target)) return given = give_totem(var, wrapper, target, totem, key="shaman_success_night_known", role="wolf shaman") if given: victim, target = given if victim is not target: RETARGET[wrapper.source][target] = victim SHAMANS[wrapper.source][totem].append(victim) if len(SHAMANS[wrapper.source][totem]) > TOTEMS[wrapper.source][totem]: SHAMANS[wrapper.source][totem].pop(0) send_wolfchat_message(var, wrapper.source, messages["shaman_wolfchat"].format(wrapper.source, target), ("wolf shaman",), role="wolf shaman", command="totem")
def shaman_totem(var, wrapper, message): """Give a totem to a player.""" target = get_totem_target(var, wrapper, message, LASTGIVEN) if not target: return SHAMANS[wrapper.source] = give_totem(var, wrapper, target, prefix="You", role="shaman", msg=" of {0}".format(TOTEMS[wrapper.source]))
def wolf_shaman_totem(var, wrapper, message): """Give a totem to a player.""" target = get_totem_target(var, wrapper, message, LASTGIVEN) if not target: return SHAMANS[wrapper.source] = give_totem(var, wrapper, target, prefix="You", role="wolf shaman", msg=" of {0}".format(TOTEMS[wrapper.source])) relay_wolfchat_command(wrapper.client, wrapper.source.nick, messages["shaman_wolfchat"].format(wrapper.source, target), ("wolf shaman",), is_wolf_command=True)
def wolf_shaman_totem(var, wrapper, message): """Give a totem to a player.""" target = get_totem_target(var, wrapper, message, LASTGIVEN) if not target: return SHAMANS[wrapper.source] = give_totem(var, wrapper, target, prefix="You", role="wolf shaman", msg=" of {0}".format(TOTEMS[wrapper.source])) relay_wolfchat_command(wrapper.client, wrapper.source.nick, messages["shaman_wolfchat"].format(wrapper.source, target), ("wolf shaman",), is_wolf_command=True)
def crazed_shaman_totem(var, wrapper, message): """Give a random totem to a player.""" target = get_totem_target(var, wrapper, message, LASTGIVEN) if not target: return SHAMANS[wrapper.source] = give_totem(var, wrapper, target, prefix="You", role="crazed shaman", msg="")
def on_transition_day_begin(evt, var): # Select random totem recipients if shamans didn't act pl = get_players() for shaman in get_players(("shaman",)): if shaman not in SHAMANS and not is_silent(var, shaman): ps = pl[:] if shaman in LASTGIVEN: if LASTGIVEN[shaman] in ps: ps.remove(LASTGIVEN[shaman]) if ps: target = random.choice(ps) dispatcher = MessageDispatcher(shaman, shaman) SHAMANS[shaman] = give_totem(var, dispatcher, target, prefix=messages["random_totem_prefix"], role="shaman", msg=" of {0}".format(TOTEMS[shaman])) else: LASTGIVEN[shaman] = None elif shaman not in SHAMANS: LASTGIVEN[shaman] = None
def wolf_shaman_totem(var, wrapper, message): """Give a totem to a player.""" totem_types = list(TOTEMS[wrapper.source].keys()) totem, target = get_totem_target(var, wrapper, message, LASTGIVEN, totem_types) if not target: return if not totem: totem_types = list(TOTEMS[wrapper.source].keys()) if len(totem_types) == 1: totem = totem_types[0] else: wrapper.send(messages["shaman_ambiguous_give"]) return orig_target = target target = RETARGET[wrapper.source].get(target, target) if target in itertools.chain.from_iterable( SHAMANS[wrapper.source].values()): wrapper.send(messages["shaman_no_stacking"].format(orig_target)) return given = give_totem(var, wrapper, target, prefix="You", role="wolf shaman", msg=" of {0}".format(totem)) if given: victim, target = given if victim is not target: RETARGET[wrapper.source][target] = victim SHAMANS[wrapper.source][totem].append(victim) if len(SHAMANS[wrapper.source][totem]) > TOTEMS[wrapper.source][totem]: SHAMANS[wrapper.source][totem].pop(0) relay_wolfchat_command(wrapper.client, wrapper.source.nick, messages["shaman_wolfchat"].format( wrapper.source, target), ("wolf shaman", ), is_wolf_command=True)
def on_transition_day_begin(evt, var): # Select random totem recipients if shamans didn't act pl = get_players() for shaman in get_players(("crazed shaman", )): if shaman not in SHAMANS and shaman.nick not in var.SILENCED: ps = pl[:] if shaman in LASTGIVEN: if LASTGIVEN[shaman] in ps: ps.remove(LASTGIVEN[shaman]) if ps: target = random.choice(ps) dispatcher = MessageDispatcher(shaman, shaman) SHAMANS[shaman] = give_totem( var, dispatcher, target, prefix=messages["random_totem_prefix"], role="crazed shaman", msg="") else: LASTGIVEN[shaman] = None elif shaman not in SHAMANS: LASTGIVEN[shaman] = None