Protocole Diep.io
Diep.io est un petit jeu de guerre en ligne avec des chars, des balles et des taches. Il existe plusieurs modes de jeu, mais ce document se concentre uniquement sur le mode FFA.
- Communication
- Types de données
- Format de paquet
- Paquets
- Obligatoire
- Client de clientèle
Communication
Les données sont transmises via un tuyau WebSocket HTTP.
Types de données
Ce jeu utilise des formats de données standard. Les octets sont dans un grand ordre endian . La taille de chaque type peut ne pas être constante (par exemple, chaînes, varints).
Nom | Taille (octets) | Plage de données | Notes |
---|
uint8 | 1 | Un entier entre 0 et 255 | Entier 8 bits non signé |
uint16 | 2 | Un entier entre 0 et 65535 | Entier 16 bits non signé |
uint32 | 4 | Un entier entre 0 et 4294967295 | Entier 32 bits non signé |
int8 | 1 | Un entier entre -128 et 127 | Entier 8 bits signé |
int16 | 2 | Un entier entre -32768 et 32767 | Entier 16 bits signé |
int32 | 4 | Un entier entre -2147483647 et 2147483646 | Entier de 32 bits signé |
float32 | 4 | Un numéro de point flottant | Numéro de point flottant avec précision 32 bits |
float64 | 8 | Un numéro de point flottant | Numéro de point flottant avec une précision 64 bits |
Chaîne | ≥ 1 | Une chaîne UTF-8 de longueur variable | La chaîne se termine lorsque l'octet 0x00 est atteint |
T [i] | ? | Un tableau de taille fixe d'un type | Les tableaux peuvent contenir n'importe quel type de données |
Format de paquet
Chaque paquet commence par un octet indiquant l'ID de paquet, puis le contenu suit. Les paquets peuvent être divisés s'ils sont trop grands, mais ce comportement est automatiquement corrigé par le gestionnaire de tampons.
Taper | Taille (octets) | Notes |
---|
ID de paquet | 1 | Il peut y avoir 256 paquets différents, mais en pratique, il n'y en a que quelques-uns. L'envoi d'un ID de paquet inconnu fermera immédiatement la connexion. |
Contenu | ≥ 0 | Les paquets peuvent avoir un corps vide |
Paquets
Certains paquets pourraient être manquants et leurs objectifs n'ont pas été totalement découverts.
Obligatoire
Paquets envoyés du client au serveur.
Résumer
ID de paquet | Nom arbitraire | But |
---|
0x00 | ID de l'utilisateur | Envoyé au début de la connexion, contient l'ID du joueur. |
0x01 | Contrôle des joueurs | Contient l'emplacement de la souris, si le joueur tire et l'état des clés à 4 directions |
0x02 | Jeu de départ | Contient le surnom entré par le joueur |
0x03 | Mise à niveau du réservoir | Dit au serveur quelle mise à niveau le joueur veut choisir |
0x04 | Évolution du réservoir | Dit au serveur quelle évolution le joueur veut choisir |
0x05 | Pulsation | Le serveur vérifie si le joueur est toujours en ligne. Ce paquet est envoyé toutes les 0,1 secondes. |
ID utilisateur 0x00
Champ | Taper | Notes |
---|
ID de l'utilisateur | Chaîne | Aucune longueur maximale spécifiée |
Contrôle des joueurs 0x01
Champ | Taper | Notes |
---|
??? | 8 à 10 octets | Emplacement de la souris (?) |
Clés | uint8 | État (pressé ou libéré) de 5 clés codées en bits |
Les codes de chaque clé peuvent être trouvés dans le tableau suivant. Chaque état clé est ajouté à la pile à l'aide de l'opérateur logique ou (= |).
Clé | Code (octet) | Code (binaire) |
---|
Bouton de gauche de souris | 0x01 | 0b00000001 |
Faire fléchir | 0x02 | 0b00000010 |
Arrow à gauche | 0x04 | 0b00000100 |
Faire fléchir | 0x08 | 0b00001000 |
Arrow à droite | 0x10 | 0b00010000 |
0x02
Démarrer le jeu
Champ | Taper | Notes |
---|
Surnom | Chaîne | Les surnoms doivent être entre 0 et 15 caractères |
0x03
Mise à niveau du réservoir
Champ | Taper | Notes |
---|
ID de mise à niveau | uint8 | Le niveau de mise à niveau n'a pas d'importance |
Les ID de mise à niveau peuvent être trouvés dans le tableau suivant.
Mise à niveau | Code (octet) |
---|
Régénération de la santé | 0x0e |
Santé maximale | 0x0c |
Dommages corporels | 0x0a |
Vitesse de balle | 0x08 |
Pénétration des balles | 0x06 |
Dommages par balles | 0x04 |
Recharger | 0x02 |
Vitesse de mouvement | 0x00 |
0x04
Evolution du réservoir
Champ | Taper | Notes |
---|
Carte de réservoir | uint8 | Chaque réservoir a son propre ID |
Les identifiants de chars sont comme les suivants.
Étage | Niveaux requier |
---|
0 | 0 |
1 | 15 |
2 | 30 |
3 | 45 |
Étage | Nom du réservoir | Obtenu après | Code (octet) |
---|
1 | Double | Normale | 0x02 |
1 | Gardien de fanc | Normale | 0x10 |
1 | Mitrailleuse | Normale | 0x0e |
1 | Tireur isolé | Normale | 0x0c |
2 | Triple tir | Double | 0x06 |
2 | Flanc jumeau | Jumeau ou flanc | 0x1a |
2 | Réservoir quadruple | Jumeau ou flanc | 0x08 |
2 | Trimestre | Gardien de fanc | 0x12 |
2 | Destructeur | Mitrailleuse | 0x14 |
2 | Canonnier | Mitrailleuse | 0x28 |
2 | Assassin | Tireur isolé | 0x1e |
2 | Surveillant | Tireur isolé | 0x16 |
2 | Chasseur | Tireur isolé | 0x26 |
3 | Triolet | Triple tir | 0x04 |
3 | Penta Shot | Triple tir | 0x1c |
3 | Triple jumeau | Flanc jumeau | 0x24 |
3 | Octo | Flanc double ou quad | 0x0a |
3 | Amplificateur | Trimestre | 0x2e |
3 | Combattant | Trimestre | 0x30 |
3 | Hybride | Destructeur | 0x32 |
3 | Harceleur | Assassin | 0x2a |
3 | Ranger | Assassin | 0x2c |
3 | Directeur | Surveillant | 0x34 |
3 | Suzerain | Surveillant | 0x18 |
3 | Nécromancien | Surveillant | 0x22 |
0x05
rythme cardiaque
Ce paquet est vide.
Clientbound
Paquets envoyés du serveur au client.
Résumer
ID de paquet | Nom arbitraire | But |
---|
0x00 | ??? | ??? |
0x02 | ??? | Contient parfois les données de l'atelier et le classement (?) |
0x04 | Emplacement du serveur | Dit au client son emplacement |
0x05 | Pulsation | Le client vérifie si le serveur est toujours en ligne. Ce paquet est envoyé toutes les 0,1 secondes. |
0x00
???
Champ | Taper | Notes |
---|
Comptoir | uint8 | Compte de 128 à 255 (?) |
??? | ??? | ??? |
0x02
???
Champ | Taper | Notes |
---|
??? | ??? | ??? |
Surnom | String [10] | 10 meilleurs joueurs du serveur |
??? | ??? | ??? |
Scores | float32 [10] | Et leur score |
??? | ??? | ??? |
Emplacement du serveur 0x04
Champ | Taper | Notes |
---|
Nom de lieu | Chaîne | Contient des informations sur l'emplacement du serveur |
0x05
rythme cardiaque
Ce paquet est vide.