Sala 24/7
Equipas, capitães e escolha
As regras do PickController: equipas sempre iguais, capitães, rotação do campeão, AFK e comandos.
O PickController da sala 24/7 monta e rotaciona as equipas. Tudo é calculado a partir de maxTeamSize (N), e o objetivo central é que nenhuma partida comece desequilibrada (nada de 2v1, 3v1 ou 3v4).
A regra de ouro: equipas sempre iguais
Antes de cada partida, o controlador calcula quantas equipas usar e de que tamanho:
equipas usadas = min(número de equipas do modo, jogadores disponíveis)
tamanho m = min(N, ⌊jogadores disponíveis / equipas usadas⌋)Quem sobra espera no spec. Alguns exemplos com football (2 equipas) e N = 2:
| Jogadores disponíveis | Partida | Espera no spec |
|---|---|---|
| 1 | solo | 0 |
| 2 | 1v1 | 0 |
| 3 | 1v1 | 1 |
| 4 | 2v2 | 0 |
| 5 | 2v2 | 1 |
Antes de enviar cada startGame, o controlador ainda confere as equipas reais da sala contra o esperado. Se alguém trocou de equipa no último instante, ele corrige e tenta novamente, em vez de iniciar errado.
Capitães e escolha
- O 1º jogador vai para o azul e o 2º para o vermelho: eles são os capitães.
- Os seguintes esperam no spec, sem interromper a partida.
- Quando o spec completa as equipas, a partida pára e o capitão da equipa com menos jogadores (empate: o azul) escolhe escrevendo o número do jogador no chat, sem nenhum comando, dentro de 30 s. Sem resposta, escolhe o primeiro da lista.
- Se sobrar um único candidato, ele entra sozinho, sem escolha.
Ana (blue), digite o número do jogador que quer escolher:
Disponíveis: 1 - Carla, 2 - DiegoCom N = 3 e 6 jogadores, os capitães alternam: azul, vermelho, azul, e o último candidato entra sozinho.
Fim da partida: quem vence fica no azul
Ao fim de cada partida, um jogador em campo informa o vencedor com !win blue ou !win red (sem resposta em 20 s, o azul segue). Então:
- O equipa perdedora inteira vai para o fim da fila do spec.
- O vencedor sempre fica no azul: se o vermelho ganhou, ele inteiro é movido para o azul.
- O primeiro da fila vira capitão do vermelho e escolhe os demais entre os jogadores do spec.
Exemplo com N = 2 e um jogador extra à espera (Eva):
azul: Ana, Carla vermelho: Bruno, Diego spec: Eva
> vermelho vence
azul: Bruno, Diego vermelho: Eva (capitã) spec: Ana, Carla
> Eva digita: 2 (Carla)
azul: Bruno, Diego vermelho: Eva, Carla spec: AnaQuando alguém sai no meio da partida
A partida pára para nunca continuar desequilibrada. Se há gente no spec, ela repõe a vaga (com escolha do capitão, se houver opção). Sem reposição, as equipas são reequilibradas: quem passa do tamanho volta ao início da fila e a partida reinicia, por exemplo em 1v1.
AFK
| Situação | O que acontece |
|---|---|
!afk no spec | O jogador fica AFK: não é escolhido nem completa equipas |
!afk novamente | Sai do AFK e volta ao fim da fila |
!afk em partida, de quem está a jogar | Recusado: quem joga não pode ficar AFK |
!afk entre partidas, de quem estava em campo | Vai para o spec como AFK e a vaga é reposta |
| 12 s sem se mexer nem falar, em partida | Só é avisado; vai para o AFK ao fim da partida |
As mensagens do bot seguem o formato o jogador X agora está afk! e o jogador X saiu do afk!.
Comandos
| Comando | Quem usa | O que faz |
|---|---|---|
!afk | qualquer jogador | Alterna AFK |
<n> (só o número) | capitão da vez | Escolhe o jogador nº n da lista (!pick <n> continua aceito) |
!win blue · !win red | jogador em campo | Informa o vencedor |
!start · !stop | jogador em campo | Inicia ou pára a partida (!stop segura o reinício até o próximo !start) |
!ping | qualquer jogador | Responde Pong! |
Proteções
- Equipas bloqueadas. O bot chama
room.lockTeams(): jogadores não trocam de equipa sozinhos. - Reversão como reserva. Se mesmo assim alguém sair da equipa ou entrar em um por conta própria, o controlador reverte ou trata como saída.
- Comandos só de quem joga.
!start,!stope!winde espectadores são recusados. - Outros modos. Nos modos de 4 equipas (classic, arrows...), a primeira equipa é fixo e os demais rotacionam a cada partida, com as mesmas regras de tamanho igual.
Como isso é testado
O controlador corre contra uma sala falsa que imita o servidor (eco de trocas de equipa, início e fim de partida assíncronos). Além de dezenas de cenários, um fuzz executa centenas de sequências aleatórias de entradas, saídas, !afk, escolhas, !win, trocas de equipa e comandos, e verifica a cada partida iniciada que as equipas são iguais, não passam de N e não têm AFK em campo, e que no fim todos os jogadores estão na equipa que o controlador registrou.