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

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

Ответы [ 5 ]

39 голосов
/ 28 мая 2009

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

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

Методы компенсации задержки в внутриигровом протоколе, разработке и оптимизации клиента / сервера

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

5 голосов
/ 03 августа 2009

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

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

3 голосов
/ 28 мая 2009

Это действительно сложный вопрос, я бы посоветовал взглянуть на некоторые движки сетевых игр с открытым исходным кодом:

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

2 голосов
/ 02 августа 2009

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

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

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

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

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

1 голос
/ 03 августа 2009

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

...