Подтвердить что ты не робот

Как работает многопользовательский протокол Half-Life 2?

Мне было интересно, как многопользовательский протокол Half-Life 2 работает в таких моделях, как Counter-Strike: Source или Day Of Defeat: Source. Я считаю, что они используют какой-то обфускации и запатентованный алгоритм сжатия. Я хотел бы знать, как различные типы сообщений кодируются в пакете.

4b9b3361

Ответ 1

Half-Life 2, Counter-Strike: Source и т.д. используют Valves Source engine. Valve имеет разработчик wiki, который охватывает множество вещей (его довольно круто проверить!)...

Эти статьи могут вас заинтересовать:

Методы компенсации латентности в клиентском/серверном протоколе, дизайне и оптимизации.

Источник многопользовательской сети

Ответ 2

Вы должны проверить Луиджи Ауриеммас бумаги на Half-Life. Вы также найдете декодер пакетов и некоторые дизассемблированные алгоритмы.

Обратную инженерную информацию о Half-Life 2 может быть трудно найти из-за ее актуальности для обмана. Я бы предположил, что ваши доски, такие как mpcforum, являются вашим лучшим выбором.

Ответ 3

Это очень сложный вопрос, мое предложение - посмотреть на некоторые из движков с открытым исходным кодом:

Вы также можете посмотреть исходный код серии землетрясений, на котором основан исходный механизм полураспада.

Ответ 4

Хотя детали могут отличаться, общая структура довольно старая. Вот краткий обзор:

В ранних играх в формате fps, таких как doom и Quake, позиция игрока была обновлена ​​только при ответе сервера на вашу команду перемещения. То есть вы нажали кнопку перемещения вперед, и клиент сообщил об этом серверу, сервер одушил вашу позицию в своей памяти, а затем передал новое игровое состояние вашему клиенту с вашей новой позицией. Это привело к очень ласковой игре: стрельба, даже перемещение в узких коридорах, было игрой предсказания отставания.

Новые игры позволяют клиенту самостоятельно управлять стрельбой и движением игрока. Хотя это привело к медленному движению и стрельбе, оно открыло больше возможностей обмана путем взлома кода клиента. Теперь каждый игрок перемещается и запускается самостоятельно на своем собственном компьютере и сообщает серверу, что они сделали. Это только ломается, когда два игрока сталкиваются друг с другом или пытаются поймать питание в одно и то же время.

Теперь у сервера есть этот поток состояния клиента, поступающий от каждого игрока, и он должен синхронизировать их и сделать из них последовательную игру. Хитрость заключается в измерении латентности каждого игрока. Конечная цель состоит в том, чтобы иметь возможность запускать оружие с очень низкой латентностью (например, снайперскую винтовку или рельсотрон) на враге, движущемся вбок, и правильно ли оно попало. Если латентность от каждого игрока известна, предположим, что игрок A (латентность 50 мс) запускает пистолет на B (латентность 60 мс). Чтобы сделать удар, выстрел должен ударить B, где B был 60 мс назад, откуда A был 50 м. Назад.

Это очень грубый обзор, но должен дать вам общую идею.

Ответ 5

Я предлагаю вам взглянуть на двигатели Quake 1-3. Они доступны с исходным кодом. Протокол полужизни может немного отличаться, но, скорее всего, достаточно близко.