def on_transition_night_end(evt, var): chances = var.CURRENT_GAMEMODE.TOTEM_CHANCES max_totems = sum(x["shaman"] for x in chances.values()) ps = get_players() shamans = get_all_players(("shaman", )) for s in list(LASTGIVEN): if s not in shamans: del LASTGIVEN[s] shamans = list(shamans) random.shuffle(shamans) for shaman in shamans: pl = ps[:] random.shuffle(pl) for given in itertools.chain.from_iterable(LASTGIVEN[shaman].values()): if given in pl: pl.remove(given) event = Event("num_totems", {"num": var.CURRENT_GAMEMODE.NUM_TOTEMS["shaman"]}) event.dispatch(var, shaman, "shaman") num_totems = event.data["num"] totems = {} for i in range(num_totems): target = 0 rand = random.random() * max_totems for t in chances: target += chances[t]["shaman"] if rand <= target: if t in totems: totems[t] += 1 else: totems[t] = 1 break event = Event("totem_assignment", {"totems": totems}) event.dispatch(var, shaman, "shaman") TOTEMS[shaman] = event.data["totems"] num_totems = sum(TOTEMS[shaman].values()) if num_totems > 1: shaman.send( messages["shaman_notify_multiple_known"].format("shaman")) else: shaman.send(messages["shaman_notify"].format("shaman")) tmsg = totem_message(TOTEMS[shaman]) for totem in TOTEMS[shaman]: tmsg += " " + messages[totem + "_totem"] shaman.send(tmsg) shaman.send(messages["players_list"].format(pl))
def on_transition_night_end(evt, var): chances = var.CURRENT_GAMEMODE.TOTEM_CHANCES max_totems = sum(x["shaman"] for x in chances.values()) ps = get_players() shamans = get_players(("shaman", )) for s in list(LASTGIVEN): if s not in shamans: del LASTGIVEN[s] shamans = list(shamans) random.shuffle(shamans) for shaman in shamans: pl = ps[:] random.shuffle(pl) for given in itertools.chain.from_iterable(LASTGIVEN[shaman].values()): if given in pl: pl.remove(given) target = 0 rand = random.random() * max_totems for t in chances: target += chances[t]["shaman"] if rand <= target: TOTEMS[shaman] = {t: 1} break event = Event("totem_assignment", {"totems": TOTEMS[shaman]}) event.dispatch(var, "shaman") TOTEMS[shaman] = event.data["totems"] num_totems = sum(TOTEMS[shaman].values()) if shaman.prefers_simple(): shaman.send(messages["shaman_simple"].format("shaman")) else: if num_totems > 1: shaman.send( messages["shaman_notify_multiple_known"].format("shaman")) else: shaman.send(messages["shaman_notify"].format("shaman")) tmsg = totem_message(TOTEMS[shaman]) if not shaman.prefers_simple(): for totem in TOTEMS[shaman]: tmsg += " " + messages[totem + "_totem"] shaman.send(tmsg) shaman.send(messages["players_list"].format(", ".join(p.nick for p in pl)))