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

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


person JtR    schedule 27.05.2009    source источник
comment
Я не думаю, что сетевой протокол здесь подходит, поэтому я удалил тег.   -  person James McMahon    schedule 29.07.2009
comment
Прочитал тег, потому что это именно то, о чем, похоже, спрашивает JtR.   -  person John Smith    schedule 03.08.2009


Ответы (5)


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

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

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

Исходная многопользовательская сеть

person Community    schedule 27.05.2009
comment
Интересно, сколько повторений необходимо для добавления ссылок. В факе его нет. - person Copas; 28.05.2009
comment
Я думаю, что это может быть как-то связано с тем, что я зарегистрировался всего несколько дней назад :) - person ; 28.05.2009
comment
Меня больше всего интересует дельта-сжатие и структура заголовков пакетов, и я не смог найти эту информацию. - person JtR; 21.07.2009
comment
Просто оставляйте комментарии здесь, а не в ответе. - person GManNickG; 28.07.2009
comment
Эти ссылки не показывают, как он кодирует различные типы сообщений в пакете. - person JtR; 03.08.2009

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

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

person ko-dos    schedule 03.08.2009
comment
Пока это лучший ответ, даже если он не содержит точного ответа. По крайней мере, у меня есть отдаленный шанс найти кого-то, кто знал бы об этом с того форума, спасибо! - person JtR; 03.08.2009

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

Вы также можете посмотреть исходный код серии Quake, на которой основан оригинальный движок Half Life.

person jonnii    schedule 27.05.2009
comment
Сосредоточьтесь на ответвлениях движка Quake — некоторые из них были доведены до уровня совместимости с Half-Life. Такие движки, как FTEQuakeWorld или TomazQuake, могут стать хорошей отправной точкой. - person Andrew Scagnelli; 28.07.2009
comment
@А. Сканьелли, движок Source (движок Half-Life 2) не основан на движке Quake. Таким образом, хотя это было бы полезно для изучения основных концепций клиент-сервер, оно не даст вам точного кода. - person James McMahon; 29.07.2009
comment
Ничто не даст вам точный код, кроме лицензирования движка. И Source Engine имеет корни в Quake Engine. - person Aistina; 03.08.2009
comment
@nemo: HL2 должен быть в основном новым кодом, но, насколько мне известно, там все еще существует некоторый код движка Quake. Сетевой код, вероятно, отличается. - person John Smith; 03.08.2009
comment
Движок Quake надежен как скала, я бы старался делать то, что делала id, насколько это возможно. - person Sneakyness; 03.08.2009

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

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

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

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

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

person Kristoffon    schedule 02.08.2009
comment
Это не объясняет, как различные типы сообщений кодируются в пакете. - person JtR; 03.08.2009
comment
Теперь каждый игрок перемещается и стреляет самостоятельно на своем компьютере и сообщает серверу о своих действиях. Это не так, по крайней мере, в Half-Life 1. Клиент просто может запускать ту же симуляцию локально, чтобы создать иллюзию нулевой задержки, но сервер по-прежнему получает управляющие входы в обычном режиме, а не в полном состоянии. Сервер также все еще имеет последнее слово о том, что происходит, поэтому клиенты не могут использовать это, чтобы нарушить правила игры. - person John Smith; 03.08.2009

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

person John Smith    schedule 03.08.2009