▲ Наверх
Популярные новости
Время на сайте
Текущее время на сайте

Текущая дата на сайте
Последние комментарии
На сайте...
Всего на сайте: 9
Гостей: 8
Пользователи: 
- отсутствуют
Роботы: 
Голосование

Ваш любимый шутер от Valve?

Half-Life (все части)
CS 1.6
CS:S v.34
CS:S v2230303
CS:GO

 
 
Архив новостей
Облако тегов

L4D2 сервер - автоматическое сопоставление версий nosteam

Cornelius
Вчера, 18:13
   Сообщение #1

Юнец
  • 0
Награды:

Репутация: 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
Вчера, 19:16
   Сообщение #2

Легенда
  • 150
Награды:
 
Репутация: 290
Группа: Администраторы
Сообщений: 2137
Регистрация: 7.11.2012

Предупреждения:
Cornelius,
это какая то сторонняя приблуда которая изменяет A2S_INFO, ревему не меняет стандарт пакетов.
Cornelius
Вчера, 19:20
   Сообщение #3

Юнец
  • 0
Награды:

Репутация: 0
Группа: Пользователи
Сообщений: 3
Регистрация: 4.04.2026

Предупреждения:
bir3yk,

Спасибо за ответ! Значит, это сторонний модуль, который модифицирует S2C_CHALLENGE. Не подскажете, какие именно
сторонние решения существуют для этого? Или как они определяют версию клиента до отправки challenge? Мы
пробовали LD_PRELOAD модуль для подмены версии, но проблема в том, что клиент проверяет версию в challenge ДО
отправки C2S_CONNECT — и мы не можем узнать версию клиента заранее. Как сторонние модули решают эту проблему?
bir3yk
Вчера, 19:30
   Сообщение #4

Легенда
  • 150
Награды:
 
Репутация: 290
Группа: Администраторы
Сообщений: 2137
Регистрация: 7.11.2012

Предупреждения:
Cornelius,
без понятия, я о них знаю потому что кто то писал и не более того, возможно есть какая то "магическая" версия которая нравится всем версиям клиентов. Смотрите запросы и ответы от клиента к серверу с разных версий, должна быть какая то закономерность. Хотя если версия клиента не отвечает требованиям сервера, сервер сбрасывает такое соединение, возможно просто правят не запросы а само
подключение к серверу избавили от проверки версий. Это как вариант, как на самом деле я не интересовался.
Cornelius
Вчера, 20:30
   Сообщение #5

Юнец
  • 0
Награды:

Репутация: 0
Группа: Пользователи
Сообщений: 3
Регистрация: 4.04.2026

Предупреждения:
bir3yk,

Спасибо за ответ! Мы провели тестирование и подтвердили, что версия клиента передается через Steam CM —
некоторые серверы знают версию клиента ещё ДО подключения, сразу после запуска игры клиентом. Однако на нашем
сервере (тоже подключенном к Steam CM) эти данные не сохраняются в памяти процесса — мы проверили. Значит,
сторонний модуль каким-то образом активирует или перехватывает получение этих данных из steamclient_valve.so.
Не знаете ли вы, через какой внутренний механизм или callback можно получить информацию о версии
подключающегося клиента от Steam CM? Мы проверили все публичные callback (ValidateAuthTicketResponse,
GSClientApprove и др.) — ни один не содержит версию.
bir3yk
Вчера, 21:26
   Сообщение #6

Легенда
  • 150
Награды:
 
Репутация: 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];
};

в принципе если работает по такой схеме, я могу этот колбек блокировать в эмуляторе.
1чел. читают эту тему (гостей: 1)
Пользователей: 0

  Сейчас: 5 апреля 2026 08:11