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:
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 disponibles | Partida | Esperan en el spec |
|---|---|---|
| 1 | solo | 0 |
| 2 | 1v1 | 0 |
| 3 | 1v1 | 1 |
| 4 | 2v2 | 0 |
| 5 | 2v2 | 1 |
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
- El 1.er jugador va al azul y el 2.º al rojo: son los capitanes.
- Los siguientes esperan en el spec, sin interrumpir la partida.
- 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.
- Si queda un solo candidato, entra por su cuenta, sin elección.
Ana (blue), escribe el número del jugador que quieres elegir:
Disponibles: 1 - Carla, 2 - DiegoCon 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:
- El equipo perdedor completo va al final de la cola del spec.
- El ganador siempre se queda en azul: si ganó el rojo, todo el equipo pasa al azul.
- 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):
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: AnaCuando 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ón | Qué ocurre |
|---|---|
!afk en el spec | El jugador pasa a AFK: no es elegido ni completa equipos |
!afk de nuevo | Sale del AFK y va al final de la cola |
!afk durante una partida, de quien está jugando | Rechazado: quien juega no puede ponerse AFK |
!afk entre partidas, de quien estaba en el campo | Pasa al spec como AFK y se repone el hueco |
| 12 s sin moverse ni hablar, en partida | Solo 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
| Comando | Quién lo usa | Qué hace |
|---|---|---|
!afk | cualquier jugador | Alterna el AFK |
<n> (solo el número) | capitán con el turno | Elige al jugador n.º n de la lista (!pick <n> sigue aceptándose) |
!win blue · !win red | jugador en el campo | Informa del ganador |
!start · !stop | jugador en el campo | Inicia o detiene la partida (!stop retiene el reinicio hasta el siguiente !start) |
!ping | cualquier jugador | Responde 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,!stopy!winde 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ó.