Diep.io Protocol
Diep.io - это небольшая игра в онлайн -войне с танками, пулями и капли. Есть несколько игровых режимов, но этот документ концентрируется только на режиме FFA.
- Коммуникация
- Типы данных
- Формат пакета
- Пакеты
- Сервер
- ClientBount
Коммуникация
Данные передаются через трубу HTTP WebSocket.
Типы данных
Эта игра использует стандартные форматы данных. Байты находятся в большом эндианском порядке. Размер каждого типа может быть не постоянным (например, строки, варианты).
Имя | Размер (байты) | Диапазон данных | Примечания |
---|
uint8 | 1 | Целое число между 0 и 255 | Неподписанное 8-битное целое число |
uint16 | 2 | Целое число между 0 и 65535 | Неподписанное 16-битное целое число |
uint32 | 4 | Целое число между 0 и 4294967295 | Unsigned 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] | ? | Массив фиксированного размера типа | Массивы могут содержать любой тип данных |
Формат пакета
Каждый пакет начинается с одного байта, указывающего идентификатор пакета, а затем содержится . Пакеты могут быть разделены, если они слишком велики, но это поведение автоматически исправляется буферным менеджером.
Тип | Размер (байты) | Примечания |
---|
Идентификатор пакета | 1 | Там может быть 256 различных пакетов, но на практике их только несколько. Отправка неизвестного идентификатора пакета немедленно закроет соединение. |
Содержание | ≥ 0 | Пакеты могут иметь пустое тело |
Пакеты
Некоторые пакеты могут отсутствовать, и их цели не были полностью обнаружены.
Сервер
Пакеты отправлены с клиента на сервер.
Рекаптировать
Идентификатор пакета | Произвольное имя | Цель |
---|
0x00 | ID пользователя | Отправлено в начале соединения, содержит идентификатор игрока. |
0x01 | Управление игроком | Содержит местоположение мыши, если игрок стреляет и состояние 4-направленных ключей |
0x02 | Начальная игра | Содержит прозвище, введенное игроком |
0x03 | Обновление танка | Сообщает серверу, какое обновление игрока хочет выбрать |
0x04 | Эволюция танка | Сообщает серверу, какую эволюцию игрока хочет выбрать |
0x05 | Сердцебиение | Сервер проверяет, если игрок все еще онлайн. Этот пакет отправляется каждые 0,1 секунды. |
0x00
идентификатор пользователя
Поле | Тип | Примечания |
---|
ID пользователя | Нить | Максимальная длина не указана |
0x01
Control
Поле | Тип | Примечания |
---|
??? | От 8 до 10 байтов | Расположение мыши (?) |
Ключи | uint8 | Состояние (нажато или освобождено) из 5 клавиш, закодированных в битах |
Коды для каждого ключа можно найти в следующей таблице. Каждое состояние ключа добавляется в стек, используя логику или (= |) оператор.
Ключ | Код (байт) | Код (двоичный) |
---|
Кнопка мыши | 0x01 | 0b00000001 |
Стрелка вверх | 0x02 | 0b00000010 |
Стрелка встала | 0x04 | 0b00000100 |
Стрелка вниз | 0x08 | 0b00001000 |
Стрелка справа | 0x10 | 0b00010000 |
0x02
Start Game
Поле | Тип | Примечания |
---|
Прозвище | Нить | Прозвища должны быть от 0 до 15 символов длиной |
0x03
Обновление бака
Поле | Тип | Примечания |
---|
Обновление идентификатор | uint8 | Уровень обновления не имеет значения |
Идентификаторы обновлений можно найти в следующей таблице.
Обновление | Код (байт) |
---|
Регенерация здоровья | 0x0e |
Максимальное здоровье | 0x0c |
Повреждение тела | 0x0a |
Скорость пули | 0x08 |
Проникновение пули | 0x06 |
Пулевый урон | 0x04 |
Перезагрузить | 0x02 |
Скорость движения | 0x00 |
0x04
Эволюция бака
Поле | Тип | Примечания |
---|
Идентификатор танка | uint8 | У каждого танка есть свой идентификатор |
Идентификаторы танков связаны с следующими.
Уровни | Уровни заявляют |
---|
0 | 0 |
1 | 15 |
2 | 30 |
3 | 45 |
Уровни | Название танка | Получится после | Код (байт) |
---|
1 | Двойник | Нормальный | 0x02 |
1 | Фланг охрана | Нормальный | 0x10 |
1 | Пулемет | Нормальный | 0x0e |
1 | Снайпер | Нормальный | 0x0c |
2 | Тройной выстрел | Двойник | 0x06 |
2 | Двойной фланг | Двойной или фланг | 0x1a |
2 | Quad Tank | Двойной или фланг | 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
сердцебиение
Этот пакет пуст.
Клиент
Пакеты отправлены с сервера на клиент.
Рекаптировать
Идентификатор пакета | Произвольное имя | Цель |
---|
0x00 | ??? | ??? |
0x02 | ??? | Иногда содержит данные магазина и таблицу лидеров (?) |
0x04 | Местоположение сервера | Сообщает клиенту его местоположение |
0x05 | Сердцебиение | Клиент проверяет, если сервер все еще онлайн. Этот пакет отправляется каждые 0,1 секунды. |
0x00
???
Поле | Тип | Примечания |
---|
Прилавок | uint8 | Считается от 128 до 255 (?) |
??? | ??? | ??? |
0x02
???
Поле | Тип | Примечания |
---|
??? | ??? | ??? |
Прозвища | Строка [10] | 10 лучших игроков на сервере |
??? | ??? | ??? |
Баллы | float32 [10] | И их счет |
??? | ??? | ??? |
0x04
Местоположение сервера
Поле | Тип | Примечания |
---|
Название местоположения | Нить | Содержит информацию о местоположении сервера |
0x05
сердцебиение
Этот пакет пуст.