protokol diep.io
Diep.io adalah permainan perang online kecil yang menampilkan tank, peluru, dan gumpalan. Ada beberapa mode game tetapi dokumen ini hanya berkonsentrasi pada mode FFA.
- Komunikasi
- Tipe data
- Format paket
- Paket
- Serverbound
- ClientBount
Komunikasi
Data ditransmisikan melalui pipa Websocket HTTP.
Tipe data
Game ini menggunakan format data standar. Byte berada dalam urutan endian besar . Ukuran masing -masing jenis mungkin tidak konstan (mis. String, varints).
Nama | Ukuran (byte) | Rentang data | Catatan |
---|
uint8 | 1 | Bilangan bulat antara 0 dan 255 | Integer 8-bit yang tidak ditandatangani |
uint16 | 2 | Bilangan bulat antara 0 dan 65535 | Integer 16-bit yang tidak ditandatangani |
uint32 | 4 | Integer antara 0 dan 4294967295 | Integer 32-bit yang tidak ditandatangani |
int8 | 1 | Integer antara -128 dan 127 | Integer 8-bit yang ditandatangani |
int16 | 2 | Integer antara -32768 dan 32767 | Integer 16-bit ditandatangani |
int32 | 4 | Integer antara -2147483647 dan 2147483646 | Integer 32-bit ditandatangani |
float32 | 4 | Angka Titik Mengambang | Angka Titik Mengambang dengan Presisi 32-Bit |
float64 | 8 | Angka Titik Mengambang | Angka titik mengambang dengan presisi 64-bit |
Rangkaian | ≥ 1 | String UTF-8 panjang variabel | String berakhir saat byte 0x00 tercapai |
T [i] | ? | Array ukuran tetap dari suatu jenis | Array dapat berisi semua jenis data |
Format paket
Setiap paket dimulai dengan satu byte yang menunjukkan ID paket dan kemudian konten mengikuti. Paket dapat dibagi jika terlalu besar tetapi perilaku ini secara otomatis dikoreksi oleh manajer buffer.
Jenis | Ukuran (byte) | Catatan |
---|
ID paket | 1 | Mungkin ada 256 paket yang berbeda, tetapi dalam praktiknya hanya ada beberapa. Mengirim ID paket yang tidak diketahui akan segera menutup koneksi. |
Isi | ≥ 0 | Paket dapat memiliki tubuh kosong |
Paket
Beberapa paket mungkin hilang dan tujuannya belum sepenuhnya ditemukan.
Serverbound
Paket yang dikirim dari klien ke server.
Rekap
ID paket | Nama sewenang -wenang | Tujuan |
---|
0x00 | ID Pengguna | Dikirim pada awal koneksi, berisi ID pemain. |
0x01 | Kontrol Pemain | Berisi lokasi mouse, jika pemain menembak dan keadaan kunci 4 arah |
0x02 | Mulai game | Berisi nama panggilan yang dimasukkan oleh pemain |
0x03 | Peningkatan tangki | Memberi tahu server yang meningkatkan pemain yang ingin dipilih |
0x04 | Evolusi tangki | Memberi tahu server evolusi mana yang ingin dipilih pemain |
0x05 | Denyut jantung | Server memeriksa apakah pemain masih online. Paket ini dikirim setiap 0,1 detik. |
0x00
ID Pengguna
Bidang | Jenis | Catatan |
---|
ID Pengguna | Rangkaian | Tidak ada panjang maksimal yang ditentukan |
Kontrol pemain 0x01
Bidang | Jenis | Catatan |
---|
??? | 8 hingga 10 byte | Lokasi tikus (?) |
Kunci | uint8 | Negara (ditekan atau dilepaskan) dari 5 tombol yang dikodekan dalam bit |
Kode untuk setiap kunci dapat ditemukan di tabel berikut. Setiap status kunci ditambahkan ke tumpukan menggunakan logika atau (= |) operator.
Kunci | Kode (byte) | Kode (biner) |
---|
Tombol kiri tikus | 0x01 | 0b00000001 |
Panah ke atas | 0x02 | 0b00000010 |
Panah kiri | 0x04 | 0b00000100 |
Panah ke bawah | 0x08 | 0b00001000 |
Panah benar | 0x10 | 0b00010000 |
0x02
Mulai game
Bidang | Jenis | Catatan |
---|
Nama panggilan | Rangkaian | Julukan harus antara 0 dan 15 karakter |
Peningkatan tangki 0x03
Bidang | Jenis | Catatan |
---|
Tingkatkan ID | uint8 | Tingkat peningkatan tidak masalah |
ID peningkatan dapat ditemukan di tabel berikut.
Meningkatkan | Kode (byte) |
---|
Regenerasi Kesehatan | 0x0e |
Kesehatan maksimum | 0x0c |
Kerusakan tubuh | 0x0a |
Kecepatan peluru | 0x08 |
Penetrasi peluru | 0x06 |
Kerusakan peluru | 0x04 |
Muat ulang | 0x02 |
Kecepatan Gerakan | 0x00 |
0x04
Tank Evolution
Bidang | Jenis | Catatan |
---|
ID tangki | uint8 | Setiap tangki memiliki ID sendiri |
ID tank adalah sebagai berikut.
Tingkat | Level Requiered |
---|
0 | 0 |
1 | 15 |
2 | 30 |
3 | 45 |
Tingkat | Nama Tank | Dapat diperoleh setelah | Kode (byte) |
---|
1 | Kembar | Normal | 0x02 |
1 | Penjaga sayap | Normal | 0x10 |
1 | Senapan mesin | Normal | 0x0e |
1 | Penembak jitu | Normal | 0x0c |
2 | Triple Shot | Kembar | 0x06 |
2 | Sayap kembar | Kembar atau penjaga sayap | 0x1a |
2 | Quad tank | Kembar atau penjaga sayap | 0x08 |
2 | Tri Sudut | Penjaga sayap | 0x12 |
2 | Perusak | Senapan mesin | 0x14 |
2 | Penembak | Senapan mesin | 0x28 |
2 | Pembunuh | Penembak jitu | 0x1e |
2 | Pengawas | Penembak jitu | 0x16 |
2 | Pemburu | Penembak jitu | 0x26 |
3 | Tiga serangkai | Triple Shot | 0x04 |
3 | Tembakan penta | Triple Shot | 0x1c |
3 | Kembar triple | Sayap kembar | 0x24 |
3 | Tangki octo | Sayap kembar atau tangki quad | 0x0a |
3 | Pemacu | Tri Sudut | 0x2e |
3 | Pejuang | Tri Sudut | 0x30 |
3 | Hibrida | Perusak | 0x32 |
3 | Penguntit | Pembunuh | 0x2a |
3 | Ranger | Pembunuh | 0x2c |
3 | Manajer | Pengawas | 0x34 |
3 | Tuan | Pengawas | 0x18 |
3 | Ahli nujum | Pengawas | 0x22 |
0x05
Heartbeat
Paket ini kosong.
Klienbound
Paket yang dikirim dari server ke klien.
Rekap
ID paket | Nama sewenang -wenang | Tujuan |
---|
0x00 | ??? | ??? |
0x02 | ??? | Terkadang berisi data toko dan papan peringkat (?) |
0x04 | Lokasi Server | Memberi tahu klien lokasinya |
0x05 | Denyut jantung | Klien memeriksa apakah server masih online. Paket ini dikirim setiap 0,1 detik. |
0x00
???
Bidang | Jenis | Catatan |
---|
Menangkal | uint8 | Menghitung dari 128 hingga 255 (?) |
??? | ??? | ??? |
0x02
???
Bidang | Jenis | Catatan |
---|
??? | ??? | ??? |
Julukan | String [10] | 10 pemain terbaik di server |
??? | ??? | ??? |
Skor | float32 [10] | Dan skor mereka |
??? | ??? | ??? |
Lokasi server 0x04
Bidang | Jenis | Catatan |
---|
Nama Lokasi | Rangkaian | Berisi informasi tentang lokasi server |
0x05
Heartbeat
Paket ini kosong.