diep.io協議
Diep.io是一款小型在線戰爭遊戲,其中包括坦克,子彈和斑點。有幾種遊戲模式,但此文檔僅集中在FFA模式上。
- 溝通
- 數據類型
- 數據包格式
- 數據包
- 服務器行駛
- 客戶端
溝通
數據通過HTTP Websoket管傳輸。
數據類型
該遊戲使用標準數據格式。字節處於巨大的秩序。每種類型的大小可能不是恆定的(例如字符串,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位整數 |
float32 | 4 | 浮點號 | 帶有32位精度的浮點數 |
float64 | 8 | 浮點號 | 浮點數為64位精度 |
細繩 | ≥1 | 可變長度UTF-8字符串 | 到達字節0x00 時,字符串結束 |
t [i] | ? | 類型的固定尺寸陣列 | 陣列可以包含任何類型的數據 |
數據包格式
每個數據包以一個字節開始,指示數據包ID,然後內容隨後。如果數據包太大,可以分開,但是這種行為會由緩衝區管理器自動糾正。
類型 | 尺寸(字節) | 筆記 |
---|
數據包ID | 1 | 可以有256個不同的數據包,但實際上只有少數數據包。發送未知數據包ID將立即關閉連接。 |
內容 | ≥0 | 數據包可以有一個空的身體 |
數據包
可能缺少一些數據包,並且尚未完全發現它們的目的。
服務器行駛
從客戶端發送到服務器的數據包。
回顧
數據包ID | 任意名稱 | 目的 |
---|
0x00 | 用戶身份 | 在連接的開始時發送,包含播放器的ID。 |
0x01 | 玩家控制 | 包含鼠標的位置,如果播放器正在射擊和4個方向鍵的狀態 |
0x02 | 開始遊戲 | 包含玩家輸入的暱稱 |
0x03 | 坦克升級 | 告訴服務器升級玩家想要選擇的服務器 |
0x04 | 坦克進化 | 告訴服務器播放器要選擇哪種演變 |
0x05 | 心跳 | 服務器檢查播放器是否仍在線。該數據包每0.1秒發送一次。 |
0x00
用戶ID
0x01
播放器控制
場地 | 類型 | 筆記 |
---|
??? | 8至10個字節 | 鼠標位置(?) |
鑰匙 | UINT8 | 5鍵編碼的狀態(按下或釋放) |
每個鍵的代碼可以在下表中找到。使用邏輯或(= |)運算符將每個密鑰狀態添加到堆棧中。
鑰匙 | 代碼(字節) | 代碼(二進制) |
---|
鼠標左鍵 | 0x01 | 0b00000001 |
箭頭 | 0x02 | 0b00000010 |
箭離開 | 0x04 | 0b00000100 |
箭頭 | 0x08 | 0b00001000 |
箭頭 | 0x10 | 0b00010000 |
0x02
開始遊戲
0x03
坦克升級
升級ID可以在下表中找到。
升級 | 代碼(字節) |
---|
健康再生 | 0x0e |
最大健康 | 0x0c |
身體傷害 | 0x0a |
子彈速度 | 0x08 |
子彈穿透 | 0x06 |
子彈傷害 | 0x04 |
重新加載 | 0x02 |
運動速度 | 0x00 |
0x04
儲罐演變
場地 | 類型 | 筆記 |
---|
坦克ID | UINT8 | 每個坦克都有自己的ID |
坦克ID如下。
層 | 坦克名稱 | 可在之後獲得 | 代碼(字節) |
---|
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 | Penta射擊 | 三桿 | 0x1c |
3 | 三重雙胞胎 | 雙側 | 0x24 |
3 | Octo坦克 | 雙側面或四方坦克 | 0x0a |
3 | 助推器 | 三角形 | 0x2e |
3 | 戰鬥機 | 三角形 | 0x30 |
3 | 雜交種 | 驅逐艦 | 0x32 |
3 | 纏擾者 | 刺客 | 0x2a |
3 | 遊俠 | 刺客 | 0x2c |
3 | 主管 | 監工 | 0x34 |
3 | 霸王 | 監工 | 0x18 |
3 | 死靈法師 | 監工 | 0x22 |
0x05
心跳
這個數據包為空。
客戶端
從服務器發送到客戶端的數據包。
回顧
數據包ID | 任意名稱 | 目的 |
---|
0x00 | ??? | ??? |
0x02 | ??? | 有時包含商店數據和排行榜(?) |
0x04 | 服務器位置 | 告訴客戶的位置 |
0x05 | 心跳 | 客戶端檢查服務器是否仍在線。該數據包每0.1秒發送一次。 |
0x00
???
場地 | 類型 | 筆記 |
---|
櫃檯 | UINT8 | 從128到255(?)計數 |
??? | ??? | ??? |
0x02
???
場地 | 類型 | 筆記 |
---|
??? | ??? | ??? |
暱稱 | 字符串[10] | 服務器上的10個最佳玩家 |
??? | ??? | ??? |
分數 | float32 [10] | 和他們的得分 |
??? | ??? | ??? |
0x04
服務器位置
0x05
心跳
這個數據包為空。