Bibliothek

Teams und Sperre

Team-Nummerierung, Spieler verschieben und Teams mit lockTeams() sperren.

Team-Nummerierung

NummerTeamKonstante
0ZuschauerTEAM_SPEC
1FFA (jeder gegen jeden)TEAM_FFA
2RotTEAM_RED
3BlauTEAM_BLUE
4GrünTEAM_GREEN
5GelbTEAM_YELLOW
ts
import { TEAM_BLUE, TEAM_SPEC } from 'bonktools';

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

Spieler verschieben

Der Host verschiebt jeden Spieler mit setTeam(id, team). Der Bot verschiebt sich selbst mit joinTeam(team).

ts
room.on('player-join', (p) => {
  // schickt jeden Neuling zu den Zuschauern
  room.setTeam(p.id, TEAM_SPEC);
});

Die Teams sperren

ts
room.lockTeams();      // Spieler können weder das Team wechseln noch zu den Zuschauern gehen
room.unlockTeams();    // entsperrt wieder
room.state.teamsLocked; // aktueller Zustand

Bei gesperrten Teams verschiebt nur der Host Spieler: room.setTeam(id, team) funktioniert weiterhin normal. So verhinderst du, dass jemand eigenständig einem Team beitritt und die Partie aus dem Gleichgewicht bringt.

Wie es funktioniert

  • Nur der Host kann sperren. Wird lockTeams() von einem Client aufgerufen, der nicht Host ist, wird es ignoriert und eine Warnung protokolliert.
  • Lokaler Zustand. room.state.teamsLocked wird beim Sperren aktualisiert und auch, wenn der Server es meldet (teamlock-toggle).
  • Spätere Beitretende erhalten den Raum bereits gesperrt.
  • Raum-Neuaufbau. Fällt der Raum aus und wird neu erstellt, wird die Sperre automatisch erneut angewendet (außer du hattest vorher unlockTeams() aufgerufen).
  • Keine Schübe. Mehrfaches Aufrufen von lockTeams() sendet das Paket nur einmal. Lehnt der Server wegen zu vieler Anfragen ab (rate_limit_tl), macht die Bibliothek den lokalen Zustand rückgängig und versucht es nach 1,5 s erneut.

setTeamLock(boolean) ist weiterhin verfügbar; lockTeams() und unlockTeams() sind Kurzformen.

Team-Modus

room.setTeamsEnabled(true) schaltet den Team-Modus ein. Ohne ihn spielen alle im FFA. Beim Fußball nutze immer Teams.