API für Rocket League-Statistiken
In diesem Dokument werden die Funktionen der API für Rocket League-Spieldaten beschrieben. Zunächst müssen die Spieler dieses Feature im Spiel aktivieren, indem sie die Datei „DefaultStatsAPI.ini“ bearbeiten, so wie unten erläutert. Sobald es aktiviert ist, wird auf dem Rechner des Spielers ein WebSocket geöffnet, über das Spieldaten und -ereignisse übertragen werden. Programme von Drittanbietern können diese Daten für eine Vielzahl von Anwendungen nutzen, beispielsweise für benutzerdefinierte HUDs von Sendern.Übersicht
Die API für Statistiken sendet während eines laufenden Spiels JSON-Nachrichten über ein lokales Socket. Nachrichten werden sowohl in einem konfigurierbaren Zeitabstand als auch bei bestimmten Match-Ereignissen gesendet. Ereignisdaten werden immer im selben Tick gesendet, in dem das Ereignis eintritt, unabhängig von der PacketSendRate des Benutzers.Hinweis: Alle Konfigurationen müssen vor dem Start des Clients vorgenommen werden – Änderungen an der ini-Datei während des Betriebs erfordern einen Neustart.
Sichtbarkeit des Feldes:
- Markierte Felder BEDINGUNGSABHÄNGIG nur angezeigt, wenn relevant.
- Markierte Felder ZUSCHAUER nur angezeigt, wenn der Client als Zuschauer dabei ist oder zum Team des Spielers gehört.
Konfigurierung
Vor dem Start des Clients die Datei<Install Dir>\TAGame\Config\DefaultStatsAPI.ini bearbeiten.| Einstellung | Typ | Standard | Beschreibung |
|---|---|---|---|
| PacketSendRate | float | 0 (deaktiviert) | Anzahl der UpdateState-Pakete, die pro Sekunde gesendet werden. Zum Aktivieren des WebSockets muss der Wert größer als 0 sein. und darf 120 nicht überschreiten. |
| Port | int | 49123 | Lokaler Port, auf dem das Socket läuft. |
Nachrichtenformat
Jede Nachricht ist wie folgt aufgebaut:{
"Event": "EventName",
"Data": { /* event-specific payload */ }
}Tick
Sendung X-mal pro Sekunde, basierend auf der Einstellung „PacketSendRate“ des Spielers.
Beispiel
{
"Event": "UpdateState",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"Players": [
{
"Name": "PlayerA",
"PrimaryId": "Steam|123|0",
"Shortcut": 1,
"TeamNum": 0,
"Score": 125,
"Goals": 1,
"Shots": 2,
"Assists": 0,
"Saves": 1,
"Touches": 14,
"CarTouches": 3,
"Demos": 0,
"bHasCar": true,
"Speed": 1200,
"Boost": 45,
"bBoosting": true,
"bOnGround": true,
"bOnWall": false,
"bPowersliding": false,
"bDemolished": true,
"Attacker": {
"Name": "PlayerB",
"Shortcut": 2,
"TeamNum": 1
},
"bSupersonic": true
}
],
"Game": {
"Teams": [
{
"Name": "Blue",
"TeamNum": 0,
"Score": 1,
"ColorPrimary": "0000FF",
"ColorSecondary": "0000AA"
}
],
"TimeSeconds": 180,
"bOvertime": false,
"Frame": 120,
"Elapsed": 50.2,
"Ball": {
"Speed": 850.5,
"TeamNum": 0
},
"bReplay": false,
"bHasWinner": true,
"Winner": "Blue",
"Arena": "Stadium_P",
"bHasTarget": true,
"Target": {
"Name": "PlayerA",
"Shortcut": 1,
"TeamNum": 0
}
}
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| Players | array | Ein Eintrag pro Spieler im Match. |
| Name | string | Anzeigename. |
| PrimaryId | string | Plattform-ID im Format „Plattform|Uid|Splitscreen“ (z. B. „Steam|123|0“, „Epic|456|0“). |
| Shortcut | int | Schnellzugriffsnummer für Zuschauer. |
| TeamNum | int | Team-Index (0 = Blau, 1 = Orange). |
| Score | int | Gesamtergebnis des Matches. |
| Goals | int | In diesem Match erzielte Tore. |
| Shots | int | In diesem Match erfolgte Torschüsse. |
| Assists | int | In diesem Match verdiente Vorlagen. |
| Saves | int | In diesem Match erzielte Paraden. |
| Touches | int | Ballberührungen insgesamt: |
| CarTouches | int | Berührungen durch die Karosserie (nicht durch den Ball). |
| Demos | int | Zerstörungen verursacht. |
| bHasCar | bool | ZUSCHAUERGilt, wenn der Spieler gerade ein Fahrzeug hat. |
| Speed | float | ZUSCHAUERFahrzeuggeschwindigkeit in Unreal Units pro Sekunde. |
| Boost | int | ZUSCHAUERRaketenspur-Menge 0–100. |
| bBoosting | bool | ZUSCHAUERGilt, wenn der Spieler gerade eine Raketenspur nutzt. |
| bOnGround | bool | ZUSCHAUERGilt, wenn mindestens drei Räder den Spielbereich berühren. |
| bOnWall | bool | ZUSCHAUERGilt, wenn das Fahrzeug gerade an einer Wand fährt. |
| bPowersliding | bool | ZUSCHAUERGilt, wenn der Spieler gerade die Handbremse zieht. |
| bDemolished | bool | ZUSCHAUERWahr, wenn das Fahrzeug derzeit zerstört ist. |
| bSupersonic | bool | ZUSCHAUERWahr, wenn das Fahrzeug mit Überschallgeschwindigkeit fährt. |
| Attacker | object | BEDINGUNGSABHÄNGIGDer Spieler, der diesen Spieler zerstört hat. Nur bei Zerstörung vorhanden. |
| Name | string | Name des Spielers, der diesen Spieler zerstört hat. |
| Shortcut | int | Zuschauer-Tastenkürzel für den Angreifer. |
| TeamNum | int | Team-Index des Angreifers. |
| Game | object | Match-Metadaten. |
| Teams | array | Ein Eintrag pro Team, sortiert nach TeamNum. |
| Name | string | Teamname. |
| TeamNum | int | Team-Index. |
| Score | int | Team-Tore. |
| ColorPrimary | string | Hex-Farbcode (ohne #) für die Hauptfarbe des Teams. |
| ColorSecondary | string | Hex-Farbcode für die Zweitfarbe des Teams. |
| TimeSeconds | int | Verbleibende Sekunden im Match. |
| bOvertime | bool | Wahr, wenn das Match in die Verlängerung geht. |
| Ball | object | Aktueller Status des Balls. |
| Speed | float | Aktuelle Ballgeschwindigkeit in Unreal Units pro Sekunde. |
| TeamNum | int | Index des letzten Teams, das den Ball berührt hat. 255, wenn der Ball nicht berührt wurde. |
| bReplay | bool | Wahr, wenn eine Torwiederholung oder eine Spielverlaufswiederholung aktiv ist. |
| bHasWinner | bool | Wahr, wenn ein Team gewonnen hat. |
| Winner | string | Name des Gewinnerteams. Leere Zeile, wenn es noch keinen Gewinner gibt. |
| Arena | string | Asset-Name der aktuellen Karte (z. B. „Stadium_P“). |
| bHasTarget | bool | Wahr, wenn der Kunde gerade ein bestimmtes Fahrzeug ansieht. |
| Target | object | BEDINGUNGSABHÄNGIGPlayer currently being viewed. Members are an empty string or 0 if the player does not have a spectator target. |
| Name | string | Name des Spielers, der gerade angezeigt wird. |
| Shortcut | int | Zuschauer-Tastenkürzel für den angezeigten Spieler. |
| TeamNum | int | Teamindex des angezeigten Spielers. |
| Frame | int | BEDINGUNGSABHÄNGIGAktuelle Frame-Nummer, wenn eine Wiederholung aktiv ist. |
| Elapsed | float | BEDINGUNGSABHÄNGIGSekunden, die seit Spielbeginn vergangen sind, wenn eine Wiederholung aktiv ist. |
Events
Sendung eines Frames nachdem der Ball getroffen wurde.
Beispiel
{
"Event": "BallHit",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"Players": [
{
"Name": "PlayerA",
"Shortcut": 1,
"TeamNum": 0
}
],
"Ball": {
"PreHitSpeed": 0,
"PostHitSpeed": 1450.2,
"Location": {
"X": -512,
"Y": 100,
"Z": 200
}
}
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| Players | array | Spieler, die den Ball in diesem Frame treffen. |
| Name | string | Anzeigename. |
| Shortcut | int | Schnellzugriff für Zuschauer. |
| TeamNum | int | Team-Index (0 = Blau, 1 = Orange). |
| Ball | object | Status des Balls im Moment des Treffers. |
| PreHitSpeed | float | Ballgeschwindigkeit vor dem Treffer (Unreal Units/Sekunde). |
| PostHitSpeed | float | Ballgeschwindigkeit nach dem Treffer (Unreal Units/Sekunde). |
| Location | vector | Weltkoordinaten (X, Y, Z) des Balls beim Aufprall. |
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung nach Änderung der Spielzeit.
Beispiel
{
"Event": "ClockUpdatedSeconds",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"TimeSeconds": 180,
"bOvertime": false
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| TimeSeconds | int | Verbleibende Sekunden im Match. |
| bOvertime | bool | Wahr, wenn das Spiel in der Verlängerung ist. |
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung zu Beginn jeder Runde, sobald der Countdown startet.
Beispiel
{
"Event": "CountdownBegin",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung nach einem Lattentreffer.
Beispiel
{
"Event": "CrossbarHit",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"BallLocation": {
"X": 120,
"Y": -2944,
"Z": 320
},
"BallSpeed": 870.3,
"ImpactForce": 127.5,
"BallLastTouch": {
"Player": {
"Name": "PlayerA",
"Shortcut": 1,
"TeamNum": 0
},
"Speed": 120
}
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| BallSpeed | float | Ballgeschwindigkeit beim Aufprall. |
| ImpactForce | float | Aufprallkraft des Balls relativ zur Normalen der Latte. |
| BallLastTouch | object | Die letzte Berührung des Balls, bevor er an die Latte prallte. |
| Player | object | Der Spieler, der den Ball zuletzt berührt hat. |
| Name | string | Anzeigename. |
| Shortcut | int | Schnellzugriff für Zuschauer. |
| TeamNum | int | Team-Index (0 = Blau, 1 = Orange). |
| Speed | float | Die Ballgeschwindigkeit, die sich aus diesem Treffer ergibt. |
| BallLocation | vector | Die Weltkoordinaten (X, Y, Z) des Balls zum Zeitpunkt des Aufpralls. |
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung nach Ende der Torwiederholung.
Beispiel
{
"Event": "GoalReplayEnd",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung zu Beginn einer Torwiederholung.
Beispiel
{
"Event": "GoalReplayStart",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung beim Explodieren des Balls während einer Torwiederholung. Bei Überspringen der Wiederholung wird dieses Ereignis nicht ausgelöst.
Beispiel
{
"Event": "GoalReplayWillEnd",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung bei Torerfolg.
Beispiel
{
"Event": "GoalScored",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"GoalSpeed": 87.3,
"GoalTime": 127.5,
"ImpactLocation": {
"X": 0,
"Y": -2944,
"Z": 320
},
"Scorer": {
"Name": "PlayerA",
"Shortcut": 1,
"TeamNum": 0
},
"Assister": {
"Name": "PlayerC",
"Shortcut": 3,
"TeamNum": 0
},
"BallLastTouch": {
"Player": {
"Name": "PlayerA",
"Shortcut": 1,
"TeamNum": 0
},
"Speed": 125
}
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| GoalSpeed | float | Ballgeschwindigkeit (Unreal Units/Sekunde) beim Überqueren der Torlinie. |
| GoalTime | float | Dauer der vorherigen Runde in Sekunden. |
| ImpactLocation | vector | Die Weltkoordinaten (X, Y, Z) des Balls zum Zeitpunkt des Tores. |
| Scorer | object | Der Spieler, der das Tor geschossen hat. |
| Name | string | Anzeigenamen des Torjägers. |
| Shortcut | int | Schnellzugriff für Zuschauer. |
| TeamNum | int | Teamindex des Torjägers. |
| BallLastTouch | object | Die letzte Ballberührung vor dem Tor. |
| Player | object | Der Spieler, der den Ball zuletzt berührt hat. |
| Name | string | Name des Spielers, der den Ball zuletzt berührt hat. |
| Shortcut | int | Schnellzugriff für Zuschauer. |
| TeamNum | int | Team-Index. |
| Speed | float | Die Ballgeschwindigkeit, die sich aus dieser Berührung ergibt. |
| Assister | object | BEDINGUNGSABHÄNGIGGleiche Form wie Scorer. Nur dann aufgeführt, wenn eine Vorlage verzeichnet wurde. |
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung, sobald alle Teams erstellt und übernommen wurden.
Beispiel
{
"Event": "MatchCreated",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung bei Beginn des ersten Countdowns.
Beispiel
{
"Event": "MatchInitialized",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung beim Verlassen des Spiels.
Beispiel
{
"Event": "MatchDestroyed",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung nach Spielende und Feststellung des Siegers.
Beispiel
{
"Event": "MatchEnded",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"WinnerTeamNum": 0
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
| WinnerTeamNum | int | Teamindex des Gewinnerteams. |
Sendung bei Spielunterbrechung durch einen Match-Administrator.
Beispiel
{
"Event": "MatchPaused",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung beim Fortsetzen des Spiels durch einen Match-Administrator.
Beispiel
{
"Event": "MatchUnpaused",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung beim Erreichen des Podiums nach Spielende.
Beispiel
{
"Event": "PodiumStart",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung nach Initialisierung einer Wiederholung. Dies gilt nicht für Torwiederholungen, sondern nur für Wiederholungen über das Menü „Matchverlauf“.
Beispiel
{
"Event": "ReplayCreated",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung beim Eintritt des Spiels in den aktiven Zustand (nach Ablauf des Countdowns).
Beispiel
{
"Event": "RoundStarted",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
Sendung bei Erhalt einer Statistik.
Beispiel
{
"Event": "StatfeedEvent",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"EventName": "Demolish",
"Type": "Demolition",
"MainTarget": {
"Name": "PlayerA",
"Shortcut": 1,
"TeamNum": 0
},
"SecondaryTarget": {
"Name": "PlayerB",
"Shortcut": 2,
"TeamNum": 1
}
}
}| Spielfeld | Typ | Beschreibung |
|---|---|---|
| EventName | string | Asset-Name des StatEvent (z. B. „Demolish“, „Save“). |
| Type | string | Lokalisiertes Display-Label für die Statistik (z. B. „Demolition“). |
| MainTarget | object | Spieler, der diese Statistik erzielt hat. |
| Name | string | Anzeigename. |
| Shortcut | int | Schnellzugriff für Zuschauer. |
| TeamNum | int | Team-Index (0 = Blau, 1 = Orange). |
| MatchGuid | string | Nur für Online- oder LAN-Matches festgelegt. |
| SecondaryTarget | object | BEDINGUNGSABHÄNGIGSpieler, der an der Statistik beteiligt ist (z. B. der zerstörte Spieler). Gleiche Form wie MainTarget. |