Estadísticas de API de Rocket League
Este documento describe las capacidades de la API de datos de juego de Rocket League. Primero, los jugadores deben solicitar al juego que habilite esta función editando su archivo DefaultStatsAPI.ini, como se explica a continuación. Una vez activada, esta función abrirá un web socket en la máquina del jugador que emitirá datos y eventos de la jugabilidad. Los programas de terceros pueden procesar estos datos para impulsar una variedad de aplicaciones, como HUD personalizados para transmisiones.Descripción general
Las estadísticas de API transmiten mensajes JSON a través de un socket local mientras un partido está en curso. Los mensajes se envían con una frecuencia periódica configurable y también cuando ocurren eventos específicos de la partida. Los datos del evento siempre se emiten en el mismo ciclo de actualización en que ocurre el evento, independientemente del PacketSendRate del usuario.Nota: Toda la configuración debe realizarse antes de que se inicie el cliente, los cambios en el archivo .ini mientras el cliente está en ejecución requieren su reinicio.
Visibilidad del campo:
- Campos marcados CONDICIONAL solo están presentes cuando corresponde.
- Campos marcados ESPECTADOR solo están presentes si el cliente está observando el partido o pertenece al equipo del jugador.
Configuración
Edita<Install Dir>\TAGame\Config\DefaultStatsAPI.ini antes de iniciar el cliente.| Configuración | Tipo | Predeterminado | Descripción |
|---|---|---|---|
| PacketSendRate | float | 0 (deshabilitado) | Número de paquetes UpdateState transmitidos por segundo. Debe ser > 0 para habilitar el websocket. Limitado a 120. |
| Port | int | 49123 | Puerto local en el que el socket escucha. |
Formato del mensaje
Cada mensaje sigue esta estructura:{
"Event": "EventName",
"Data": { /* event-specific payload */ }
}Ciclo de actualización
Se envía X veces por segundo según la preferencia PacketSendRate del jugador.
Ejemplo
{
"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
}
}
}
}| Campo | Tipo | Descripción |
|---|---|---|
| Players | array | Una entrada por jugador en el partido. |
| Name | string | Nombre. |
| PrimaryId | string | Identificador de la plataforma en el formato Platform|Uid|Splitscreen (por ejemplo, "Steam|123|0", "Epic|456|0"). |
| Shortcut | int | Número de atajo para espectador. |
| TeamNum | int | Índice del equipo (0 = azul, 1 = naranja). |
| Score | int | Puntuación total del partido. |
| Goals | int | Goles anotados en este partido. |
| Shots | int | Intentos de tiro en este partido. |
| Assists | int | Asistencias obtenidas en este partido. |
| Saves | int | Salvadas realizadas en este partido. |
| Touches | int | Total de toques al balón. |
| CarTouches | int | Toques realizados por la carrocería (no el balón). |
| Demos | int | Demoliciones infligidas. |
| bHasCar | bool | ESPECTADORVerdadero si el jugador tiene actualmente un vehículo. |
| Speed | float | ESPECTADORVelocidad del vehículo en Unidades de Unreal por segundo. |
| Boost | int | ESPECTADORCantidad de acelerador 0–100. |
| bBoosting | bool | ESPECTADORVerdadero si el jugador está utilizando el acelerador en ese momento. |
| bOnGround | bool | ESPECTADORVerdadero si al menos 3 ruedas están en contacto con el suelo. |
| bOnWall | bool | ESPECTADORVerdadero si el vehículo está sobre una pared. |
| bPowersliding | bool | ESPECTADORVerdadero si el jugador está utilizando el freno de mano. |
| bDemolished | bool | ESPECTADORVerdadero si el vehículo está destruido en este momento. |
| bSupersonic | bool | ESPECTADORVerdadero si el vehículo está usando velocidad supersónica. |
| Attacker | object | CONDICIONALEl jugador que demolió a este jugador. Presente solo cuando hay una demolición. |
| Name | string | Nombre del jugador que demolió a este jugador. |
| Shortcut | int | Atajo para espectador del atacante. |
| TeamNum | int | Índice de equipo del atacante. |
| Game | object | Metadatos del partido. |
| Teams | array | Una entrada por equipo, según el orden de TeamNum. |
| Name | string | Nombre del equipo. |
| TeamNum | int | Índice del equipo. |
| Score | int | Cantidad de goles del equipo. |
| ColorPrimary | string | Código de color hexadecimal (número #) para el color principal del equipo. |
| ColorSecondary | string | Código de color hexadecimal para el color secundario del equipo. |
| TimeSeconds | int | Segundos restantes en el partido. |
| bOvertime | bool | Verdadero si el partido está en tiempo extra. |
| Ball | object | Estado actual del balón. |
| Speed | float | Velocidad actual del balón en unidades de Unreal por segundo. |
| TeamNum | int | Índice del último equipo que tocó el balón. 255 si el balón no fue tocado. |
| bReplay | bool | Verdadero si la repetición de un gol o la repetición del historial está activa. |
| bHasWinner | bool | Verdadero si un equipo ganó. |
| Winner | string | Nombre del equipo ganador. Cadena vacía si aún no hay un ganador. |
| Arena | string | Nombre del recurso del mapa actual (por ejemplo, "Stadium_P"). |
| bHasTarget | bool | Verdadero si el jugador está viendo un vehículo en específico en este momento. |
| Target | object | CONDICIONALPlayer currently being viewed. Members are an empty string or 0 if the player does not have a spectator target. |
| Name | string | Nombre del jugador en vista. |
| Shortcut | int | Atajo para espectador del jugador en vista. |
| TeamNum | int | Índice de equipo del jugador en vista. |
| Frame | int | CONDICIONALNúmero de cuadro actual si la repetición está activa. |
| Elapsed | float | CONDICIONALSegundos transcurridos desde el inicio del partido si la repetición está activa. |
Eventos
Se envía un fotograma después de que se golpea el balón.
Ejemplo
{
"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
}
}
}
}| Campo | Tipo | Descripción |
|---|---|---|
| Players | array | Jugadores que golpearon el balón en ese cuadro. |
| Name | string | Nombre. |
| Shortcut | int | Atajo para espectador. |
| TeamNum | int | Índice del equipo (0 = azul, 1 = naranja). |
| Ball | object | Estado del balón en el momento del impacto. |
| PreHitSpeed | float | Velocidad del balón antes del impacto (unidades de Unreal por segundo). |
| PostHitSpeed | float | Velocidad del balón después del impacto (unidades de Unreal por segundo). |
| Location | vector | Posición en el mundo (X, Y, Z) del balón en el momento del impacto. |
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando el reloj del juego cambia.
Ejemplo
{
"Event": "ClockUpdatedSeconds",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"TimeSeconds": 180,
"bOvertime": false
}
}| Campo | Tipo | Descripción |
|---|---|---|
| TimeSeconds | int | Segundos restantes en el partido. |
| bOvertime | bool | Verdadero si el juego está en tiempo extra. |
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía al inicio de cada ronda cuando comienza la cuenta regresiva.
Ejemplo
{
"Event": "CountdownBegin",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando el balón golpea el travesaño.
Ejemplo
{
"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
}
}
}| Campo | Tipo | Descripción |
|---|---|---|
| BallSpeed | float | Velocidad del balón en el momento del impacto. |
| ImpactForce | float | Fuerza de impacto del balón con respecto a la normal del travesaño. |
| BallLastTouch | object | El último toque del balón antes de golpear el travesaño. |
| Player | object | El jugador que hizo el último toque. |
| Name | string | Nombre. |
| Shortcut | int | Atajo para espectador. |
| TeamNum | int | Índice del equipo (0 = azul, 1 = naranja). |
| Speed | float | Velocidad del balón resultante de este impacto. |
| BallLocation | vector | Posición en el mundo (X, Y, Z) del balón cuando ocurrió el impacto. |
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando finaliza la repetición de un gol.
Ejemplo
{
"Event": "GoalReplayEnd",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando comienza la repetición de un gol.
Ejemplo
{
"Event": "GoalReplayStart",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando el balón explota durante la repetición de un gol. Si la repetición se omite, este evento no se activará.
Ejemplo
{
"Event": "GoalReplayWillEnd",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando se anota un gol.
Ejemplo
{
"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
}
}
}| Campo | Tipo | Descripción |
|---|---|---|
| GoalSpeed | float | Velocidad del balón (unidades de Unreal por segundo) cuando cruzó la línea de gol. |
| GoalTime | float | Duración de la ronda anterior en segundos. |
| ImpactLocation | vector | Posición en el mundo (X, Y, Z) del balón cuando ocurrió el gol. |
| Scorer | object | El jugador que anotó el gol. |
| Name | string | Mostrar el nombre del Scorer. |
| Shortcut | int | Atajo para espectador. |
| TeamNum | int | Índice de equipo del Scorer. |
| BallLastTouch | object | El último toque del balón antes del gol. |
| Player | object | El jugador que hizo el último toque. |
| Name | string | Nombre del jugador que tocó el balón por última vez. |
| Shortcut | int | Atajo para espectador. |
| TeamNum | int | Índice del equipo. |
| Speed | float | Velocidad del balón resultante de este toque. |
| Assister | object | CONDICIONALMisma forma que Scorer. Presente solo cuando se registra una asistencia. |
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando todos los equipos han sido creados y replicados.
Ejemplo
{
"Event": "MatchCreated",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando comienza la primera cuenta regresiva.
Ejemplo
{
"Event": "MatchInitialized",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía al salir del juego.
Ejemplo
{
"Event": "MatchDestroyed",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando el partido termina y se elige un ganador.
Ejemplo
{
"Event": "MatchEnded",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"WinnerTeamNum": 0
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
| WinnerTeamNum | int | Índice de equipo para el equipo ganador. |
Se envía cuando un administrador del partido pausa el juego.
Ejemplo
{
"Event": "MatchPaused",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando un administrador del partido reanuda el juego.
Ejemplo
{
"Event": "MatchUnpaused",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando el juego entra en el estado de podio tras finalizar la partida.
Ejemplo
{
"Event": "PodiumStart",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando se inicializa una repetición. No se refiere a las repeticiones de goles, sino únicamente a las repeticiones cargadas desde el menú de historial de partidos.
Ejemplo
{
"Event": "ReplayCreated",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando el juego entra en el estado activo (tras finalizar la cuenta regresiva).
Ejemplo
{
"Event": "RoundStarted",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
Se envía cuando alguien obtiene una estadística.
Ejemplo
{
"Event": "StatfeedEvent",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"EventName": "Demolish",
"Type": "Demolition",
"MainTarget": {
"Name": "PlayerA",
"Shortcut": 1,
"TeamNum": 0
},
"SecondaryTarget": {
"Name": "PlayerB",
"Shortcut": 2,
"TeamNum": 1
}
}
}| Campo | Tipo | Descripción |
|---|---|---|
| EventName | string | Nombre del recurso del StatEvent (por ejemplo, "Demolish", "Save"). |
| Type | string | Etiqueta de visualización localizada para la estadística (por ejemplo, "Demolition"). |
| MainTarget | object | Jugador que obtuvo la estadística. |
| Name | string | Nombre. |
| Shortcut | int | Atajo para espectador. |
| TeamNum | int | Índice del equipo (0 = azul, 1 = naranja). |
| MatchGuid | string | Solo se establece para partidos en línea o LAN. |
| SecondaryTarget | object | CONDICIONALJugador involucrado en la estadística (por ejemplo, el jugador demolido). Misma forma que MainTarget. |