Referência

Erros e solução de problemas

Sintomas comuns, causas e como resolver.

Os jogadores não conseguem se mover na partida

Sintoma: a partida começa, mas os discos ficam parados no spawn (claros e sem nome).

Causa comum: a sala está travada (lockTeams()) e o início da partida foi enviado com gs.tl = false.

Solução: use a versão 0.1.4 ou superior, que envia gs.tl de acordo com o estado real do lock. Se você monta o TRIGGER_START à mão, preencha gs.tl com o valor de room.state.teamsLocked.

Um jogador que entra durante a partida fica preso no lobby

Causa: o host enviou INFORM_IN_LOBBY e depois INFORM_IN_GAME (ou o contrário). O client só aceita um pacote de dados iniciais.

Solução: a partir da 0.1.2 a biblioteca envia apenas INFORM_IN_GAME quando há partida ativa iniciada com startGame({ is }). Se você inicia partidas por outro caminho, passe o is para que a sala saiba que há uma partida em andamento.

A partida inicia, mas os jogadores não aparecem em campo

Causa: o IS blob está vazio ou não corresponde ao mapa/número de jogadores.

Solução: capture um blob para cada combinação (veja Partidas e IS blob) e use bal explícito.

rate_limit_tl, rate_limit_cot e outros

Causa: comandos demais em pouco tempo. O servidor recusa e avisa com um status-message.

Solução: espace as chamadas. lockTeams() repetido já envia uma vez só e tenta de novo sozinho se for recusado.

Causa: em versões anteriores à 0.1.3, ids de sala com menos de 6 dígitos vinham sem zeros à esquerda (por exemplo 6813vnxpi em vez de 006813vnxpi).

Solução: atualize a biblioteca; room.shareLink já vem completo.

RoomCreationTimeoutError ou RoomJoinTimeoutError

O servidor não respondeu a tempo (padrão: 10 s). Verifique a rede, as credenciais e tente novamente. Aumente timeoutMs em redes lentas.

room-dead com status-room_full

Quando o bot ainda não estava na sala, significa que ela está cheia (terminal). Se ele já estava, o aviso só indica que outro jogador foi recusado.

Erros de TypeScript vindos de node_modules/bonktools

Se você compila com skipLibCheck: false, o index.d.ts do pacote pode mostrar erros sobre socket.io-client e eventemitter3. Deixe skipLibCheck: true (o padrão do tsc --init); com ele, os tipos funcionam por completo.

O anti-AFK marca todo mundo

O movimento vem dos frames de input por WebRTC. Se as abas dos jogadores estão em segundo plano, ou o WebRTC não conectou, nenhum frame chega. Veja as limitações do anti-AFK e confira se peer-input está sendo emitido.

Perguntas frequentes

Precisa de conta do bonk.io? Para hospedar salas 24/7, sim: use uma conta registrada.

Em quais sistemas roda? É Node.js (20.18.1 ou superior) sem navegador nem dependências nativas do jogo. O desenvolvimento e os testes foram feitos em Windows.

Posso rodar várias salas? Sim, com BonkSession. Uma única conta pode manter várias salas, respeitando o throttle.

É oficial? Não. É um projeto independente, sem afiliação com o bonk.io.

Onde reporto um problema? Abra uma issue no repositório da biblioteca.