Référence
Erreurs et dépannage
Symptômes courants, causes et solutions.
Les joueurs ne peuvent pas bouger pendant la partie
Symptôme : la partie démarre, mais les disques restent immobiles au spawn (pâles et sans nom).
Cause courante : le salon est verrouillé (lockTeams()) et le démarrage de la partie a été envoyé avec gs.tl = false.
Solution : utilisez la version 0.1.4 ou supérieure, qui envoie gs.tl selon l'état réel du verrou. Si vous construisez TRIGGER_START à la main, renseignez gs.tl avec la valeur de room.state.teamsLocked.
Un joueur qui arrive pendant la partie reste bloqué au lobby
Cause : l'hôte a envoyé INFORM_IN_LOBBY puis INFORM_IN_GAME (ou l'inverse). Le client n'accepte qu'un paquet de données initiales.
Solution : depuis la 0.1.2, la bibliothèque n'envoie que INFORM_IN_GAME quand une partie démarrée avec startGame({ is }) est active. Si vous démarrez les parties autrement, passez le is pour que le salon sache qu'une partie est en cours.
La partie démarre, mais les joueurs n'apparaissent pas sur le terrain
Cause : l'IS blob est vide ou ne correspond pas à la carte/au nombre de joueurs.
Solution : capturez un blob pour chaque combinaison (voir Parties, IS blob et spectateurs) et utilisez un bal explicite.
rate_limit_tl, rate_limit_cot et autres
Cause : trop de commandes en peu de temps. Le serveur refuse et prévient par un status-message.
Solution : espacez les appels. Un lockTeams() répété n'envoie qu'une seule fois et réessaie tout seul en cas de refus.
Le lien du salon ne s'ouvre pas
Cause : dans les versions antérieures à la 0.1.3, les ids de salon de moins de 6 chiffres arrivaient sans zéros à gauche (par exemple 6813vnxpi au lieu de 006813vnxpi).
Solution : mettez la bibliothèque à jour ; room.shareLink arrive désormais complet.
RoomCreationTimeoutError ou RoomJoinTimeoutError
Le serveur n'a pas répondu à temps (par défaut : 10 s). Vérifiez le réseau et les identifiants, puis réessayez. Augmentez timeoutMs sur les réseaux lents.
room-dead avec status-room_full
Quand le bot n'était pas encore dans le salon, cela signifie qu'il est plein (terminal). S'il y était déjà, l'avis indique seulement qu'un autre joueur a été refusé.
Erreurs TypeScript venant de node_modules/bonktools
Si vous compilez avec skipLibCheck: false, le index.d.ts du paquet peut afficher des erreurs sur socket.io-client et eventemitter3. Laissez skipLibCheck: true (la valeur par défaut de tsc --init) ; avec lui, les types fonctionnent pleinement.
L'anti-AFK marque tout le monde
Le mouvement vient des frames d'input via WebRTC. Si les onglets des joueurs sont en arrière-plan, ou si WebRTC ne s'est pas connecté, aucune frame n'arrive. Voir les limites de l'anti-AFK et vérifiez que peer-input est bien émis.
Questions fréquentes
Faut-il un compte bonk.io ? Pour héberger des salons 24h/24, oui : utilisez un compte enregistré.
Sur quels systèmes ça tourne ? C'est du Node.js (20.18.1 ou plus récent), sans navigateur ni dépendances natives du jeu. Le développement et les tests ont été faits sous Windows.
Puis-je faire tourner plusieurs salons ? Oui, avec BonkSession. Un seul compte peut maintenir plusieurs salons, en respectant le throttle.
Est-ce officiel ? Non. C'est un projet indépendant, sans affiliation avec bonk.io.
Où signaler un problème ? Ouvrez une issue dans le dépôt de la bibliothèque.