Biblioteca

Equipos y bloqueo

Numeración de equipos, mover jugadores y bloquear equipos con lockTeams().

Numeración de equipos

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

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

Mover jugadores

El host mueve a cualquier jugador con setTeam(id, team). El bot se mueve a sí mismo con joinTeam(team).

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

Bloquear los equipos

ts
room.lockTeams();      // los jugadores ya no pueden cambiar de equipo ni pasar a espectador
room.unlockTeams();    // desbloquea de nuevo
room.state.teamsLocked; // estado actual

Con los equipos bloqueados, solo el host mueve jugadores: room.setTeam(id, team) sigue funcionando con normalidad. Esto evita que alguien entre en un equipo por su cuenta y desequilibre la partida.

Cómo funciona

  • Solo el host puede bloquear. Si lo llama un cliente que no es host, lockTeams() se ignora y registra una advertencia.
  • Estado local. room.state.teamsLocked se actualiza al bloquear y también cuando el servidor lo comunica (teamlock-toggle).
  • Quienes entran después ya reciben la sala bloqueada.
  • Reconstrucción de la sala. Si la sala cae y se recrea, el bloqueo se reaplica automáticamente (salvo que antes hayas llamado a unlockTeams()).
  • Sin ráfagas. Llamar a lockTeams() varias veces envía el paquete una sola vez. Si el servidor lo rechaza por exceso de peticiones (rate_limit_tl), la biblioteca deshace el estado local y reintenta a los 1,5 s.

setTeamLock(boolean) sigue disponible; lockTeams() y unlockTeams() son atajos.

Modo de equipos

room.setTeamsEnabled(true) activa el modo de equipos. Sin él, todos juegan en FFA. En fútbol, usa siempre equipos.