protocolo DIEP.io
DIEP.IO es un pequeño juego de guerra en línea con tanques, balas y gotas. Hay varios modos de juego, pero este documento solo se concentra en el modo FFA.
- Comunicación
- Tipos de datos
- Formato de paquete
- Paquetes
- Fomento de servidor
- ClientBount
Comunicación
Los datos se transmiten a través de una tubería WebSocket HTTP.
Tipos de datos
Este juego utiliza formatos de datos estándar. Los bytes están en gran orden endian . El tamaño de cada tipo puede no ser constante (por ejemplo, cadenas, varints).
Nombre | Tamaño (bytes) | Rango de datos | Notas |
---|
uint8 | 1 | Un entero entre 0 y 255 | Entero de 8 bits sin firmar |
uint16 | 2 | Un entero entre 0 y 65535 | Entero de 16 bits sin firmar |
uint32 | 4 | Un entero entre 0 y 4294967295 | Entero de 32 bits sin firmar |
int8 | 1 | Un entero entre -128 y 127 | Entero de 8 bits firmado |
int16 | 2 | Un entero entre -32768 y 32767 | Entero firmado de 16 bits |
int32 | 4 | Un entero entre -2147483647 y 2147483646 | Entero de 32 bits firmado |
flotante32 | 4 | Un número de punto flotante | Número de punto flotante con precisión de 32 bits |
flotante 64 | 8 | Un número de punto flotante | Número de punto flotante con precisión de 64 bits |
Cadena | ≥ 1 | Una cadena UTF-8 de longitud variable | La cadena termina cuando se alcanza el byte 0x00 |
T [i] | ? | Una matriz de tamaño de tamaño fijo de un tipo | Las matrices pueden contener cualquier tipo de datos |
Formato de paquete
Cada paquete comienza con un byte que indica el ID de paquete y luego el contenido sigue. Los paquetes se pueden dividir si son demasiado grandes, pero este comportamiento es corregido automáticamente por el administrador de búfer.
Tipo | Tamaño (bytes) | Notas |
---|
ID de paquete | 1 | Puede haber 256 paquetes diferentes, pero en la práctica solo hay unos pocos. Enviar una ID de paquete desconocida cerrará inmediatamente la conexión. |
Contenido | ≥ 0 | Los paquetes pueden tener un cuerpo vacío |
Paquetes
Algunos paquetes pueden estar faltando y sus propósitos no han sido descubiertos por completo.
Fomento de servidor
Paquetes enviados desde el cliente al servidor.
Resumen
ID de paquete | Nombre arbitrario | Objetivo |
---|
0x00 | ID de usuario | Enviado al principio de la conexión, contiene la identificación del jugador. |
0x01 | Control de jugadores | Contiene la ubicación del mouse, si el jugador está disparando y el estado de las claves de 4 direccionales |
0x02 | Juego de inicio | Contiene el apodo ingresado por el jugador |
0x03 | Actualización del tanque | Le dice al servidor qué actualización el reproductor quiere elegir |
0x04 | Evolución del tanque | Le dice al servidor qué evolución quiere elegir el jugador |
0x05 | Latido del corazón | El servidor verifica si el reproductor todavía está en línea. Este paquete se envía cada 0.1 segundos. |
0x00
ID de usuario
Campo | Tipo | Notas |
---|
ID de usuario | Cadena | Sin longitud máxima especificada |
0x01
Control del jugador
Campo | Tipo | Notas |
---|
???? | 8 a 10 bytes | Ubicación del mouse (?) |
Llaves | uint8 | Estado (presionado o liberado) de 5 teclas codificadas en bits |
Los códigos para cada clave se pueden encontrar en la siguiente tabla. Cada estado clave se agrega a la pila utilizando la lógica o (= |) operador.
Llave | Código (byte) | Código (binario) |
---|
Botón izquierdo del mouse | 0x01 | 0b00000001 |
Arrow Arrow | 0x02 | 0b00000010 |
Flecha a la izquierda | 0x04 | 0b00000100 |
Flecha hacia abajo | 0x08 | 0b00001000 |
Flecha a la derecha | 0x10 | 0b00010000 |
0x02
Juego de inicio
Campo | Tipo | Notas |
---|
Apodo | Cadena | Los apodos deben tener entre 0 y 15 caracteres |
0x03
actualización del tanque
Campo | Tipo | Notas |
---|
ID de actualización | uint8 | El nivel de actualización no importa |
Las ID de actualización se pueden encontrar en la siguiente tabla.
Mejora | Código (byte) |
---|
Regeneración de la salud | 0x0e |
Máxima salud | 0x0c |
Daño corporal | 0x0a |
Velocidad de la bala | 0x08 |
Penetración de bala | 0x06 |
Daño de bala | 0x04 |
Recargar | 0x02 |
Velocidad de movimiento | 0x00 |
0x04
Evolución del tanque
Campo | Tipo | Notas |
---|
ID de tanque | uint8 | Cada tanque tiene su propia identificación |
Los ID de tanques son los siguientes.
Nivel | Niveles requeridos |
---|
0 | 0 |
1 | 15 |
2 | 30 |
3 | 45 |
Nivel | Nombre del tanque | Obtenible después | Código (byte) |
---|
1 | Mellizo | Normal | 0x02 |
1 | Guardia del flanco | Normal | 0x10 |
1 | Ametralladora | Normal | 0x0e |
1 | Francotirador | Normal | 0x0c |
2 | Disparo triple | Mellizo | 0x06 |
2 | Gemelo | Guardia gemelo o de flanco | 0x1a |
2 | Cuádicera | Guardia gemelo o de flanco | 0x08 |
2 | Ángulo tri | Guardia del flanco | 0x12 |
2 | Destructor | Ametralladora | 0x14 |
2 | Artillero | Ametralladora | 0x28 |
2 | Asesino | Francotirador | 0x1e |
2 | Capataz | Francotirador | 0x16 |
2 | Cazador | Francotirador | 0x26 |
3 | Trillizo | Disparo triple | 0x04 |
3 | Penta Shoot | Disparo triple | 0x1c |
3 | Triple gemelo | Gemelo | 0x24 |
3 | Tanque de ocho | Tanque gemelo o cuádruple | 0x0a |
3 | Refuerzo | Ángulo tri | 0x2e |
3 | Combatiente | Ángulo tri | 0x30 |
3 | Híbrido | Destructor | 0x32 |
3 | Acosador | Asesino | 0x2a |
3 | Guardabosque | Asesino | 0x2c |
3 | Gerente | Capataz | 0x34 |
3 | Señor | Capataz | 0x18 |
3 | Nigromante | Capataz | 0x22 |
0x05
latidos
Este paquete está vacío.
Torno del cliente
Paquetes enviados desde el servidor al cliente.
Resumen
ID de paquete | Nombre arbitrario | Objetivo |
---|
0x00 | ???? | ???? |
0x02 | ???? | Contiene a veces los datos del taller y la tabla de clasificación (?) |
0x04 | Ubicación del servidor | Le dice al cliente su ubicación |
0x05 | Latido del corazón | El cliente verifica si el servidor aún está en línea. Este paquete se envía cada 0.1 segundos. |
0x00
???
Campo | Tipo | Notas |
---|
Encimera | uint8 | Cuenta de 128 a 255 (?) |
???? | ???? | ???? |
0x02
???
Campo | Tipo | Notas |
---|
???? | ???? | ???? |
Apodos | Cadena [10] | 10 mejores jugadores del servidor |
???? | ???? | ???? |
Montones | Float32 [10] | Y su puntaje |
???? | ???? | ???? |
0x04
ubicación del servidor
Campo | Tipo | Notas |
---|
Nombre de ubicación | Cadena | Contiene información sobre la ubicación del servidor |
0x05
latidos
Este paquete está vacío.