Eine professionelle Scrims-Plattform für die deutschsprachige Apex-Legends-Szene.
Die Idee
Kein weiterer Discord-Server mit Suchkanal, sondern ein System, das die Organisation von Scrims komplett übernimmt. Von 2023 bis 2024 gemeinsam mit Hayabuza aufgebaut – im Peak mit über 600 Mitgliedern.
Scrimz war Hayabuzas Projekt: Er hat die Website scrimz.eu, die Community und das Marketing übernommen. Ich war im Hintergrund der Hauptentwickler und habe den Discord-Bot und das Websocket-System gebaut, das direkt mit dem Spiel spricht.
Scrims sind Übungsturniere, bei denen viele Teams in einer privaten Lobby gegeneinander spielen. Normalerweise heißt das: Anmeldungen per Hand sammeln, Lobbycodes verteilen, nach jeder Runde Kills und Platzierungen abschreiben und Punkte ausrechnen. Genau diese Arbeit sollte wegfallen.
Das Herzstück: der automatische Turnierablauf
Bei 20 Teams und sechs Runden fallen schnell Hunderte Einzelwerte an, und jeder Tippfehler landet in der Wertung. Deshalb sollte der komplette Ablauf ohne Handarbeit funktionieren, von der Anmeldung bis zur Gesamtwertung:
- Ein Host legt im Discord über einen Assistenten in neun Schritten ein Turnier an: Modus (Battle Royale, ALGS oder 3v3), Teamgröße, Solo- oder Team-Anmeldung, erlaubte Ränge und Plattformen, Killcap und die Maps zur Abstimmung.
- Der Bot postet die Warteschlange. Spieler treten per Klick bei und stimmen über die Map ab, ein Balken zeigt, wie voll die Lobby ist (bei Trios 60 Plätze). Wer nicht verifiziert ist, den falschen Rang hat oder gesperrt ist, kommt nicht rein. Teams meldet ihr Team-Admin an.
- Für geplante Turniere gibt es eine Voranmeldung, verknüpft mit einem Discord-Event. Zwölf Stunden vor dem Start ist Anmeldeschluss.
- Wer allein angemeldet ist, wird in faire Teams verteilt. Dafür habe ich ein eigenes Matchmaking gebaut, das zwei Quellen verbindet: die Daten, die wir in unseren eigenen Turnieren gesammelt haben (K/D, Punkte, Schaden), und öffentliche Stats von apexlegendsstatus.com (Level, aktuelle Ranked-Punkte und die der Vorsaison). Daraus entsteht ein Wert pro Spieler. Dann tauscht der Bot so lange Spieler zwischen den Teams, bis die Summen möglichst gleich sind.
- Jeder Spieler bekommt eine Nachricht mit Team, Mitspielern, Lobbycode und einem Direktlink in den Sprachkanal seines Teams.
- Der Host steuert die Lobby aus dem Discord: Lobby erstellen, die Map aus dem Voting wird automatisch gesetzt, Matchmaking starten, pausieren.
- Nach jeder Runde postet der Bot das Ergebnis mit Siegerteam, MVP und Dauer, ab fünf Teams als Leaderboard-Grafik. Am Ende kommt die Gesamtwertung, die auch auf scrimz.eu landet.
Möglich macht das die Apex Legends Live API von Respawn. Das Spiel des Hosts verbindet sich über eine WebSocket-Verbindung mit meinem Server. Dafür bekommt jeder Host einen persönlichen Token und eine fertige Konfigurationsdatei. Über dieselbe Verbindung schickt der Server Befehle zurück ins Spiel.
Knifflig war vor allem die Auswertung:
- Die Ereignisse kommen im binären Protobuf-Format. Allein eine Runde mit 15 Teams brachte es auf gut 15.000 Ereignisse.
- Die Platzierung steht nirgends direkt drin, sie ergibt sich aus der Reihenfolge, in der die Teams ausscheiden.
- Bei Turnieren mit EA-Statstoken gleicht das System seine Zahlen mit den offiziellen Private-Match-Statistiken von Respawn ab. Dabei kommen Trefferquote und Headshots hinzu.
- Abgebrochene Runden erkennt es an zu wenigen Ereignissen und meldet sie, statt sie zu werten.
Gewertet wurde nach festen Regeln: Im Battle Royale gab es 12 Punkte für den Sieg, dann 9, 7, 5 und so weiter, plus einen Punkt pro Kill. Im 3v3 gab es 5, 3 und 1 Punkt plus einen halben pro Kill, auf Wunsch mit Killcap. Insgesamt liefen so 14 öffentliche Turniere, dazu viele Testläufe, die nicht in die offizielle Statistik zählen.
Automatisch erzeugte Rundenwertung aus einem Turnier mit 15 Teams.
Was es sonst noch kann
Für die Community:
- Konto-Verknüpfung: Mit
/link verbindet man sein Apex-Konto. Als Nachweis, dass es wirklich das eigene ist, muss man innerhalb von zwei Minuten drei zufällige Legenden auswählen.
- Rollen und Namen: Der Bot setzt den Apex-Namen als Nickname und vergibt Plattform- und Scrimz-Rang (von Unranked bis Devil). Wer den Server verlässt und zurückkommt, bekommt alles automatisch wieder.
- Ankündigungen: Neue Turniertermine werden automatisch angekündigt, 24 Stunden vorher kommt eine Erinnerung.
- Giveaways mit Enddatum, mehreren Gewinnern und auf Wunsch nur für bestimmte Rollen.
- Legendenverbot im 3v3: Wählt jemand eine gesperrte Legende, verwarnt ihn das System direkt im Ingame-Chat.
Für Hosts und Streamer:
- Automatischer Kanalwechsel: Per Stream Deck wird der Host in den Sprachkanal des Teams verschoben, das er gerade im Spiel beobachtet.
- Aufräumen: Nach dem Turnier entfernt der Bot die Team-Rollen und holt alle aus den Team-Kanälen zurück in die Lobby. Das Server-Icon zeigt, ob gerade eine Warteschlange offen ist.
Fürs Team:
- Ein Verwarnsystem mit festem Strafkatalog, das bei Wiederholung eskaliert. Die Turniersperre hebt es nach acht Tagen automatisch auf.
- Eine Statusanzeige im Discord mit Verbindungen, Mitgliederzahlen und Speicherverbrauch.
Technik
- Zwei Node.js-Dienste auf einem Hetzner-Cloudserver: der Discord-Bot (Discord.js) und der Game-Manager mit WebSocket-Server. Untereinander sprechen sie über eine interne HTTP-Schnittstelle (Express), abgesichert über Tokens und eine IP-Freigabeliste.
- MongoDB für Turniere, Hosts, Verwarnungen und Giveaways, Redis als Puffer für die Live-Ereignisse jeder Runde, dazu die MySQL-Datenbank der Website für Konten, Teams, Ränge und Ergebnisse.
- Externe Schnittstellen: Apex Live API (Protobuf-Definitionen von Respawn), Respawns Private-Match-Statistiken und die API von apexlegendsstatus.com für die Kontodaten.
- Gesteuert wurde alles nur über Discord, ein eigenes Web-Panel gab es nicht.
Was daraus wurde
Am Ende hat die deutschsprachige Apex-Szene nicht die Größe erreicht, die so eine Plattform braucht. Scrimz hat nicht den Anklang gefunden, den wir uns erhofft hatten, und der Aufwand für Entwicklung und Turnierbetrieb blieb groß. Das Projekt ist eingestellt, Bot und Server laufen nicht mehr. Die Ergebnisse der Turniere sind auf scrimz.eu/matches zu sehen.