Biblioteca
Equipas e lock
Numeração das equipas, mover jogadores e bloquear as equipas com lockTeams().
Numeração das equipas
| Número | Equipa | Constante |
|---|---|---|
0 | Espectador | TEAM_SPEC |
1 | FFA (todos contra todos) | TEAM_FFA |
2 | Vermelho | TEAM_RED |
3 | Azul | TEAM_BLUE |
4 | Verde | TEAM_GREEN |
5 | Amarelo | TEAM_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 atualCom 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.