โปรโตคอล diep.io
Diep.io เป็นเกมสงครามออนไลน์ขนาดเล็กที่มีรถถังกระสุนและ Blobs มีหลายโหมดเกม แต่เอกสารนี้มุ่งเน้นไปที่โหมด FFA เท่านั้น
- การสื่อสาร
- ชนิดข้อมูล
- รูปแบบแพ็คเก็ต
- แพ็คเก็ต
- เซิร์ฟเวอร์
- clientbount
การสื่อสาร
ข้อมูลถูกส่งผ่านท่อ HTTP WebSocket
ชนิดข้อมูล
เกมนี้ใช้รูปแบบข้อมูลมาตรฐาน ไบต์อยู่ในลำดับ ที่ยิ่งใหญ่ ขนาดของแต่ละประเภทอาจไม่คงที่ (เช่นสตริง, varints)
ชื่อ | ขนาด (ไบต์) | ช่วงข้อมูล | หมายเหตุ |
---|
Uint8 | 1 | จำนวนเต็มระหว่าง 0 ถึง 255 | จำนวนเต็ม 8 บิตที่ไม่ได้ลงชื่อ |
Uint16 | 2 | จำนวนเต็มระหว่าง 0 ถึง 65535 | จำนวนเต็ม 16 บิตที่ไม่ได้ลงชื่อ |
uint32 | 4 | จำนวนเต็มระหว่าง 0 ถึง 4294967295 | จำนวนเต็ม 32 บิตที่ไม่ได้ลงชื่อ |
int8 | 1 | จำนวนเต็มระหว่าง -128 ถึง 127 | จำนวนเต็ม 8 บิตที่ลงนาม |
Int16 | 2 | จำนวนเต็มระหว่าง -32768 และ 32767 | จำนวนเต็มที่ลงนาม 16 บิต |
INT32 | 4 | จำนวนเต็มระหว่าง -2147483647 และ 2147483646 | จำนวนเต็ม 32 บิตที่ลงนาม |
ลอย 32 | 4 | หมายเลขจุดลอยตัว | หมายเลขจุดลอยตัวด้วยความแม่นยำ 32 บิต |
ลอย 64 | 8 | หมายเลขจุดลอยตัว | หมายเลขจุดลอยตัวด้วยความแม่นยำ 64 บิต |
สาย | ≥ 1 | สตริง UTF-8 ความยาวตัวแปร | สตริงจะสิ้นสุดเมื่อถึงไบต์ 0x00 |
t [i] | - | อาร์เรย์ขนาดคงที่ของประเภท | อาร์เรย์สามารถมีข้อมูลประเภทใดก็ได้ |
รูปแบบแพ็คเก็ต
ทุกแพ็กเก็ตเริ่มต้นด้วย หนึ่ง ไบต์ที่ระบุ ID แพ็คเก็ตจากนั้น เนื้อหา จะติดตาม แพ็คเก็ตสามารถแยกได้หากมีขนาดใหญ่เกินไป แต่พฤติกรรมนี้ได้รับการแก้ไขโดยอัตโนมัติโดยตัวจัดการบัฟเฟอร์
พิมพ์ | ขนาด (ไบต์) | หมายเหตุ |
---|
ID แพ็คเก็ต | 1 | สามารถมี 256 แพ็คเก็ตที่แตกต่างกัน แต่ในทางปฏิบัติมีเพียงไม่กี่ การส่งรหัสแพ็คเก็ตที่ไม่รู้จักจะปิดการเชื่อมต่อทันที |
เนื้อหา | ≥ 0 | แพ็คเก็ตสามารถมีร่างกายที่ว่างเปล่า |
แพ็คเก็ต
แพ็คเก็ตบางตัวอาจหายไปและวัตถุประสงค์ของพวกเขายังไม่ได้ค้นพบโดยสิ้นเชิง
เซิร์ฟเวอร์
แพ็คเก็ตที่ส่งจากไคลเอนต์ไปยังเซิร์ฟเวอร์
สรุป
ID แพ็คเก็ต | ชื่อโดยพลการ | วัตถุประสงค์ |
---|
0x00 | รหัสผู้ใช้ | ส่งที่จุดเริ่มต้นของการเชื่อมต่อมี ID ของผู้เล่น |
0x01 | การควบคุมผู้เล่น | มีที่ตั้งของเมาส์หากผู้เล่นกำลังถ่ายภาพและสถานะของปุ่ม 4 ทิศทาง |
0x02 | เริ่มเกม | มีชื่อเล่นที่ป้อนโดยผู้เล่น |
0x03 | อัพเกรดถัง | บอกเซิร์ฟเวอร์ที่อัพเกรดผู้เล่นต้องการเลือก |
0x04 | วิวัฒนาการของถัง | บอกเซิร์ฟเวอร์ว่าวิวัฒนาการของผู้เล่นต้องการเลือก |
0x05 | การเต้นของหัวใจ | เซิร์ฟเวอร์ตรวจสอบว่าผู้เล่นยังออนไลน์อยู่หรือไม่ แพ็คเก็ตนี้จะถูกส่งทุก ๆ 0.1 วินาที |
รหัสผู้ใช้ 0x00
สนาม | พิมพ์ | หมายเหตุ |
---|
รหัสผู้ใช้ | สาย | ไม่ได้ระบุความยาวสูงสุด |
0x01
การควบคุมผู้เล่น
สนาม | พิมพ์ | หมายเหตุ |
---|
- | 8 ถึง 10 ไบต์ | ตำแหน่งเมาส์ (?) |
กุญแจ | Uint8 | สถานะ (กดหรือปล่อย) จาก 5 ปุ่มเข้ารหัสในบิต |
รหัสสำหรับแต่ละคีย์สามารถพบได้ในตารางต่อไปนี้ แต่ละสถานะคีย์จะถูกเพิ่มลงในสแต็กโดยใช้ตัวดำเนินการตรรกะหรือ (= |)
สำคัญ | รหัส (ไบต์) | รหัส (ไบนารี) |
---|
ปุ่มซ้ายของเมาส์ | 0x01 | 0b00000001 |
ลูกศรขึ้น | 0x02 | 0b00000010 |
ลูกศรซ้าย | 0x04 | 0b00000100 |
ลูกศรลง | 0x08 | 0b00001000 |
ลูกศรขวา | 0x10 | 0b00010000 |
0x02
เริ่มเกม
สนาม | พิมพ์ | หมายเหตุ |
---|
ชื่อเล่น | สาย | ชื่อเล่นต้องมีความยาวระหว่าง 0 ถึง 15 อักขระ |
การอัปเกรดถัง 0x03
สนาม | พิมพ์ | หมายเหตุ |
---|
อัปเกรด ID | Uint8 | ระดับการอัพเกรดไม่สำคัญ |
การอัพเกรด ID สามารถพบได้ในตารางต่อไปนี้
อัพเกรด | รหัส (ไบต์) |
---|
การฟื้นฟูสุขภาพ | 0x0e |
สุขภาพสูงสุด | 0x0c |
ความเสียหายของร่างกาย | 0x0a |
กระสุนปืน | 0x08 |
การเจาะกระสุนปืน | 0x06 |
ความเสียหายของกระสุนปืน | 0x04 |
โหลดใหม่ | 0x02 |
ความเร็วในการเคลื่อนไหว | 0x00 |
0x04
วิวัฒนาการของถัง
สนาม | พิมพ์ | หมายเหตุ |
---|
ID ถัง | Uint8 | แต่ละถังมี ID ของตัวเอง |
ID Tanks มีดังนี้
ชั้น | ระดับที่ต้องการ |
---|
0 | 0 |
1 | 15 |
2 | 30 |
3 | 45 |
ชั้น | ชื่อรถถัง | หาได้หลังจาก | รหัส (ไบต์) |
---|
1 | แฝด | ปกติ | 0x02 |
1 | ผู้พิทักษ์ปีกนก | ปกติ | 0x10 |
1 | ปืนกล | ปกติ | 0x0e |
1 | ซุ่มยิง | ปกติ | 0x0c |
2 | ช็อตสาม | แฝด | 0x06 |
2 | ขนาบข้าง | คู่แฝด หรือ ปีกนก | 0x1a |
2 | รถถังรูปสี่เหลี่ยม | คู่แฝด หรือ ปีกนก | 0x08 |
2 | สามเหลี่ยม | ผู้พิทักษ์ปีกนก | 0x12 |
2 | ผู้ทำลาย | ปืนกล | 0x14 |
2 | มือปืน | ปืนกล | 0x28 |
2 | นักฆ่า | ซุ่มยิง | 0x1e |
2 | ผู้ดูแล | ซุ่มยิง | 0x16 |
2 | นักล่า | ซุ่มยิง | 0x26 |
3 | แฝด | ช็อตสาม | 0x04 |
3 | เพนต้ายิง | ช็อตสาม | 0x1c |
3 | ทริปเปิ้ลแฝด | ขนาบข้าง | 0x24 |
3 | ถัง ต.ค. | ปีกแฝดปีก หรือ สี่เหลี่ยมจัตุรัส | 0x0a |
3 | ผู้สนับสนุน | สามเหลี่ยม | 0x2e |
3 | นักสู้ | สามเหลี่ยม | 0x30 |
3 | ลูกผสม | ผู้ทำลาย | 0x32 |
3 | stalker | นักฆ่า | 0x2a |
3 | แรนเจอร์ | นักฆ่า | 0x2c |
3 | ผู้จัดการ | ผู้ดูแล | 0x34 |
3 | นฤมล | ผู้ดูแล | 0x18 |
3 | ผู้ตรวจการตรวจคนหนึ่ง | ผู้ดูแล | 0x22 |
0x05
Heartbeat
แพ็คเก็ตนี้ว่างเปล่า
ลูกค้า
แพ็คเก็ตที่ส่งจากเซิร์ฟเวอร์ไปยังไคลเอนต์
สรุป
ID แพ็คเก็ต | ชื่อโดยพลการ | วัตถุประสงค์ |
---|
0x00 | - | - |
0x02 | - | มี บางครั้ง ข้อมูลร้านค้าและลีดเดอร์บอร์ด (?) |
0x04 | ตำแหน่งเซิร์ฟเวอร์ | บอกลูกค้าที่ตั้งไว้ |
0x05 | การเต้นของหัวใจ | ไคลเอนต์ตรวจสอบว่าเซิร์ฟเวอร์ยังออนไลน์อยู่หรือไม่ แพ็คเก็ตนี้จะถูกส่งทุก ๆ 0.1 วินาที |
0x00
???
สนาม | พิมพ์ | หมายเหตุ |
---|
เคาน์เตอร์ | Uint8 | นับจาก 128 ถึง 255 (?) |
- | - | - |
0x02
???
สนาม | พิมพ์ | หมายเหตุ |
---|
- | - | - |
ชื่อเล่น | สตริง [10] | 10 ผู้เล่นที่ดีที่สุดบนเซิร์ฟเวอร์ |
- | - | - |
คะแนน | ลอย 32 [10] | และคะแนนของพวกเขา |
- | - | - |
ตำแหน่งเซิร์ฟเวอร์ 0x04
สนาม | พิมพ์ | หมายเหตุ |
---|
ชื่อสถานที่ | สาย | มีข้อมูลเกี่ยวกับตำแหน่งของเซิร์ฟเวอร์ |
0x05
Heartbeat
แพ็คเก็ตนี้ว่างเปล่า