Sala 24/7

Equipos, capitanes y elección

Las reglas del PickController: equipos siempre iguales, capitanes, rotación del campeón, AFK y comandos.

El PickController de la sala 24/7 monta y rota los equipos. Todo se calcula a partir de maxTeamSize (N), y el objetivo central es que ninguna partida empiece desequilibrada (nada de 2v1, 3v1 ni 3v4).

La regla de oro: equipos siempre iguales

Antes de cada partida, el controlador calcula cuántos equipos usar y de qué tamaño:

text
equipos usados = min(número de equipos del modo, jugadores disponibles)
tamaño m       = min(N, ⌊jugadores disponibles / equipos usados⌋)

Quien sobra espera en el spec. Algunos ejemplos con fútbol (2 equipos) y N = 2:

Jugadores disponiblesPartidaEsperan en el spec
1solo0
21v10
31v11
42v20
52v21

Antes de enviar cada startGame, el controlador además comprueba los equipos reales de la sala contra lo esperado. Si alguien cambió de equipo en el último instante, lo corrige y vuelve a intentarlo en lugar de iniciar mal.

Capitanes y elección

  1. El 1.er jugador va al azul y el 2.º al rojo: son los capitanes.
  2. Los siguientes esperan en el spec, sin interrumpir la partida.
  3. Cuando el spec completa los equipos, la partida se detiene y el capitán del equipo con menos jugadores (empate: el azul) elige escribiendo el número del jugador en el chat, sin ningún comando, en 30 s. Sin respuesta, se elige al primero de la lista.
  4. Si queda un solo candidato, entra por su cuenta, sin elección.
text
Ana (blue), escribe el número del jugador que quieres elegir:
Disponibles: 1 - Carla, 2 - Diego

Con N = 3 y 6 jugadores, los capitanes se alternan: azul, rojo, azul, y el último candidato entra solo.

Fin de la partida: el ganador se queda en azul

Al terminar cada partida, un jugador en el campo informa del ganador con !win blue o !win red (sin respuesta en 20 s, sigue el azul). Entonces:

  1. El equipo perdedor completo va al final de la cola del spec.
  2. El ganador siempre se queda en azul: si ganó el rojo, todo el equipo pasa al azul.
  3. El primero de la cola se convierte en capitán del rojo y elige a los demás entre los jugadores del spec.

Ejemplo con N = 2 y un jugador extra esperando (Eva):

text
azul: Ana, Carla    rojo: Bruno, Diego    spec: Eva
> gana el rojo
azul: Bruno, Diego  rojo: Eva (capitana)  spec: Ana, Carla
> Eva escribe: 2  (Carla)
azul: Bruno, Diego  rojo: Eva, Carla      spec: Ana

Cuando alguien sale a mitad de partida

La partida se detiene para no continuar nunca desequilibrada. Si hay gente en el spec, repone el hueco (con elección del capitán, si hay opciones). Sin reposición, los equipos se reequilibran: quien sobrepasa el tamaño vuelve al principio de la cola y la partida se reinicia, por ejemplo como 1v1.

AFK

SituaciónQué ocurre
!afk en el specEl jugador pasa a AFK: no es elegido ni completa equipos
!afk de nuevoSale del AFK y va al final de la cola
!afk durante una partida, de quien está jugandoRechazado: quien juega no puede ponerse AFK
!afk entre partidas, de quien estaba en el campoPasa al spec como AFK y se repone el hueco
12 s sin moverse ni hablar, en partidaSolo se le avisa; pasa a AFK al final de la partida

Los mensajes del bot siguen el formato o jogador X agora está afk! y o jogador X saiu do afk!.

Comandos

ComandoQuién lo usaQué hace
!afkcualquier jugadorAlterna el AFK
<n> (solo el número)capitán con el turnoElige al jugador n.º n de la lista (!pick <n> sigue aceptándose)
!win blue · !win redjugador en el campoInforma del ganador
!start · !stopjugador en el campoInicia o detiene la partida (!stop retiene el reinicio hasta el siguiente !start)
!pingcualquier jugadorResponde Pong!

Protecciones

  • Equipos bloqueados. El bot llama a room.lockTeams(): los jugadores no cambian de equipo por su cuenta.
  • Reversión como respaldo. Si aun así alguien sale de un equipo o entra en uno por su cuenta, el controlador lo revierte o lo trata como una salida.
  • Comandos solo de quien juega. !start, !stop y !win de espectadores se rechazan.
  • Otros modos. En los modos de 4 equipos (classic, arrows...), el primer equipo es fijo y los demás rotan en cada partida, con las mismas reglas de tamaño igual.

Cómo se prueba

El controlador se ejecuta contra una sala falsa que imita al servidor (eco de cambios de equipo, inicio y fin de partida asíncronos). Además de decenas de escenarios, un fuzz ejecuta cientos de secuencias aleatorias de entradas, salidas, !afk, elecciones, !win, cambios de equipo y comandos, y comprueba en cada partida iniciada que los equipos son iguales, no superan N y no tienen AFK en el campo, y que al final todos los jugadores están en el equipo que el controlador registró.