Protocolo Diep.io
Diep.io é um pequeno jogo de guerra on -line com tanques, balas e bolhas. Existem vários modos de jogo, mas este documento se concentra apenas no modo FFA.
- Comunicação
- Tipos de dados
- Formato de pacote
- Pacotes
- Servidorbound
- Clientbount
Comunicação
Os dados são transmitidos através de um tubo HTTP WebSocket.
Tipos de dados
Este jogo usa formatos de dados padrão. Os bytes estão em grande ordem endiana . O tamanho de cada tipo pode não ser constante (por exemplo, cordas, varintas).
Nome | Tamanho (bytes) | Intervalo de dados | Notas |
---|
uint8 | 1 | Um número inteiro entre 0 e 255 | Inteiro de 8 bits não assinado |
uint16 | 2 | Um número inteiro entre 0 e 65535 | Inteiro não assinado de 16 bits |
uint32 | 4 | Um número inteiro entre 0 e 4294967295 | Inteiro de 32 bits não assinado |
Int8 | 1 | Um número inteiro entre -128 e 127 | Inteiro de 8 bits assinado |
INT16 | 2 | Um número inteiro entre -32768 e 32767 | Inteiro de 16 bits assinado |
int32 | 4 | Um número inteiro entre -2147483647 e 2147483646 | Inteiro assinado de 32 bits |
Float32 | 4 | Um número de ponto flutuante | Número do ponto flutuante com precisão de 32 bits |
Float64 | 8 | Um número de ponto flutuante | Número do ponto flutuante com precisão de 64 bits |
Corda | ≥ 1 | Uma string utf-8 de comprimento variável | A string termina quando o byte 0x00 é alcançado |
T [i] | ? | Uma matriz de tamanho fixo de um tipo | Matrizes podem conter qualquer tipo de dados |
Formato de pacote
Cada pacote começa com um byte indicando o ID do pacote e, em seguida, o conteúdo segue. Os pacotes podem ser divididos se forem muito grandes, mas esse comportamento é automaticamente corrigido pelo gerenciador de buffer.
Tipo | Tamanho (bytes) | Notas |
---|
ID do pacote | 1 | Pode haver 256 pacotes diferentes, mas na prática existem apenas alguns. O envio de um ID de pacote desconhecido fechará imediatamente a conexão. |
Contente | ≥ 0 | Pacotes podem ter um corpo vazio |
Pacotes
Alguns pacotes podem estar faltando e seus propósitos não foram totalmente descobertos.
Servidorbound
Pacotes enviados do cliente para o servidor.
Recapitular
ID do pacote | Nome arbitrário | Propósito |
---|
0x00 | ID do usuário | Enviado no início da conexão, contém o ID do jogador. |
0x01 | Controle de jogadores | Contém a localização do mouse, se o jogador estiver atirando e o estado das chaves 4-direcionais |
0x02 | Comece o jogo | Contém o apelido inserido pelo jogador |
0x03 | Atualização do tanque | Diz ao servidor que atualiza o jogador deseja escolher |
0x04 | Evolução do tanque | Diz ao servidor qual evolução que o jogador deseja escolher |
0x05 | Batimento cardíaco | O servidor verifica se o jogador ainda está online. Este pacote é enviado a cada 0,1 segundo. |
0x00
ID do usuário
Campo | Tipo | Notas |
---|
ID do usuário | Corda | Sem comprimento máximo especificado |
0x01
Controle do jogador
Campo | Tipo | Notas |
---|
??? | 8 a 10 bytes | Localização do mouse (?) |
Chaves | uint8 | Estado (pressionado ou liberado) de 5 chaves codificadas em bits |
Os códigos para cada tecla podem ser encontrados na tabela a seguir. Cada estado -chave é adicionado à pilha usando a lógica ou (= |) operador.
Chave | Código (byte) | Código (binário) |
---|
Botão esquerdo do mouse | 0x01 | 0b00000001 |
Seta para cima | 0x02 | 0b00000010 |
Seta esquerda | 0x04 | 0b00000100 |
Seta para baixo | 0x08 | 0b00001000 |
Seta à direita | 0x10 | 0b00010000 |
0x02
Iniciar o jogo
Campo | Tipo | Notas |
---|
Apelido | Corda | Os apelidos devem ter entre 0 e 15 caracteres |
0x03
Atualização do tanque
Campo | Tipo | Notas |
---|
Atualizar id | uint8 | O nível de atualização não importa |
Os IDs de atualização podem ser encontrados na tabela a seguir.
Atualizar | Código (byte) |
---|
Regeneração de Saúde | 0x0e |
Saúde máxima | 0x0c |
Dano corporal | 0x0a |
Velocidade da bala | 0x08 |
Penetração de bala | 0x06 |
Dano de bala | 0x04 |
Recarregar | 0x02 |
Velocidade de movimento | 0x00 |
0x04
Evolução do tanque
Campo | Tipo | Notas |
---|
ID do tanque | uint8 | Cada tanque tem seu próprio ID |
Os IDs de tanques são os seguintes.
Nível | Níveis mais requisitos |
---|
0 | 0 |
1 | 15 |
2 | 30 |
3 | 45 |
Nível | Nome do tanque | Obtido depois | Código (byte) |
---|
1 | Gêmeo | Normal | 0x02 |
1 | Guarda -flanco | Normal | 0x10 |
1 | Metralhadora | Normal | 0x0e |
1 | Sniper | Normal | 0x0c |
2 | Tiro triplo | Gêmeo | 0x06 |
2 | Flanco gêmeo | Guarda gêmeo ou flanco | 0x1a |
2 | Quad Tank | Guarda gêmeo ou flanco | 0x08 |
2 | Tri ângulo | Guarda -flanco | 0x12 |
2 | Destruidor | Metralhadora | 0x14 |
2 | Artilheiro | Metralhadora | 0x28 |
2 | Assassino | Sniper | 0x1e |
2 | Superintendente | Sniper | 0x16 |
2 | Caçador | Sniper | 0x26 |
3 | Tripleto | Tiro triplo | 0x04 |
3 | Penta tiro | Tiro triplo | 0x1c |
3 | Gêmeo triplo | Flanco gêmeo | 0x24 |
3 | Octo Tank | Flanco duplo ou tanque quádro | 0x0a |
3 | Booster | Tri ângulo | 0x2e |
3 | Lutador | Tri ângulo | 0x30 |
3 | Híbrido | Destruidor | 0x32 |
3 | Perseguidor | Assassino | 0x2a |
3 | Guarda-florestal | Assassino | 0x2c |
3 | Gerente | Superintendente | 0x34 |
3 | Overlord | Superintendente | 0x18 |
3 | Necromante | Superintendente | 0x22 |
0x05
batimentos cardíacos
Este pacote está vazio.
Clientbound
Pacotes enviados do servidor para o cliente.
Recapitular
ID do pacote | Nome arbitrário | Propósito |
---|
0x00 | ??? | ??? |
0x02 | ??? | Às vezes, contém os dados da loja e a tabela de classificação (?) |
0x04 | Localização do servidor | Diz ao cliente sua localização |
0x05 | Batimento cardíaco | O cliente verifica se o servidor ainda está online. Este pacote é enviado a cada 0,1 segundo. |
0x00
???
Campo | Tipo | Notas |
---|
Contador | uint8 | Conta de 128 a 255 (?) |
??? | ??? | ??? |
0x02
???
Campo | Tipo | Notas |
---|
??? | ??? | ??? |
Apelidos | String [10] | 10 melhores jogadores do servidor |
??? | ??? | ??? |
Pontuações | Float32 [10] | E sua pontuação |
??? | ??? | ??? |
Localização do servidor 0x04
Campo | Tipo | Notas |
---|
Nome da localização | Corda | Contém informações sobre a localização do servidor |
0x05
batimentos cardíacos
Este pacote está vazio.