API de estadísticas de Rocket League
Este documento detalla las capacidades de la API de datos de juego de Rocket League. En primer lugar, los jugadores deben indicar al juego que active esta función editando su archivo DefaultStatsAPI.ini, como se explica a continuación. Una vez activada, esta función abrirá un WebSocket en el equipo del jugador que emitirá datos y eventos de la partida. Los programas de terceros pueden procesar estos datos para dar soporte a diversas aplicaciones, como interfaces HUD personalizadas para retransmisiones.Visión general
La API de estadísticas transmite mensajes JSON a través de un socket local mientras se está disputando un partido. Los mensajes se envían tanto a una frecuencia periódica configurable como cuando se producen eventos específicos del partido. Los datos de los eventos se emiten siempre en el mismo tick en el que ocurren, independientemente del PacketSendRate del usuario.Nota: Toda la configuración debe realizarse antes de iniciar el cliente. Los cambios en el archivo ini mientras el cliente está en ejecución requieren reiniciar el cliente.
Visibilidad de campo:
- Campos marcados CONDICIONAL solo están presentes cuando son relevantes.
- Campos marcados ESPECTADOR solo están presentes si el cliente está en modo espectador o en el 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 (desactivado) | Número de paquetes de UpdateState transmitidos por segundo. Debe ser > 0 para habilitar el WebSocket. Limitado a 120. |
| Port | int | 49123 | Puerto local en el que se escucha el socket. |
Formato de mensaje
Todos los mensajes siguen esta estructura de sobre:{
"Event": "EventName",
"Data": { /* event-specific payload */ }
}Tick
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 plataforma en formato Plataforma|Identificador único|Pantalla dividida (por ejemplo, "Steam|123|0", "Epic|456|0"). |
| Shortcut | int | Número de atajo de espectador. |
| TeamNum | int | Índice de equipo (0 = azul, 1 = naranja). |
| Score | int | Puntuación total del partido. |
| Goals | int | Goles marcados en este partido. |
| Shots | int | Tiros realizados 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 con la carrocería (no del balón). |
| Demos | int | Demoliciones causadas. |
| bHasCar | bool | ESPECTADORVerdadero si el jugador tiene un vehículo en ese momento. |
| Speed | float | ESPECTADORVelocidad del vehículo en unidades de Unreal por segundo. |
| Boost | int | ESPECTADORCantidad de impulso 0–100. |
| bBoosting | bool | ESPECTADORVerdadero si el jugador está usando un potenciador en ese momento. |
| bOnGround | bool | ESPECTADORVerdadero si al menos tres ruedas están en contacto con el mundo. |
| bOnWall | bool | ESPECTADORVerdadero si el vehículo se encuentra sobre una pared. |
| bPowersliding | bool | ESPECTADORVerdadero si el jugador está usando el freno de mano. |
| bDemolished | bool | ESPECTADORVerdadero si el vehículo está actualmente destruido. |
| bSupersonic | bool | ESPECTADORVerdadero si el vehículo va a velocidad supersónica. |
| Attacker | object | CONDICIONALEl jugador que demolió a este jugador. Solo está presente al ser demolido. |
| Name | string | Nombre del jugador que demolió a este jugador. |
| Shortcut | int | Atajo de espectador del atacante. |
| TeamNum | int | Índice de equipo del atacante. |
| Game | object | Metadatos del partido. |
| Teams | array | Una entrada por equipo, ordenada por TeamNum. |
| Name | string | Nombre del equipo. |
| TeamNum | int | Índice de equipo. |
| Score | int | Recuento de goles del equipo. |
| ColorPrimary | string | Código de color hexadecimal (sin #) del color principal del equipo. |
| ColorSecondary | string | Código de color hexadecimal del color secundario del equipo. |
| TimeSeconds | int | Segundos restantes del partido. |
| bOvertime | bool | Verdadero si el partido está en la prórroga. |
| 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 se ha tocado. |
| bReplay | bool | Verdadero si hay una repetición de gol o una repetición del historial activa. |
| bHasWinner | bool | Verdadero si un equipo ha ganado. |
| Winner | string | Nombre del equipo ganador. Cadena vacía si aún no hay ganador. |
| Arena | string | Nombre del recurso del mapa actual (por ejemplo, "Stadium_P"). |
| bHasTarget | bool | Verdadero si el cliente está actualmente visualizando un vehículo específico. |
| 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 que se está visualizando. |
| Shortcut | int | Atajo de espectador del jugador visualizado. |
| TeamNum | int | Índice de equipo del jugador visualizado. |
| Frame | int | CONDICIONALNúmero de fotograma actual si hay una repetición activa. |
| Elapsed | float | CONDICIONALSegundos transcurridos desde el inicio del partido si hay una repetición activa. |
Eventos
Se envía un frame después de que se golpee 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 fotograma. |
| Name | string | Nombre. |
| Shortcut | int | Atajo de espectador. |
| TeamNum | int | Índice de equipo (0 = azul, 1 = naranja). |
| Ball | object | Estado del balón en el momento del golpeo. |
| PreHitSpeed | float | Velocidad del balón antes del golpeo (unidades de Unreal por segundo). |
| PostHitSpeed | float | Velocidad del balón después del golpeo (unidades de Unreal por segundo). |
| Location | vector | Posición (X, Y, Z) del balón en el mundo en el momento del impacto. |
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando cambia el reloj del juego.
Ejemplo
{
"Event": "ClockUpdatedSeconds",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"TimeSeconds": 180,
"bOvertime": false
}
}| Campo | Tipo | Descripción |
|---|---|---|
| TimeSeconds | int | Segundos restantes del partido. |
| bOvertime | bool | Verdadero si la partida está en la prórroga. |
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía al inicio de cada ronda, cuando comienza la cuenta atrás.
Ejemplo
{
"Event": "CountdownBegin",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando el balón golpea el larguero.
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 al impactar. |
| ImpactForce | float | Fuerza de impacto del balón en relación con la normal del larguero. |
| BallLastTouch | object | El último toque del balón antes de golpear en el larguero. |
| Player | object | El jugador que dio el último toque. |
| Name | string | Nombre. |
| Shortcut | int | Atajo de espectador. |
| TeamNum | int | Índice de equipo (0 = azul, 1 = naranja). |
| Speed | float | Velocidad del balón resultante de este golpeo. |
| BallLocation | vector | Posición (X, Y, Z) del balón en el mundo cuando se produjo el impacto. |
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando termina la repetición de un gol.
Ejemplo
{
"Event": "GoalReplayEnd",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
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 aplica a partidas en línea o en red local. |
Se envía cuando el balón explota durante la repetición de un gol. Si se omite la repetición, este evento no se activará.
Ejemplo
{
"Event": "GoalReplayWillEnd",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando se marca 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) al cruzar la línea de gol. |
| GoalTime | float | Duración de la ronda anterior en segundos. |
| ImpactLocation | vector | Posición (X, Y, Z) del balón en el mundo cuando se marcó el gol. |
| Scorer | object | El jugador que ha marcado el gol. |
| Name | string | Nombre en pantalla del goleador. |
| Shortcut | int | Atajo de espectador. |
| TeamNum | int | Índice de equipo del goleador. |
| BallLastTouch | object | El último toque del balón antes del gol. |
| Player | object | El jugador que dio el último toque. |
| Name | string | Nombre del jugador que tocó el balón por última vez. |
| Shortcut | int | Atajo de espectador. |
| TeamNum | int | Índice de equipo. |
| Speed | float | Velocidad del balón resultante de este toque. |
| Assister | object | CONDICIONALMisma forma que Scorer. Solo está presente cuando se ha registrado una asistencia. |
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando todos los equipos se han creado y replicado.
Ejemplo
{
"Event": "MatchCreated",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando comienza la primera cuenta atrás.
Ejemplo
{
"Event": "MatchInitialized",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía al salir del juego.
Ejemplo
{
"Event": "MatchDestroyed",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando termina el partido y se elige un ganador.
Ejemplo
{
"Event": "MatchEnded",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"WinnerTeamNum": 0
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
| WinnerTeamNum | int | Índice de equipo del equipo ganador. |
Se envía cuando un administrador pausa el partido.
Ejemplo
{
"Event": "MatchPaused",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando un administrador reanuda el partido.
Ejemplo
{
"Event": "MatchUnpaused",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando el juego pasa a la pantalla de podio tras acabar el partido.
Ejemplo
{
"Event": "PodiumStart",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando se inicia una repetición. No se aplica a las repeticiones de goles, solo a las repeticiones que se cargan desde el menú Historial de partidos.
Ejemplo
{
"Event": "ReplayCreated",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
Se envía cuando el partido entra en estado activo (tras finalizar la cuenta atrás).
Ejemplo
{
"Event": "RoundStarted",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descripción |
|---|---|---|
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
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, "Demolición"). |
| MainTarget | object | Jugador que obtuvo la estadística. |
| Name | string | Nombre. |
| Shortcut | int | Atajo de espectador. |
| TeamNum | int | Índice de equipo (0 = azul, 1 = naranja). |
| MatchGuid | string | Solo se aplica a partidas en línea o en red local. |
| SecondaryTarget | object | CONDICIONALJugador implicado en la estadística (por ejemplo, el jugador demolido). Misma forma que MainTarget. |