Salon 24h/24

Équipes, capitaines et choix

Les règles du PickController : équipes toujours égales, capitaines, rotation du champion, AFK et commandes.

Le PickController du salon 24h/24 forme et fait tourner les équipes. Tout est calculé à partir de maxTeamSize (N), et l'objectif central est qu'aucune partie ne démarre déséquilibrée (pas de 2v1, 3v1 ou 3v4).

La règle d'or : des équipes toujours égales

Avant chaque partie, le contrôleur calcule combien d'équipes utiliser et de quelle taille :

text
équipes utilisées = min(nombre d'équipes du mode, joueurs disponibles)
taille m          = min(N, ⌊joueurs disponibles / équipes utilisées⌋)

Ceux qui restent attendent en spec. Quelques exemples avec le football (2 équipes) et N = 2 :

Joueurs disponiblesPartieAttendent en spec
1solo0
21v10
31v11
42v20
52v21

Avant d'envoyer chaque startGame, le contrôleur vérifie aussi les équipes réelles du salon par rapport à l'attendu. Si quelqu'un a changé d'équipe à la dernière seconde, il corrige et réessaie au lieu de démarrer de travers.

Capitaines et choix

  1. Le 1er joueur va en bleu et le 2e en rouge : ce sont les capitaines.
  2. Les suivants attendent en spec, sans interrompre la partie.
  3. Quand le spec complète les équipes, la partie s'arrête et le capitaine de l'équipe la moins fournie (égalité : le bleu) choisit en tapant le numéro du joueur dans le chat, sans aucune commande, en 30 s. Sans réponse, le premier de la liste est choisi.
  4. S'il ne reste qu'un seul candidat, il entre tout seul, sans choix.
text
Ana (blue), tapez le numéro du joueur que vous voulez choisir :
Disponibles : 1 - Carla, 2 - Diego

Avec N = 3 et 6 joueurs, les capitaines alternent : bleu, rouge, bleu, et le dernier candidat entre tout seul.

Fin de partie : le vainqueur reste en bleu

À la fin de chaque partie, un joueur sur le terrain indique le vainqueur avec !win blue ou !win red (sans réponse en 20 s, le bleu reste). Ensuite :

  1. Toute l'équipe perdante va en fin de file du spec.
  2. Le vainqueur reste toujours en bleu : si le rouge a gagné, toute l'équipe passe en bleu.
  3. Le premier de la file devient capitaine du rouge et choisit les autres parmi les joueurs du spec.

Exemple avec N = 2 et un joueur en plus qui attend (Eva) :

text
bleu : Ana, Carla    rouge : Bruno, Diego    spec : Eva
> le rouge gagne
bleu : Bruno, Diego  rouge : Eva (capitaine) spec : Ana, Carla
> Eva tape : 2  (Carla)
bleu : Bruno, Diego  rouge : Eva, Carla      spec : Ana

Quand quelqu'un part en pleine partie

La partie s'arrête pour ne jamais continuer déséquilibrée. S'il y a du monde en spec, ce dernier comble la place (avec un choix du capitaine, s'il y a le choix). Sans remplaçant, les équipes sont rééquilibrées : celui qui dépasse la taille retourne au début de la file et la partie redémarre, par exemple en 1v1.

AFK

SituationCe qui se passe
!afk en specLe joueur passe AFK : il n'est pas choisi et ne complète pas les équipes
!afk de nouveauSort de l'AFK et va en fin de file
!afk pendant une partie, par quelqu'un qui joueRefusé : celui qui joue ne peut pas passer AFK
!afk entre deux parties, par quelqu'un qui était sur le terrainPasse en spec comme AFK et sa place est comblée
12 s sans bouger ni écrire, en partieSimplement prévenu ; passe AFK à la fin de la partie

Les messages du bot suivent le format o jogador X agora está afk! et o jogador X saiu do afk!.

Commandes

CommandeQui l'utiliseCe qu'elle fait
!afktout joueurBascule l'AFK
<n> (juste le numéro)capitaine dont c'est le tourChoisit le joueur n° n de la liste (!pick <n> reste accepté)
!win blue · !win redjoueur sur le terrainIndique le vainqueur
!start · !stopjoueur sur le terrainDémarre ou arrête la partie (!stop retient le redémarrage jusqu'au prochain !start)
!pingtout joueurRépond Pong!

Protections

  • Équipes verrouillées. Le bot appelle room.lockTeams() : les joueurs ne changent pas d'équipe seuls.
  • Annulation en secours. Si malgré tout quelqu'un quitte une équipe ou en rejoint une de lui-même, le contrôleur annule ou traite cela comme un départ.
  • Commandes réservées à ceux qui jouent. !start, !stop et !win venant de spectateurs sont refusés.
  • Autres modes. Dans les modes à 4 équipes (classic, arrows...), la première équipe est fixe et les autres tournent à chaque partie, avec les mêmes règles de taille égale.

Comment c'est testé

Le contrôleur tourne face à un faux salon qui imite le serveur (écho des changements d'équipe, début et fin de partie asynchrones). En plus de dizaines de scénarios, un fuzz exécute des centaines de séquences aléatoires d'arrivées, départs, !afk, choix, !win, changements d'équipe et commandes, et vérifie à chaque partie démarrée que les équipes sont égales, ne dépassent pas N et n'ont aucun AFK sur le terrain, et qu'à la fin tous les joueurs sont dans l'équipe enregistrée par le contrôleur.