Мне было интересно, как многопользовательский протокол Half-Life 2 работает в таких моделях, как Counter-Strike: Source или Day Of Defeat: Source. Я считаю, что они используют какой-то обфускации и запатентованный алгоритм сжатия. Я хотел бы знать, как различные типы сообщений кодируются в пакете.
Как работает многопользовательский протокол Half-Life 2?
Ответ 1
Half-Life 2, Counter-Strike: Source и т.д. используют Valves Source engine. Valve имеет разработчик wiki, который охватывает множество вещей (его довольно круто проверить!)...
Эти статьи могут вас заинтересовать:
Методы компенсации латентности в клиентском/серверном протоколе, дизайне и оптимизации.
Ответ 2
Вы должны проверить Луиджи Ауриеммас бумаги на Half-Life. Вы также найдете декодер пакетов и некоторые дизассемблированные алгоритмы.
Обратную инженерную информацию о Half-Life 2 может быть трудно найти из-за ее актуальности для обмана. Я бы предположил, что ваши доски, такие как mpcforum, являются вашим лучшим выбором.
Ответ 3
Это очень сложный вопрос, мое предложение - посмотреть на некоторые из движков с открытым исходным кодом:
- http://www.hawksoft.com/hawknl/
- http://www.zoidcom.com/
- http://sourceforge.net/projects/opentnl
- http://www.gillius.org/gne/
Вы также можете посмотреть исходный код серии землетрясений, на котором основан исходный механизм полураспада.
Ответ 4
Хотя детали могут отличаться, общая структура довольно старая. Вот краткий обзор:
В ранних играх в формате fps, таких как doom и Quake, позиция игрока была обновлена только при ответе сервера на вашу команду перемещения. То есть вы нажали кнопку перемещения вперед, и клиент сообщил об этом серверу, сервер одушил вашу позицию в своей памяти, а затем передал новое игровое состояние вашему клиенту с вашей новой позицией. Это привело к очень ласковой игре: стрельба, даже перемещение в узких коридорах, было игрой предсказания отставания.
Новые игры позволяют клиенту самостоятельно управлять стрельбой и движением игрока. Хотя это привело к медленному движению и стрельбе, оно открыло больше возможностей обмана путем взлома кода клиента. Теперь каждый игрок перемещается и запускается самостоятельно на своем собственном компьютере и сообщает серверу, что они сделали. Это только ломается, когда два игрока сталкиваются друг с другом или пытаются поймать питание в одно и то же время.
Теперь у сервера есть этот поток состояния клиента, поступающий от каждого игрока, и он должен синхронизировать их и сделать из них последовательную игру. Хитрость заключается в измерении латентности каждого игрока. Конечная цель состоит в том, чтобы иметь возможность запускать оружие с очень низкой латентностью (например, снайперскую винтовку или рельсотрон) на враге, движущемся вбок, и правильно ли оно попало. Если латентность от каждого игрока известна, предположим, что игрок A (латентность 50 мс) запускает пистолет на B (латентность 60 мс). Чтобы сделать удар, выстрел должен ударить B, где B был 60 мс назад, откуда A был 50 м. Назад.
Это очень грубый обзор, но должен дать вам общую идею.
Ответ 5
Я предлагаю вам взглянуть на двигатели Quake 1-3. Они доступны с исходным кодом. Протокол полужизни может немного отличаться, но, скорее всего, достаточно близко.