Biblioteca

Equipas e lock

Numeração das equipas, mover jogadores e bloquear as equipas com lockTeams().

Numeração das equipas

NúmeroEquipaConstante
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 as equipas

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

Com as equipas bloqueadas, só o host move jogadores: room.setTeam(id, team) continua funcionando normalmente. Isso evita que alguém entre numa equipa por conta própria e desequilibre a partida.

Como funciona

  • Só o host bloqueia. Chamado por um cliente que não é host, lockTeams() é ignorado e registra um aviso no log.
  • Estado local. room.state.teamsLocked é atualizado ao bloquear e também quando o servidor avisa (teamlock-toggle).
  • Quem entra depois já recebe a sala bloqueada.
  • 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 pacote uma vez só. Se o servidor recusar por excesso de pedidos (rate_limit_tl), a biblioteca desfaz o estado local e tenta novamente depois de 1,5 s.

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

Modo de equipas

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