def METHOD_NAME(self, evt: Event, var: GameState):
    # don't do this n1
    if var.night_count == 0:
        return
    villagers = get_players(var)
    lpl = len(villagers)
    addroles = self._role_attribution(var, villagers, False)
    # shameless copy/paste of regular role attribution
    for role, rs in var.roles.items():
        if role in self.SECONDARY_ROLES:
            continue
        rs.clear()
    # prevent wolf.py from sending messages about a new wolf to soon-to-be former wolves
    # (note that None doesn't work, so "player" works fine)
    for player in var.main_roles:
        var.main_roles[player] = "player"
    new_evt = Event("new_role", {"messages": [], "role": None, "in_wolfchat": False}, inherit_from=None)
    for role, count in addroles.items():
        selected = random.sample(villagers, count)
        for x in selected:
            villagers.remove(x)
            new_evt.data["role"] = role
            new_evt.dispatch(var, x, var._original_main_roles[x])
            var.roles[new_evt.data["role"]].add(x)
    # for end of game stats to show what everyone ended up as on game end
    for role, pl in var.roles.items():
        if role in self.SECONDARY_ROLES:
            continue
        for p in pl:
            # discard them from all non-secondary roles, we don't have a reliable
            # means of tracking their previous role (due to traitor turning, exchange
            # totem, etc.), so we need to iterate through everything.
            # also this touches the underlying _original_[main_]roles mappings... shh
            for r in var.original_roles:
                if r in self.SECONDARY_ROLES:
                    continue
                var._original_roles[r].discard(p)
            var._original_roles[role].add(p)
            var.final_roles[p] = role
            var.main_roles[p] = role
            var._original_main_roles[p] = role