





Ваш любимый шутер от Valve?
|
|
| Cornelius |
Сообщение #1
|
| Юнец
Репутация: 0 Группа: Пользователи Сообщений: 3 Регистрация: 4.04.2026 Предупреждения: ![]() |
Здравствуйте.
Запускаю выделенные серверы L4D2 на Linux с RevEmu v06z. Сервер работает, nosteam клиенты могут подключаться, но только если их версия игры совпадает с PatchVersion в steam.inf сервера. Другие серверы сообществ имеют автоматическое сопоставление версий — nosteam клиенты с ЛЮБОЙ версией могут подключаться без изменений на стороне клиента. Сервер каким-то образом знает версию клиента и отвечает правильной версией в пакете S2C_CHALLENGE. Моя конфигурация: - Linux srcds - RevEmu v06z steamclient.so в bin/ - ClientDLL=./bin/steamclient_valve.so - MasterServer = 208.64.200.52:27011 - EnableNSNetSvc = BOTH - Сервер успешно подключается к Steam CM - sv_lan 0 Что я упускаю? Есть ли конкретная настройка rev.ini или конфигурация RevEmu для включения автоматического сопоставления версий? Или нужна другая сборка RevEmu? Буду благодарен за любую помощь |
| bir3yk |
Сообщение #2
|
Легенда
Репутация: 290 Группа: Администраторы Сообщений: 2137 Регистрация: 7.11.2012 Предупреждения: ![]() |
Cornelius,
это какая то сторонняя приблуда которая изменяет A2S_INFO, ревему не меняет стандарт пакетов. |
| Cornelius |
Сообщение #3
|
| Юнец
Репутация: 0 Группа: Пользователи Сообщений: 3 Регистрация: 4.04.2026 Предупреждения: ![]() |
bir3yk,
Спасибо за ответ! Значит, это сторонний модуль, который модифицирует S2C_CHALLENGE. Не подскажете, какие именно сторонние решения существуют для этого? Или как они определяют версию клиента до отправки challenge? Мы пробовали LD_PRELOAD модуль для подмены версии, но проблема в том, что клиент проверяет версию в challenge ДО отправки C2S_CONNECT — и мы не можем узнать версию клиента заранее. Как сторонние модули решают эту проблему? |
| bir3yk |
Сообщение #4
|
Легенда
Репутация: 290 Группа: Администраторы Сообщений: 2137 Регистрация: 7.11.2012 Предупреждения: ![]() |
Cornelius,
без понятия, я о них знаю потому что кто то писал и не более того, возможно есть какая то "магическая" версия которая нравится всем версиям клиентов. Смотрите запросы и ответы от клиента к серверу с разных версий, должна быть какая то закономерность. Хотя если версия клиента не отвечает требованиям сервера, сервер сбрасывает такое соединение, возможно просто правят не запросы а само подключение к серверу избавили от проверки версий. Это как вариант, как на самом деле я не интересовался. |
| Cornelius |
Сообщение #5
|
| Юнец
Репутация: 0 Группа: Пользователи Сообщений: 3 Регистрация: 4.04.2026 Предупреждения: ![]() |
bir3yk,
Спасибо за ответ! Мы провели тестирование и подтвердили, что версия клиента передается через Steam CM — некоторые серверы знают версию клиента ещё ДО подключения, сразу после запуска игры клиентом. Однако на нашем сервере (тоже подключенном к Steam CM) эти данные не сохраняются в памяти процесса — мы проверили. Значит, сторонний модуль каким-то образом активирует или перехватывает получение этих данных из steamclient_valve.so. Не знаете ли вы, через какой внутренний механизм или callback можно получить информацию о версии подключающегося клиента от Steam CM? Мы проверили все публичные callback (ValidateAuthTicketResponse, GSClientApprove и др.) — ни один не содержит версию. |
| bir3yk |
Сообщение #6
|
Легенда
Репутация: 290 Группа: Администраторы Сообщений: 2137 Регистрация: 7.11.2012 Предупреждения: ![]() |
Cornelius,
Я думаю что при не совпадении версии оригинальный стимклиент при подключении к серверу пытается послать вот такой колбек GSClientDeny_t с причиной k_EDenyInvalidVersion и этот колбек они блокируют, но это мое предположение. подменяют ответ вместо enum EDenyReason { k_EDenyInvalid = 0, k_EDenyInvalidVersion = 1, k_EDenyGeneric = 2, k_EDenyNotLoggedOn = 3, k_EDenyNoLicense = 4, k_EDenyCheater = 5, k_EDenyLoggedInElseWhere = 6, k_EDenyUnknownText = 7, k_EDenyIncompatibleAnticheat = 8, k_EDenyMemoryCorruption = 9, k_EDenyIncompatibleSoftware = 10, k_EDenySteamConnectionLost = 11, k_EDenySteamConnectionerror = 12, k_EDenySteamResponseTimedOut = 13, k_EDenySteamValidationStalled = 14, k_EDenySteamOwnerLeftGuestUser = 15, }; struct GSClientDeny_t { enum { k_iCallback = 202 }; CSteamID m_SteamID; EDenyReason m_eDenyReason; char m_rgchOptionalText[128]; }; в принципе если работает по такой схеме, я могу этот колбек блокировать в эмуляторе. |
|
|
| Сейчас: 5 апреля 2026 08:11 |