Biblioteca
Equipos y bloqueo
Numeración de equipos, mover jugadores y bloquear equipos con lockTeams().
Numeración de equipos
| Número | Equipo | Constante |
|---|---|---|
0 | Espectador | TEAM_SPEC |
1 | FFA (todos contra todos) | TEAM_FFA |
2 | Rojo | TEAM_RED |
3 | Azul | TEAM_BLUE |
4 | Verde | TEAM_GREEN |
5 | Amarillo | TEAM_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 actualCon 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.teamsLockedse 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.