Stats API do Rocket League
Este documento descreve os recursos da API de dados do jogo do Rocket League. Primeiro, os jogadores devem solicitar ao jogo que ative esse recurso editando o arquivo DefaultStatsAPI.ini, explicado abaixo. Uma vez ativado, esse recurso abrirá um WebSocket no computador do jogador que transmitirá dados e eventos do jogo. Programas de terceiros podem utilizar esses dados para alimentar uma variedade de aplicações, como interfaces personalizadas para transmissores.Visão geral
A Stats API transmite mensagens JSON por meio de um socket local enquanto uma partita está em andamento. As mensagens são enviadas tanto em intervalos configuráveis quanto ao ocorrerem eventos específicos na partida. Os dados do evento são sempre transmitidos no mesmo tick em que o evento ocorre, independentemente da PacketSendRate do usuário.Observação: Todas as configurações devem ser feitas antes da inicialização do cliente — alterações no arquivo .ini enquanto o cliente estiver em execução exigem uma reinicialização.
Visibilidade do campo:
- Campos marcados CONDICIONAL só estão presentes quando relevante.
- Campos marcados ESPECTADOR só estão presentes se o cliente estiver como espectador ou na equipe do jogador.
Configuração
Edite o arquivo<Install Dir>\TAGame\Config\DefaultStatsAPI.ini antes de iniciar o cliente.| Configuração | Tipo | Padrão | Descrição |
|---|---|---|---|
| PacketSendRate | float | 0 (desativado) | Número de pacotes UpdateState transmitidos por segundo. Deve ser maior que 0 para ativar o WebSocket. Limite máximo de 120. |
| Port | int | 49123 | Porta local na qual o socket escuta. |
Formato da mensagem
Toda mensagem segue esta estrutura de envelopamento:{
"Event": "EventName",
"Data": { /* event-specific payload */ }
}Tick
Enviado X vezes por segundo, com base na preferência PacketSendRate do jogador.
Exemplo
{
"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 | Descrição |
|---|---|---|
| Players | array | Uma entrada por jogador na partida. |
| Name | string | Nome de exibição. |
| PrimaryId | string | Identificador da plataforma no formato Plataforma|Uid|Splitscreen (por exemplo, "Steam|123|0", "Epic|456|0"). |
| Shortcut | int | Número do atalho para espectador. |
| TeamNum | int | Índice da equipe (0 = Azul, 1 = Laranja). |
| Score | int | Pontuação total da partida. |
| Goals | int | Gols marcados nesta partida. |
| Shots | int | Tentativas de chute nesta partida. |
| Assists | int | Assistências conquistadas nesta partida. |
| Saves | int | Defesas realizadas nesta partida. |
| Touches | int | Total de toques de bola. |
| CarTouches | int | Toques feitos pelo chassi do carro (não pela bola). |
| Demos | int | Demolições realizadas. |
| bHasCar | bool | ESPECTADORVerdadeiro se o jogador tiver um veículo. |
| Speed | float | ESPECTADORVelocidade do veículo em Unidades Unreal/segundo. |
| Boost | int | ESPECTADORQuantidade de Impulsos 0–100. |
| bBoosting | bool | ESPECTADORVerdadeiro se o jogador estiver impulsionando no momento. |
| bOnGround | bool | ESPECTADORVerdadeiro se pelo menos 3 rodas estiverem em contato com o mundo. |
| bOnWall | bool | ESPECTADORVerdadeiro se o veículo estiver em uma parede. |
| bPowersliding | bool | ESPECTADORVerdadeiro se o jogador estiver segurando o freio de mão. |
| bDemolished | bool | ESPECTADORVerdadeiro se o veículo estiver destruído no momento. |
| bSupersonic | bool | ESPECTADORVerdadeiro se o veículo estiver em velocidade supersônica. |
| Attacker | object | CONDICIONALO jogador que demoliu este jogador. Presente apenas quando há uma demolição. |
| Name | string | Nome do jogador que demoliu este jogador. |
| Shortcut | int | Atalho para espectador do atacante. |
| TeamNum | int | Índice da equipe do atacante. |
| Game | object | Metadados da partida. |
| Teams | array | Uma entrada por equipe, ordenada por TeamNum. |
| Name | string | Nome da equipe. |
| TeamNum | int | Índice da equipe. |
| Score | int | Contagem de gols da equipe. |
| ColorPrimary | string | Código de cor hexagonal (sem #) para a cor primária da equipe. |
| ColorSecondary | string | Código de cor hexagonal para a cor secundária da equipe. |
| TimeSeconds | int | Segundos restantes na partida. |
| bOvertime | bool | Verdadeiro se a partida estiver em prorrogação. |
| Ball | object | Estado atual da bola. |
| Speed | float | Velocidade atual da bola em Unidades Unreal/segundo. |
| TeamNum | int | Índice da última equipe a tocar a bola. 255 se a bola não foi tocada. |
| bReplay | bool | Verdadeiro se um replay do gol ou replay de histórico estiver ativo. |
| bHasWinner | bool | Verdadeiro se uma equipe venceu. |
| Winner | string | Nome da equipe vencedora. Linha vazia se ainda não há vencedores. |
| Arena | string | Nome do ativo do mapa atual (por exemplo, "Stadium_P"). |
| bHasTarget | bool | Verdadeiro se o cliente estiver visualizando um veículo específico no 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 | Nome do jogador sendo visualizado. |
| Shortcut | int | Atalho para espectador do jogador visualizado. |
| TeamNum | int | Índice de equipe do jogador visualizado. |
| Frame | int | CONDICIONALNúmero do quadro atual se um replay estiver ativo. |
| Elapsed | float | CONDICIONALSegundos decorridos desde o início do jogo se um replay estiver ativo. |
Eventos
Enviado um quadro após a bola ser atingida.
Exemplo
{
"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 | Descrição |
|---|---|---|
| Players | array | Jogadores que atingem a bola no quadro. |
| Name | string | Nome de exibição. |
| Shortcut | int | Atalho para espectador. |
| TeamNum | int | Índice da equipe (0 = Azul, 1 = Laranja). |
| Ball | object | Estado da bola no momento do acerto. |
| PreHitSpeed | float | Velocidade da bola antes do acerto (Unidades Unreal/segundo). |
| PostHitSpeed | float | Velocidade da bola após o acerto (Unidades Unreal/segundo). |
| Location | vector | Posição no mundo (X, Y, Z) da bola no impacto. |
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando o relógio do jogo muda.
Exemplo
{
"Event": "ClockUpdatedSeconds",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"TimeSeconds": 180,
"bOvertime": false
}
}| Campo | Tipo | Descrição |
|---|---|---|
| TimeSeconds | int | Segundos restantes na partida. |
| bOvertime | bool | Verdadeiro se o jogo estiver em prorrogação. |
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado no início de cada rodada, quando a contagem regressiva começa.
Exemplo
{
"Event": "CountdownBegin",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando a bola bate na trave.
Exemplo
{
"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 | Descrição |
|---|---|---|
| BallSpeed | float | Velocidade da bola no impacto. |
| ImpactForce | float | Força do impacto da bola relativo ao normal da trave. |
| BallLastTouch | object | O último toque da bola antes de acertar a trave. |
| Player | object | O jogador que fez o último toque. |
| Name | string | Nome de exibição. |
| Shortcut | int | Atalho para espectador. |
| TeamNum | int | Índice da equipe (0 = Azul, 1 = Laranja). |
| Speed | float | Velocidade da bola resultante do acerto. |
| BallLocation | vector | Posição no mundo (X, Y, Z) da bola quando ocorreu o impacto. |
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando o replay de um gol termina.
Exemplo
{
"Event": "GoalReplayEnd",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando o replay de um gol começa.
Exemplo
{
"Event": "GoalReplayStart",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Exibido quando a bola explode durante o replay de um gol. Se o replay for ignorado, este evento não será acionado.
Exemplo
{
"Event": "GoalReplayWillEnd",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando um gol é marcado.
Exemplo
{
"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 | Descrição |
|---|---|---|
| GoalSpeed | float | Velocidade da bola (Unidades Unreal/segundo) ao cruzar a linha do gol. |
| GoalTime | float | Duração da rodada anterior em segundos. |
| ImpactLocation | vector | Posição no mundo (X, Y, Z) da bola quando o gol foi marcado. |
| Scorer | object | O jogador que marcou o gol. |
| Name | string | Nome de exibição do marcador. |
| Shortcut | int | Atalho para espectador. |
| TeamNum | int | Índice da equipe do marcador. |
| BallLastTouch | object | O último toque da bola antes do gol. |
| Player | object | O jogador que fez o último toque. |
| Name | string | Nome do último jogador a tocar a bola. |
| Shortcut | int | Atalho para espectador. |
| TeamNum | int | Índice da equipe. |
| Speed | float | Velocidade da bola resultante do toque. |
| Assister | object | CONDICIONALMesma forma que o Scorer. Presente apenas quando uma assistência foi registrada. |
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando todas as equipes são criadas e replicadas.
Exemplo
{
"Event": "MatchCreated",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando a primeira contagem regressiva começa.
Exemplo
{
"Event": "MatchInitialized",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado ao sair do jogo.
Exemplo
{
"Event": "MatchDestroyed",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando a partida termina e o vencedor é definido.
Exemplo
{
"Event": "MatchEnded",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"WinnerTeamNum": 0
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
| WinnerTeamNum | int | Índice de equipe da equipe vencedora. |
Enviado quando o jogo é pausado por um administrador da partida.
Exemplo
{
"Event": "MatchPaused",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando o jogo é retomado por um administrador da partida.
Exemplo
{
"Event": "MatchUnpaused",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando o jogo entra na fase de pódio após o término da partida.
Exemplo
{
"Event": "PodiumStart",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando um replay é iniciado. Não se aplica a replays de gols, apenas aos replays carregados pelo menu "Histórico da partida".
Exemplo
{
"Event": "ReplayCreated",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando o jogo entra no estado ativo (após o término da contagem regressiva).
Exemplo
{
"Event": "RoundStarted",
"Data": {
"MatchGuid": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"
}
}| Campo | Tipo | Descrição |
|---|---|---|
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
Enviado quando alguém ganha uma estatística.
Exemplo
{
"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 | Descrição |
|---|---|---|
| EventName | string | Nome do ativo do StatEvent (por exemplo, "Demolish", "Save"). |
| Type | string | Rótulo de exibição localizado para a estatística (por exemplo, "Demolition"). |
| MainTarget | object | Jogador que recebeu a estatística. |
| Name | string | Nome de exibição. |
| Shortcut | int | Atalho para espectador. |
| TeamNum | int | Índice da equipe (0 = Azul, 1 = Laranja). |
| MatchGuid | string | Definido apenas para partidas online ou em LAN. |
| SecondaryTarget | object | CONDICIONALJogador envolvido na estatística (por exemplo, o jogador demolido). Mesma forma que o MainTarget. |