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 | 四罐 | Twin OR Flank Guard | 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
心跳
这个数据包为空。