diep.ioプロトコル
Diep.ioは、タンク、弾丸、塊をフィーチャーした小さなオンライン戦争ゲームです。いくつかのゲームモードがありますが、このドキュメントは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ビット整数 |
float32 | 4 | フローティングポイント番号 | 32ビット精度のある浮動小数点数 |
float64 | 8 | フローティングポイント番号 | 64ビット精度の浮動小数点数 |
弦 | ≥1 | 可変長UTF-8文字列 | バイト0x00 に到達すると、文字列は終了します |
t [i] | ? | タイプの固定サイズ配列 | 配列には、あらゆるタイプのデータを含めることができます |
パケット形式
すべてのパケットは、パケットIDを示す1つのバイトから始まり、コンテンツが続きます。パケットが大きすぎると分割できますが、この動作はバッファマネージャーによって自動的に修正されます。
タイプ | サイズ(バイト) | メモ |
---|
パケットID | 1 | 256の異なるパケットがありますが、実際にはいくつかしかありません。未知のパケットIDを送信すると、すぐに接続が閉じられます。 |
コンテンツ | ≥0 | パケットは空のボディを持つことができます |
パケット
一部のパケットが欠落している可能性があり、その目的は完全に発見されていません。
サーバーバウンド
クライアントからサーバーに送信されたパケット。
要約
パケットID | 任意の名前 | 目的 |
---|
0x00 | ユーザーID | 接続の開始時に送信され、プレーヤーのIDが含まれています。 |
0x01 | プレイヤーコントロール | プレーヤーが撮影している場合、4方向のキーの状態がある場合、マウスの位置が含まれています |
0x02 | ゲームを開始します | プレーヤーが入力したニックネームが含まれています |
0x03 | タンクのアップグレード | プレーヤーが選択したいアップグレードをサーバーに伝えます |
0x04 | タンクの進化 | プレイヤーが選択したい進化をサーバーに伝えます |
0x05 | ハートビート | サーバーは、プレーヤーがまだオンラインであるかどうかを確認します。このパケットは0.1秒ごとに送信されます。 |
0x00
ユーザーID
分野 | タイプ | メモ |
---|
ユーザーID | 弦 | 最大長は指定されていません |
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は次のとおりです。
ティア | 必要なレベル |
---|
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 | ストーカー | 暗殺者 | 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
ハートビート
このパケットは空です。