Biblioteca

Times e lock

Numeração dos times, mover jogadores e travar os times com lockTeams().

Numeração dos times

NúmeroTimeConstante
0EspectadorTEAM_SPEC
1FFA (todos contra todos)TEAM_FFA
2VermelhoTEAM_RED
3AzulTEAM_BLUE
4VerdeTEAM_GREEN
5AmareloTEAM_YELLOW
ts
import { TEAM_BLUE, TEAM_SPEC } from 'bonktools';

room.setTeam(playerId, TEAM_BLUE);
room.setTeam(playerId, TEAM_SPEC);

Mover jogadores

O host move qualquer jogador com setTeam(id, team). O bot move a si mesmo com joinTeam(team).

ts
room.on('player-join', (p) => {
  // manda todo novato para o espectador
  room.setTeam(p.id, TEAM_SPEC);
});

Travar os times

ts
room.lockTeams();      // jogadores não conseguem mais trocar de time nem sair para o spec
room.unlockTeams();    // libera de novo
room.state.teamsLocked; // estado atual

Com os times travados, só o host move jogadores: room.setTeam(id, team) continua funcionando normalmente. Isso evita que alguém entre num time por conta própria e desbalanceie a partida.

Como funciona

  • Só o host trava. Chamado por um cliente que não é host, lockTeams() é ignorado e registra um aviso no log.
  • Estado local. room.state.teamsLocked é atualizado ao travar e também quando o servidor avisa (teamlock-toggle).
  • Quem entra depois já recebe a sala travada.
  • Reconstrução da sala. Se a sala cair e for recriada, o lock é reaplicado sozinho (a menos que você tenha chamado unlockTeams() antes).
  • Sem rajadas. Chamar lockTeams() várias vezes envia o packet uma vez só. Se o servidor recusar por excesso de pedidos (rate_limit_tl), a biblioteca desfaz o estado local e tenta de novo depois de 1,5 s.

setTeamLock(boolean) continua disponível; lockTeams() e unlockTeams() são atalhos.

Modo de times

room.setTeamsEnabled(true) liga o modo de times. Sem ele, todos jogam em FFA. Em football, sempre use times.