Рейты CSS[OB]

Nekro

Терра инкогнита
Сообщения
4,023
Реакции
2,260
Операционная система
Linux
🔥🔥

📝 Борьба рейтов сервера и клиента в CSS: Кто в приоритете?

🚀 Введение

Вопрос о том, как рейты клиента влияют на сервер и наоборот, актуален для многих администраторов серверов Counter-Strike: Source и игроков. Правильные настройки рейтов обеспечивают плавный и честный игровой процесс. Но что произойдет, если настройки сервера и клиента не совпадают? Кто в итоге "побеждает" в этой борьбе? Давайте разберёмся.


⚙️ Что такое рейты и зачем они нужны?

  • Рейты сервера — это сетевые параметры, которые определяют, как часто сервер обновляет информацию и обменивается данными с клиентами.
  • Рейты клиента — это параметры на стороне игрока, которые управляют частотой отправки и получения данных между клиентом и сервером.
Основные параметры включают:

  • rate — пропускная способность для передачи данных.
  • cmdrate — частота отправки команд клиентом на сервер.
  • updaterate — частота получения обновлений от сервера клиентом.
  • cl_interp и cl_interp_ratio — параметры интерполяции, влияющие на отображение движений других игроков.

🔄 Как сервер управляет рейтами клиентов?

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

sv_minrate "128000"
sv_maxrate "128000"
sv_mincmdrate "100"
sv_maxcmdrate "100"
sv_minupdaterate "100"
sv_maxupdaterate "100"
sv_client_max_interp_ratio "2"
sv_client_min_interp_ratio "2"

Что это значит для клиента?​

  • Если клиент установит rate ниже, чем sv_minrate, сервер заставит его использовать минимум, установленный сервером.
  • Если клиент выставит cmdrate или updaterate выше, чем sv_maxcmdrate или sv_maxupdaterate, сервер ограничит их этими значениями.
  • Интерполяция клиента будет ограничена настройками сервера sv_client_min_interp_ratio и sv_client_max_interp_ratio.
Таким образом, серверные рейты всегда имеют приоритет и задают пределы для клиентов.


🕹️ Оптимальные клиентские настройки

Для сервера с тикрейтом 100 и рейтами 128000 игрокам рекомендуется использовать следующие настройки:

rate "128000"
cl_cmdrate "100"
cl_updaterate "100"
cl_interp "0"
cl_interp_ratio "2"
net_graph "3"

Эти параметры обеспечивают:

  • Стабильный обмен данными с сервером.
  • Минимальную задержку между действиями игрока и их отображением на сервере.
  • Честные условия для всех игроков благодаря фиксированной интерполяции.

🤔 Могут ли клиентские рейты влиять на сервер?

Клиентские рейты не могут напрямую влиять на производительность сервера. Однако:

  1. Плохие настройки клиента могут привести к лагам, задержкам и телепортации самого игрока.
  2. Если клиент использует нестабильные настройки (например, низкий cl_updaterate), это ухудшит его восприятие игры, но сервер продолжит работать стабильно.
  3. Сервер всегда принудительно применяет свои ограничения, не позволяя клиентам использовать неподходящие рейты.

🏆 Вывод

  • Серверные рейты в приоритете: они задают допустимые диапазоны для клиентов и обеспечивают стабильность игры.
  • Оптимальные клиентские настройки позволяют игрокам получать наилучший опыт в рамках ограничений сервера.
  • Фиксированная интерполяция (например, cl_interp_ratio 2) помогает поддерживать честный и предсказуемый игровой процесс для всех.
Настройка серверных рейтов — это ключевой шаг к созданию качественного игрового процесса. А правильные клиентские настройки помогут игрокам максимально использовать возможности сервера.


🔗 Обсуждение темы: Рейты CSS на форуме HLmod.net

💬 Делитесь своими настройками и опытом в комментариях!
🔥🔥

Примеры рейтов:

sv_minrate "128000" // Минимальный рейт для игроков (128 КБ/с).
sv_maxrate "128000" // Максимальный рейт для игроков (128 КБ/с).
sv_mincmdrate "100" // Минимальная частота команд от клиента (100 команд/с).
sv_maxcmdrate "100" // Максимальная частота команд от клиента (100 команд/с).
sv_minupdaterate "100" // Минимальная частота обновлений от сервера (100 обновлений/с).
sv_maxupdaterate "100" // Максимальная частота обновлений от сервера (100 обновлений/с).
sv_client_cmdrate_difference "1" // Разница между cmdrate и updaterate не более 1.
sv_client_max_interp_ratio "2" // Максимальный коэффициент интерполяции (2).
sv_client_min_interp_ratio "2" // Минимальный коэффициент интерполяции (2).
sv_competitive_minspec "1" // Принудительное использование конкурентных настроек.
cl_interp "0" // Автоматический расчёт интерполяции.
cl_interp_ratio "2" // Коэффициент интерполяции (2).

// 📶 Настройки пропускной способности
sv_minrate "128000" // Минимальная пропускная способность для игроков (128 КБ/с).
// Это значение предотвращает использование низкого рейта, что уменьшает лаги.
sv_maxrate "128000" // Максимальная пропускная способность для игроков (128 КБ/с).
// Современные клиенты и серверы способны работать на этом уровне.

// 🕹️ Настройки частоты команд от клиента
sv_mincmdrate "100" // Минимальная частота команд, отправляемых клиентом (100 команд/с).
// Соответствует 100 тикрейту, обеспечивая точность отправки действий.
sv_maxcmdrate "100" // Максимальная частота команд от клиента (100 команд/с).
// Устанавливает верхний предел для cmdrate, соответствующий 100 тикрейту.

// 🔄 Настройки частоты обновлений от сервера
sv_minupdaterate "100" // Минимальная частота обновлений, отправляемых сервером клиенту (100 обновлений/с).
// Это значение поддерживает плавность игры при 100 тикрейте.
sv_maxupdaterate "100" // Максимальная частота обновлений от сервера клиенту (100 обновлений/с).
// Ограничивает максимальный updaterate для всех клиентов.

// ⚖️ Балансировка cmdrate и updaterate
sv_client_cmdrate_difference "1" // Разрешает разницу между cmdrate и updaterate не более 1.
// Гарантирует синхронизацию между отправкой команд и получением обновлений.

// 🕰️ Настройки интерполяции
sv_client_max_interp_ratio "2" // Максимальное значение интерполяции для всех клиентов.
// Интерполяция = 2 / updaterate (для 100 тикрейта это 0.02 секунды).
sv_client_min_interp_ratio "2" // Минимальное значение интерполяции для всех клиентов.
// Фиксирует интерполяцию на уровне 2 для стабильности игры.
cl_interp "0" // Автоматический расчёт минимально возможной интерполяции.
// Позволяет игре подстроиться к оптимальному значению.
cl_interp_ratio "2" // Коэффициент интерполяции (2), что даёт 0.02 секунды при 100 updaterate.

// 🏆 Конкурентные ограничения
sv_competitive_minspec "1" // Обязывает игроков использовать минимальные конкурентные настройки.
// Предотвращает использование конфигураций с пониженной графикой для нечестного преимущества.

🕹️ Клиентские настройки:

rate "128000"
cl_cmdrate "100"
cl_updaterate "100"
cl_interp "0"
cl_interp_ratio "2"
net_graph "3"


🤔 Как клиентские настройки влияют на сервер?


Клиентские настройки влияют на игровой процесс, но в пределах ограничений, установленных сервером. Вот основные моменты:


  1. rate:
    • Клиент может установить любое значение для rate, но сервер ограничивает его значениями sv_minrate и sv_maxrate.
    • Например, если сервер имеет sv_minrate "128000", клиент с более низким rate будет принудительно использовать минимум 128000.
  2. cl_cmdrate и cl_updaterate:
    • Эти параметры управляют частотой обмена данными между клиентом и сервером.
    • Если клиент укажет cl_cmdrate или cl_updaterate выше, чем sv_maxcmdrate или sv_maxupdaterate на сервере, они будут автоматически ограничены сервером.
    • Если клиент установит их ниже серверного minrate, это может вызвать задержки и ухудшить его собственный опыт игры, но на сервере это не вызовет проблем.
  3. Интерполяция (cl_interp и cl_interp_ratio):
    • Интерполяция влияет на отображение движения других игроков на клиенте.
    • Серверные настройки sv_client_min_interp_ratio и sv_client_max_interp_ratio ограничивают интерполяцию клиента.
    • Например, если сервер требует интерполяцию 2, клиент не сможет использовать другое значение.
  4. net_graph:
    • Эта команда отображает сетевую информацию только для клиента и не влияет на сервер.



✅ Вывод:


  • Серверные настройки в приоритете: Они устанавливают пределы для рейт, частоты обновлений и интерполяции.
  • Клиентские настройки могут варьироваться в рамках этих ограничений и влияют только на опыт самого игрока, но не на работу сервера.
  • Проблемы возникают только у самого игрока, если его настройки не соответствуют требованиям сервера (например, лаги, телепортации, задержка в управлении).

Таким образом, сервер обеспечит стабильность и честные условия игры, независимо от того, что выставит клиент (в пределах заданных серверных ограничений).

Буду рад вашим правкам/замечаниям


В этой статье будут рассмотрены все консольные команды касающиеся настройки рейтов Counter-strike Source (CSS) с их подробным описанием.

клиент - сервер​

Все игры на движке Source, к которым относиться Counter-strike Source, используют сетевую архитектуру клиент-сервер. В нашем случае сервер это программа, запущенная на удаленной машине, клиент - компьютер игрока, подключенный к серверу. Клиент и сервер общаются между собой, обмениваясь пакетами данных. Клиент игрока посылает сведения о своих действиях на сервер, а взамен получает информацию обо всех изменениях в игровом мире.

tickrate, cl_updaterate, cl_cmdrate, rate (рейты)​

В процессе игры все происходящее нам кажется непрерывным, но на самом деле это не так. Сервер Counter-Strike Source способен обрабатывать события игрового мира с частотой шестьдесят шесть раз за одну секунду (tickrate 66). Это значение установлено по умолчанию и встроенных возможностей для его изменений не предусмотрено. Исходя из этого, понятно, что клиент не может отправлять и получать данные чаще, чем установленный tickrate.

По умолчанию клиент получает от сервера двадцать пакетов в секунду, каждое изменение в игре вы сможете наблюдать не раньше, чем придет очередной пакет, а значит с частотой двадцать раз за одну секунду. Очевидно, что этого не достаточно, особенно если учесть высокую динамику игры. Вы только представьте себе ситуацию, когда ваш противник стрейфует или резко выбегает из за угла. В таких игровых моментах нужна повышенная информативность от сервера. Частоту обновления данных можно изменить с помощью консольной переменной cl_updaterate. Как упоминалось ранее, скорость приема пакетов ограничена значением tickrate сервера. Значит, максимально возможное значение cl_updaterate составит шестьдесят шесть пакетов в секунду.

cl_updaterate 66
(Установив это значение рейтов, вы будете получать более точные и более информативные данные о происходящем в игре.)


Все сказанное относительно обновления информации от сервера относится и к передаче данных от клиента. Ведь когда вы нажимаете на клавишу клавиатуры или мыши необходимо проинформировать об этом сервер как можно быстрее. Частота отправки пакетов от клиента к серверу настраивается при помощи консольной переменной cl_cmdrate (по умолчанию тридцать пакетов в секунду). Максимальное значение cl_cmdrate не может быть выше, чем tickrate сервера.

cl_cmdrate 66
(С таким параметром рейтов сервер будет максимально быстро получать сведения о ваших действиях.)


Все игроки Counter-strike Source обладают разным подключением к сети интернет. Во избежание потери пакетов подход к настройке клиента должен быть индивидуален для каждого. При помощи консольной переменной rate можно установить максимальное значение данных, которые вы можете принимать, т.е. установить максимальный входящий трафик вашего подключения. В этом случае сервер будет знать о вашей входящей пропускной способности и никогда не пошлет обновлений больше чем установленный rate. По умолчанию значение rate составляет 30000 байт в секунду. Рассчитать правильный rate очень просто, достаточно перевести ваш входящий трафик в байты. Например, мое подключение к интернету 15 Мбит/с (15*2 20 / 8 = 1966080 байт). Ставить такое высокое значение лишено всякого смысла. Поэтому лично я ограничиваюсь rate 262144 (2 Мбит/с)

Почему разработчиками Valve изначально установлены такие низкие значения rate, cl_updaterate и cl_cmdrate. Скорее всего, это исходило из расчета на среднестатистического пользователя с медленным модемным соединением. Но по моему нескромному мнению это могло иметь место еще несколько лет назад, когда ни кто не имел представление что такое доступ в мегабит(ы). В соревновательных режимах применяются максимально возможные рейты.


интерполяция и lerp​

Теперь поговорим об интерполяции, что это и с чем его едят. Выше уже шла речь о том, что клиент получает от сервера информацию в виде пакетов (по умолчанию 20 пакетов в секунду). От сюда следует, что все изменения, происходящие на игровом сервере мы не сможем увидеть чаще, чем будем принимать пакеты. Можно было бы спросить, почему же картинка выглядит такой плавной, ведь это все равно, что смотреть фильм с малой кадровой частотой. Как раз за это и отвечает функция интерполяции. Принцип ее работы очень прост. На основе информации, которую несут в себе входящие пакеты, клиент пытается рассчитать промежуточные значения между ними. Тем самым, клиент заполняет недостающие кадры «фальшивыми».
Рейты - Интерполяция.
( Зеленым обозначены входящие пакеты, красным - кадры рассчитанные на их основе. Эта картинка демонстрирует работу интерполяции, в реальности пакеты приходят значительно чаще)

Как нетрудно догадаться, чем больше клиент будет получать пакетов от сервера, тем меньше интерполяция будет отдавать нам «фальшивых» снимков. Значит при максимально возможном обновлении (cl_updaterate 66), игрок будет получать более точную и честную информацию.

Для настройки интерполяции в клиенте предусмотрено несколько консольных переменных: cl_interp_ratio, cl_interp. Переменная cl_interp_ratio задает число интервалов, через которые будет происходить интерполяция (по умолчанию 2 интервала). Клиент будет ждать до тех пор, пока не придут два пакета, и только потом будут рассчитываться промежуточные значения. В случае потери одного из пакетов расчет будет вестись на основе второго. Установка cl_interp_ratio 1 (один интервал) заставит клиент ждать только один пакет, что сведет задержку интерполяции (lerp) к минимуму.

Высокий lerp приводит к тому, что игрок видит финальную картинку с запаздыванием. Вы, наверное, не раз замечали, как вас убивают, когда вы уже отошли за угол. Этот эффект очень часто называют багом интерполяции и единственное решение - снижение задержек. Но следует отметить, что lerp учитывается при лагокомпенсации на стороне сервера и поэтому игрок не должен думать так, будто бы ему нужно целиться перед противником.

Переменная cl_interp устанавливает величину интерполяции. Рассчитать cl_interp очень просто:

cl_interp=cl_interp_ratio / cl_updaterate
(можно установить cl_interp 0, тогда его значение будет рассчитано автоматически.)


лагокомпенсация​

Лагокомпенсация на сервере сводит к минимуму влияние задержек (пинга) клиент-сервер, а также задержек интерполяции. Представьте себе, что вы играете на сервере, который географически находится далеко от вас и вдобавок у всех игроков разные задержки. Вы делате точный выстрел в бегущего противника. За время прошедшее от нажатия вами на клавишу мыши и доставкой пакета на сервер ваша цель уже давно скрылась за угол, но попадание все равно засчитывается. Это происходит благодаря лагокомпенсации на стороне сервера. Все дело в том, что сервер запоминает позиции всех игроков, делая снимки игрового мира, и при обработке вашего выстрела находит нужный снимок по формуле:

засчитанный выстрел = текущее время сервера - ваш пинг - lerp

Лагокомпенсация дает возможность игрокам с разными задержками играть практически на равных, но с ростом и нестабильностью пинга эффективность лагокомпенсации падает.

предсказание (prediction)​

Допустим, что вы подключились к серверу с очень большим пингом, например 200 мс. Любое ваше действие, будь то движение или стрельба, отправляются на сервер в виде пакетов, далее сервер фиксирует эту информацию и отправляет ее вам и всем остальным игрокам. В итоге вы сможете наблюдать свои же действия с задержкой равной пингу. Чтобы испытать это на своей шкуре, создайте игру и введите в консоль sv_cheats 1, net_fakelag 200, cl_predict 0 (cl_predict 0 - отключает предсказание на стороне клиента). Передвигаться, а уж тем более стрелять становится просто невозможно. Для исправления сего, предусмотрена функция предсказания. Клиент пытается сам предугадать события на сервере, относительно ваших действий, не дожидаясь их от него. Это дает игроку чувство комфорта в игре. Но, по причине того, что в момент отправки пакета клиент еще не знает обо всех изменениях происшедших на сервере, могут возникнуть ошибки предсказания, которые порождают скачки изображения. Для того чтобы их сгладить в клиенте предусмотрена консольная переменная cl_smooth (по умолчанию включено) и переменная cl_smoothtime, которой можно настроить время сглаживания.

Надеюсь эта статья помогла вам разобраться с вопросами, касающимися настройки рейтов в Counter-Strike: Source.

Интерполяция
Интерполяция была придумана для того чтобы как раз не происходило никаких дёрганий (или "лагов") в процессе игры.
Возникает вопрос - интерполяция - чо это за уг?
Интерполяция — в математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.
Ну грубо говоря, интерполяция вычисляет промежуточные местоположения моделек по двум прибывшим пакетам, тем самым делая движения моделек плавнее.
Но если ей нужны 2 пакета, то получается, что с первым пакетом обновление игрового мира не происходит(компьютер ждёт второго, чтобы вычислить промежуточные значения), а значит происходит задержка(лерпа).
Лерпа(lerp) - время, за которое происходит интерполяция.
Итак, общая задержка равна ping+lerp.

Клиент-сервер - сетевой код игры созданный на основе обмена пакетами между сервером и клиентом (игрой). В этих пакетах информация о текущем состоянии игрового мира (расположении объектов и т.д.)
cl_updaterate - число пакетов которые клиент получает от сервера каждую секунду.
Интерполяция - получение промежуточных значений какой-либо величины, путем усреднения крайних. Интерполяция служит для сглаживания картинки, т.к. пакетов приходящих от сервера зачастую не хватает для того чтобы картинка смотрелась плавно.
Настройки клиентской части по умолчанию: cl_updaterate 20; cl_interp_ratio 2; cl_interp 0.1.
Как это работает

cl_updaterate 20 означает, что клиент будет получать от сервера пакеты 20 раз в секунду, разница между пакетами - 50 мс. Чтобы предотвратить лагание от возможной потери пакета, интерполяция должна происходить в промежуток времени равный 2*50=100 мс. Чтобы обеспечить такую интерполяцию, необходимо задать параметр cl_interp 0.1. Множитель два означает, что мы хотим интерполировать две области между тремя пакетами пришедшими от сервера: "...". Если мы хотим итерполировать только одну область "._.", мы должны изменить соответствующий параметр. Этим параметром является переменная cl_interp_ratio. Она может принимать значения 2, 1, 0. Как не сложно догадаться, если эта переменная равна нулю, то интерполяция на клиенте будет отсутствовать. В общем случае формула для промежутка такова: lerp = cl_interp, но не может быть меньше cl_interp_ratio/cl_updaterate. Итак, тут мы приходим к самому определению:

lerp - промежуток времени в котором пакеты полученные клиентом будут интерполироваться.

По сути, значение lerp определяет пропорцию между пакетами, пришедшими от сервера, и пакетами, сгенерированными на клиенте. Чем меньше значение lerp, тем меньше пакетов будет "придумано" на клиентской стороне, тем точнее то, что вы видите, будет соответствовать тому, что происходит на сервере. Чем больше значение lerp, тем большую долю в вашей картинке будет играть интерполяция.

После теории перейдем к практике. С самого начала кажется, что в идеале lerp должен быть равен 0, ведь при таком значении lerp нет интерполяции и клиент видит то же, что видит сервер. Вы НЕ можете себе позволить lerp = 0 по двум причинам.

1) Ваш интернет канал оставляет желать лучшего.
Предположим, что вы счастливый обладатель модема или в вашем городе широкополосный интернет пока по карману только избранным или ваш сосед по общежитию по вечерам заливает на торрент пачку свежих немецких фильмов. Это значит, что вы можете себе позволить исключительно скромные сетевые настройки. Скорее всего те, что стоят по умолчанию, а быть может ваши дела еще хуже. При cl_updaterate 20, даже если все пакеты благополучно приходят от сервера к клиенту, вы видите 20 кадров в секунду (не имеет значения, какой у вас компьютер). Человеческий глаз воспринимает эту картинку как дерганую. Если же, не дай бог, потери (choke) есть, то играть вы просто не сможете, так как будете видеть слайдшоу.

2) Настройки серверов не позволяют клиентской части выставлять необходимые значения некоторых переменных.
Главная проблема тут безусловно cl_interp_ratio, на данный момент ни один европейский серверный конфиг не позволяет играть с этой переменной равной нулю. На данный момент я не знаю ни одного паблика с такими настройками. Только несколько КВ-серверов позволяют отключать интерполяцию. Сейчас добавление sv_client_min_interp_ratio 0 (эта команда отвечает за минимальное значение cl_inerp_ratio, которое может иметь клиент находясь на этом сервере) в евроконфиге скорее всего вопрос времени, и я полагаю, ждать осталось не долго. Но факт остается фактом: значение этой серверной переменной по умолчанию равно 1, а это значит, что клиент не может сделать lerp меньше, чем 10 мс.

Если вторая причина вопрос времени, то вот с первой причиной совладать способов не очень много.
Если у вас плохой коннект и постоянно теряются пакеты, то lerp=0 не для вас. Вам нужна интерполяция cl_interp_ratio 2.
Если же интернет не проблема, то тогда рецепт очень прост. Поднимайте рэйты: cl_cmdrate 66; cl_updaterate 66; rate 20000 - это ваш минимум. В идеале на 100 тиковом сервере у вас должно быть cl_cmdrate 100; cl_updaterate 100; rate 25000. Если сервер позволяет, ставьте cl_interp_ratio 0; cl_interp 0.
66, а тем более 100, кадров в секунду - вполне достаточно, чтобы комфортно воспринимать игру без интерполяции и лагов. Если же сервер не позволяет вам играть без интерполяции (пока что, это самый распространенный случай), рецепт очень прост:

  1. Напишите в консоли cl_updaterate и запомните значение этой переменной
  2. Напишите в консоли cl_interp_ratio 1
  3. Разделите 1 на значение cl_updaterate
  4. Напишите в консоли cl_interp и присвойте ему то что получили в пункте 3
Например:
Я играю с cl_updaterate 66, это значит что в 3 пункте я получу 0.0152, следовательно мне нужно написать cl_interp 0.0152. Это даст мне lerp = 15. Что уже довольно неплохо. Так как интерполяция таких временных промежутков не слишком сильно добавляет неточности вашим действиям.
Если вы пишите значение cl_interp меньшее, чем cl_interp_ratio/cl_updaterate, то на net_graph lerp будет отображаться оранжевым цветом. Если же lerp окрашен в желтый, то значит значение lerp больше промежутка времени между отсылаемыми пакетами на этом сервере. В обоих случаях lerp (а значит cl_interp) нужно увеличивать пока тот не станет белым. Если вы будете пытаться играть с НЕ БЕЛЫМ lerp, то вы обрекаете часть своих выстрелов застревать в промежутке клиент-сервер.


photo_2019-08-23_13-08-34.jpg


Вывод

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

Напоследок замечу, что существует миф, будто бы lerp должен быть равен пингу. Пинг - время за которое пакет доходит от сервера к клиенту и он не имеет никакого отношения к интерполяции. Бесполезно пытаться найти связи в этих двух понятиях. При любом пинге сохраняйте lerp минимальным и белым.
 
Последнее редактирование:

crashbow

Участник
Сообщения
89
Реакции
7
1. Если игнорирования рейтов игрока работает и сервер принудительно заменяет на свои, то по рейтам сервера и ориентироваться
Не совсем понял. Т.е. можно забить и быть уверенным, что у всех стоят те, что прописаны на сервере?
По второму пункту вроде никто не жаловался.
 

Nekro

Терра инкогнита
Сообщения
4,023
Реакции
2,260
Не совсем понял. Т.е. можно забить и быть уверенным, что у всех стоят те, что прописаны на сервере?
По второму пункту вроде никто не жаловался.
1. Можно ли забить? Для этого эту тему и создал, и однозначного ответа так и не поступило
2. А кому жаловаться? Тем кто 0 себе выставил? Так только они и видят плавающих игроков
 

crashbow

Участник
Сообщения
89
Реакции
7
1. Можно ли забить? Для этого эту тему и создал, и однозначного ответа так и не поступило
2. А кому жаловаться? Тем кто 0 себе выставил? Так только они и видят плавающих игроков
Есть группа в вк и в телеге, обычно по любой проблеме пишут сразу. 0 стоял у постояльцев, они бы точно сказали если что не так. Хотя они могут понимать почему так происходит)
Сообщения автоматически склеены:

Ну я так понимаю, у нас некий общий вопрос, ответ на который ждем)
 

Nekro

Терра инкогнита
Сообщения
4,023
Реакции
2,260
Есть группа в вк и в телеге, обычно по любой проблеме пишут сразу. 0 стоял у постояльцев, они бы точно сказали если что не так. Хотя они могут понимать почему так происходит)
Проверить 2 секунды, сходите сами гляньте
 

crashbow

Участник
Сообщения
89
Реакции
7
У меня нет плагинов на поднятие до 100. Получается максимум для меня это 66?
Сообщения автоматически склеены:

В ПУ арены по крайней мере выставляется от 20 до 100
 

HooLIGUN

MatchMaking CS:S / RGMIX.ru
Сообщения
1,062
Реакции
267

Nekro

Терра инкогнита
Сообщения
4,023
Реакции
2,260
Так кто то может достоверно сказать, имеет ли смысл установка клиентских рейтов или серверные всё равно установят игроку те какие нужны?
Или как это можно проверить?
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Ребят, есть ли где то документация или какая либо информацию по преимуществам рейтов?
То есть:
1. Если у игрока 100 рейты, а у сервера и остальных игроков 66 - это даёт игроку какое либо преимущество?
2. Если у игрока 33 рейты, а у сервера и остальных игроков 66 - это даёт игроку какое либо преимущество?
3. Если у игрока 0 рейты, при таких рейтам у игрока все плывут, не видно что он двигает ногами - это даёт игроку какое либо преимущество?
И прочие интересные нюансы. Кто поделиться опытом?

Количество отправляемых игроком пакетов (tickrate) напрямую зависит от FPS игрока. Например, если у игрока со слабым компьютером FPS составляет 50, то его "tickrate" будет равен 50, даже если на сервере установлен 100.

1. У игрока не может быть выше сервера.
2. При определенных низких значениях сервер дольше считает игрока приземлённым (момент первого контакта), из-за чего прыжки можно делать чаще и почти без потери скорости. А ещё, когда значение стабильно низкий, проще поймать тайминг и привыкнуть к нему, что делает распрыжку удобнее.
При низких значениях, если он меньше, чем у сервера, чаще можно застревать в текстурах. Например, в стенах или на платформах на режиме surf.
3. Это связано с настройками интерполяции. Если у игрока всё как бы "плывёт", значит, он получает актуальное местоположение других игроков без всяких коррекций, которые обычно происходит с задержкой. Это даёт игроку преимущество как при стрельбе, так и в боях на ножах, потому что он может доставать ножом до противников быстрее, чем они.

Так кто то может достоверно сказать, имеет ли смысл установка клиентских рейтов или серверные всё равно установят игроку те какие нужны?
Или как это можно проверить?
Кроме ситуации с интерполяцией, сервер с заранее установленными настройками сам задает нужные значения для игрока. Но нужно учитывать и то, что я упомянул выше.
Серверными настройками с этим (ситуация с интерполяцией) особо ничего не поделать. Нужен плагин для проверки значений у игрока.
 
Последнее редактирование:

Nekro

Терра инкогнита
Сообщения
4,023
Реакции
2,260
Количество отправляемых игроком пакетов (tickrate) напрямую зависит от FPS игрока. Например, если у игрока со слабым компьютером FPS составляет 50, то его "tickrate" будет равен 50, даже если на сервере установлен 100.

1. У игрока не может быть выше сервера.
2. При определенных низких значениях сервер дольше считает игрока приземлённым (момент первого контакта), из-за чего прыжки можно делать чаще и почти без потери скорости. А ещё, когда значение стабильно низкий, проще поймать тайминг и привыкнуть к нему, что делает распрыжку удобнее.
При низких значениях, если он меньше, чем у сервера, чаще можно застревать в текстурах. Например, в стенах или на платформах на режиме surf.
3. Это связано с настройками интерполяции. Если у игрока всё как бы "плывёт", значит, он получает актуальное местоположение других игроков без всяких коррекций, которые обычно происходит с задержкой. Это даёт игроку преимущество как при стрельбе, так и в боях на ножах, потому что он может доставать ножом до противников быстрее, чем они.


Кроме ситуации с интерполяцией, сервер с заранее установленными настройками сам задает нужные значения для игрока. Но нужно учитывать и то, что я упомянул выше.
Серверными настройками с этим (ситуация с интерполяцией) особо ничего не поделать. Нужен плагин для проверки значений у игрока.
Так имеет значения какие рейты у сервера или можно поставить абсолютно любые? И как это проверить?
Пример:
1.
Ставить рейты сервера
Пробелы для наглядности
C-подобный:
rate "9 000 000"
cl_cmdrate "9 000 000"
cl_updaterate "9 000 000"

Игроки же заранее договорившись ставят
C-подобный:
rate "66000"
cl_cmdrate "66"
cl_updaterate "66"

То будет ли разница если рейты сервера были бы такие же как у игроков?

2. Если выставить 9 000 000 и у сервера и у игроков в клиентах, то будет ли это хоть на что то влиять и будет ли разница с 66 ?
100 рейтов в CSS OB (v90+) нет, только 66

Не вводите в заблуждение, плагином поднимают и до 100. Полка 66 это из коробки

И на сколько это правда, а не просто цифра ?

А действительно, реально или проверить эту правду?

3.
сервер с заранее установленными настройками сам задает нужные значения для игрока
Так если задаёт, то какое имеет значение что выставлено у игрока? Разве сервер обращает на это внимание и не устанавливает всем игрокам принудительно свои значения пока они находятся на сервере?
(Против этой теории говорит проверка с выставлением нулевого значения, когда все игроки начинают "плавать", но хотелось бы каких то реальных цифр или фактов)
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Ставить рейты сервера
Пробелы для наглядности
C-подобный:
rate "9 000 000"
cl_cmdrate "9 000 000"
cl_updaterate "9 000 000"
У сервера другие команды, которые устанавливают диапазон разрешенных значений. Прямо сейчас я не помню точные значения, но вроде бы не ниже 22 и не выше 67, даже если установить эти значения на стороне сервера, они все равно будут приравниваться к этим границам. Также у sv_*rate есть ограничения.

sv_maxrate — максимальное значение.
sv_minrate — минимальное значение.
sv_mincmdrate — минимальное значение.
sv_maxcmdrate — максимальное значение.
sv_minupdaterate — минимальное значение.
sv_maxupdaterate — максимальное значение.


Так если задаёт, то какое имеет значение что выставлено у игрока? Разве сервер обращает на это внимание и не устанавливает всем игрокам принудительно свои значения пока они находятся на сервере?
(Против этой теории говорит проверка с выставлением нулевого значения, когда все игроки начинают "плавать", но хотелось бы каких то реальных цифр или фактов)
Сервер может как полностью ограничить значения, установив одинаковые минимальное и максимальное значения, так и дать игроку возможность устанавливать их самостоятельно в пределах установленных сервером значений.
Сейчас эти команды особо не нужны. Раньше, когда компьютеры были намного слабее, у многих игроков не хватало мощности для высоких тикрейтов серверов, и именно для этого были созданы эти команды.
 

Nekro

Терра инкогнита
Сообщения
4,023
Реакции
2,260
У сервера другие команды
Ну давайте без придирок) Суть та вопроса ясна) Просто лень было копировать ещё sv_ команды
Сообщения автоматически склеены:

@Madness aka null138,
C-подобный:
sv_minrate "100000"
sv_mincmdrate "100"
sv_minupdaterate "100"
sv_maxrate "100000"
sv_maxcmdrate "100"
sv_maxupdaterate "100"
Screenshot_225.png


Как мы видим, клиентские всё равно 66
 
Последнее редактирование:

Madness aka null138

Участник
Сообщения
713
Реакции
734
Ну давайте без придирок) Суть та вопроса ясна) Просто лень было копировать ещё sv_ команды
Сообщения автоматически склеены:

@Madness aka null138,
C-подобный:
sv_minrate "100000"
sv_mincmdrate "100"
sv_minupdaterate "100"
sv_maxrate "100000"
sv_maxcmdrate "100"
sv_maxupdaterate "100"
Посмотреть вложение 120020

Как мы видим, клиентские всё равно 66


не ниже 22 и не выше 67, даже если установить эти значения на стороне сервера, они все равно будут приравниваться к этим границам
 

Nekro

Терра инкогнита
Сообщения
4,023
Реакции
2,260
Если можно - более развёрнутый ответ на три пункта выше
 

Nekro

Терра инкогнита
Сообщения
4,023
Реакции
2,260
Вопрос остаётся открытым. Если на сервере одни рейты, а у игрока другие рейты, то:
1. У игрока в приоритете его рейты и он может манипулировать игрой
2. Рейты игрока перебиваются серверными и не имеет значения, что он выставит
У кого какие мысли на этот счёт и как эти вещи можно проверить, доказать, аргументировать?
Сообщения автоматически склеены:

На данный момент имеет следующую информацию

Этот вопрос часто обсуждается в сообществе серверных администраторов и игроков Counter-Strike: Source (CSS). Давай разберёмся, как серверные и клиентские рейты взаимодействуют между собой.


📊 Как работают рейты на сервере и у игрока:

  1. Серверные рейты (sv_maxrate, sv_minrate, sv_maxupdaterate, sv_maxcmdrate):
    Серверные параметры устанавливают верхние и нижние границы для рейтов игроков. Это означает, что игрок не может превысить значения, заданные сервером.
  2. Клиентские рейты (rate, cl_updaterate, cl_cmdrate):
    Игрок может устанавливать свои собственные значения рейтов, но они будут ограничены серверными параметрами.

✅ Ответы на вопросы:

  1. Может ли игрок манипулировать игрой своими рейтами?
    Частично да, но только в пределах, разрешённых сервером. Например:
    • Если сервер выставляет sv_maxupdaterate 66, игрок может установить cl_updaterate 66, но не выше.
    • Если сервер выставляет sv_minrate 64000 и sv_maxrate 128000, игрок не сможет установить rate ниже 64000 или выше 128000.
    Однако, игрок может искусственно ухудшить свои рейты (например, выставить низкий cl_updaterate или rate), что может привести к лагам и "телепортации". Это негативно скажется на его игре, но в некоторых случаях может дать нечестное преимущество за счёт некорректного отображения его позиции для других игроков.
  2. Перебиваются ли клиентские рейты серверными?
    Да, серверные рейты устанавливают пределы, и клиентские рейты подстраиваются под эти ограничения. Если игрок установит рейт ниже или выше диапазона сервера, его настройки будут приведены к ближайшему допустимому значению.

🔍 Как это проверить и доказать:

  1. Проверка через консоль на сервере:
    • Используйте команду status на сервере, чтобы увидеть рейты подключенных игроков (включая rate, cl_updaterate, cl_cmdrate).
  2. Логи сервера:
    • Включите логирование рейтов игроков через log on и анализируйте логи для выявления отклонений.
  3. Тестирование на практике:
    • Установите жёсткие лимиты на сервере (например, sv_maxrate 50000, sv_minrate 50000) и попросите игроков установить различные rate. Используя net_graph 3, можно проверить, к каким значениям в итоге применяются их рейты.
  4. Использование плагинов:
    • Плагины для SourceMod (например, "Rate Checker") могут автоматически проверять и корректировать рейты игроков.

📝 Аргументы и выводы:

  • Серверные рейты доминируют над клиентскими: они задают границы, которые игроки не могут превысить.
  • Игроки могут ухудшить свои настройки, чтобы создать нестабильный геймплей, но это чаще негативно влияет на их собственный опыт.
  • Оптимальные рейты сервера и жёсткие минимальные значения помогают предотвратить манипуляции и улучшить общий игровой процесс.
Таким образом, правильно настроенные серверные рейты обеспечивают честную и стабильную игру, минимизируя возможность манипуляций со стороны игроков.
 
Последнее редактирование:
Сверху Снизу