В ентой статье я надеюсь прояснить некоторую неясность связанную с
сетевыми командами в Counter Strike. Сетевой код- енто то, с чем
столкнулись топовые игроки из Европы и Америки при первых боях в эру
1.3. В эру 1.5 игроки стали более внимательно и глубже изучать команды
выискивая оптимальные значения. Когда же Valve решила проблему
связанную с ex_interp в 1.5 мы все вздохнули с облегчением и решили-
все с ентим interp'ом покончено. Однако в 1.6 споры снова вспыхнули-
Valve исправила сетевой код игры. Да и сама VaC (Valve Anticheat)
просто блокирует вредные, и нечестные значения команд. Примечание:
Команды с префиксом sv_ sys_ являются серверными командами и
предназначенными только для сервера. Если вы хотите же узнать их
значение или изменить, их следует исполнять непосредственно на самом
сервере, либо с использованием rcon пароля... Также ента статья предназначена в основном для обладателей выделенных, высокоскоростных линий и-нета и для LAN. Общая информация:
1)cl_cmdrate: команда определяет сколько пакетов в секунду пошлете вы,
клиент к серверу. Очевидно, чем выше енто значение, тем быстрее сервер
реагирует на действия которые вы совершаете (поворот мышью, прыжок,
бег, стрельба и прочее). Итак, если вы на выделенке и притом оочень
хорошей- то смело ставьте высокое значение. Если же вы посадили на свой
DSL Cable или что там у вас ишо и своего друга- вы наверняка будете
наблюдать частые и высокие скачки лага. Енто все из-за высокого
значения команды. Большинство высокоскоростных доступов к и-нет не
обеспечивают своего пользователя высоким upload (к примеру, большинство
aDSL которые предоставляют компании- енто 768download- где-то
90КБ/128upload- где-то 16КБ), который так необходим для ентой команды.
2)cl_updaterate: енто противоположность cl_cmdrate- количество
пакетов/секунду которые вы получаете от сервера (То бишь ваша download
скорость). Здесь, чем выше значение, тем более вы синхронизированны с
сервером. Так как только сервер решает, попадают ваши выстрелы или нет,
то вам нужно большое количество обновлений информации с сервера- ради
эксперимента, попробуйте поставить значение cl_updaterate в 5-10- и
попробуйте убить кого. Получится интересная картина- вы будете ишо
стрелять (одни выстрел например) по противнику, а на его мониторе, он
вас как секнду назад завалил. 3)sv_maxupdaterate: команда
контролирует количество пакетов/секунду которое позволено серверу
послать клиенту. Из ентого следует что если на сервере sv_maxupdaterate
"60", а на клиенте cl_updaterate "101" то клиент будет обновляться со
значением cl_updaterate "60" 4)sys_ticrate: команда
устанавливает количество "кадров" в секунду, которые сервер может
вычислить. По умолчанию значение равно 100. Почему серверные fps так
важны? А ентот параметр как раз таки и отображает, как "чусвтует себя"
сервер. Мы все когда нить играли на ооочень хороших серверах что
складывалосьт такое впечатление что они хостуются на Tl-83 plus и мы
могли бы покляться что играем мы на LAN а не на HSI-net
sys_ticrate только присваивает максимальное значение fps которые может
осилить ваш server. Но на деле сервер не может дотянуть без помощи до
такого sys_ticrate- енто связано и с некоторыми процессами в самой
операционной среде, но в основном из-за провайдера. Имейте ввиду, что
увеличение fps "загружает" и сам процессор сервера. (Кстати такое
"увеличение" каким то макаром загружает процессор по qмаксимуму на
таких картах как de_inferno и de_aztec). По умолчанию сервер основанный
на Win32 выдает среднее fps 64, а на Linux- 50fps. "Ускорение" сервера
дает возможность получить fps выше 512 в некоторых случаях. Влияние
такое высокого серверного fps достаточно спорное, но я думаю вы с
легкостью заметите разницу в игре уже при 200fps. Целостность-
вот главное. Скачки fps со 100 до 512 скорее всего создадут больше
проблем, так что разумным будет ограничить sys_ticrate в районе
150-200, если конечно сервер позволяет стабильно работать при 150-200.
Если у вас есть rcon пароль к серверу, вы можете с легкостью проверить
серверный fps- напишите rcon stats в консоли, чтобы проверить,
"ускорен" ли ваш сервер, временно поставьте значение sys_ticrate
"10000" и исполните команду rcon stats. Если ваш fps выше чем 1000-
значит "ускорен" 5)ex_interp(интерполяция- это восстановление
значения функции в промежуточной точке по известным ее значениям в
соседних точках.) Итак, вы не можете быть синхронизированны с
сервером на все 100% в каждую секунду времени, так как вы получаете
ограниченное количество обновлений в секунду с сервера. Для примера:
[img-right]interp.jpg" border="0" Данный рисунок отражает
линейную интерполяцию круга. Когда увеличивается количество обновлений,
интерполированная фигура становится более аккуратной. В Cs данной
фигурой выступает движение игрока/в секунду времени. Сервер в данном
случае будет тем самым "идеальным кругом" (ведь только сервер имеет
абсолютно точную позицию игрока/в кажудую секнду времени), а вот
клиенту придется интерполировать между двумя "верными" пакетами.
Вот здесь и появляется ex_interp. Данная команда отражает количество
времени (в секундах) для интерполяции между каждым "удачным"
обновлением с сервера.Так как интерполяция относится к клиентской
части, то естественно возникают неточности и ошибки в самой игре. Так
как мы не можем получить 100% точности апдейтов с сервера (особенно в
и-нете) то интерполяция играет важную роль в самой игре. Рекомендации для online игр rate:
Я практически уверен что значение 20000 будет доступно большинству
высокоскоростных и-нет соединений. А вот использование значений выше
20000 может наоборот привести к снижению производительности. Рекомендую: rate 20000 sv_maxrate:
Значение в большинстве своем равно 0. Обьясню почему это скорее всего
не оптимально для online игры. sv_maxrate "0" будет определять значение
rate для каждого клиента и пытаться заполнить его заполнить.
Представьте что движок HL позволяет игрокам использовать значения rate
выше 20000 (например 999999999999), и сервер будет пытаться заполнить
все 999999999999. Енто приведет к пустому увеличению нагрузки на канал
сервера. Я советую безопасное и вместе с тем хорошее значение
sv_maxrate "20000". В большинстве случаев sv_maxrate 0 и sv_maxrate
20000 будут эквивалентны, но береженного бог бережет. Рекомендую: sv_maxrate 20000 cl_cmdrate:
В идеале значение этой команды должно быть равно серверному(!-
большинство людей считают что клиентским- вкорне не верно) fps. Если вы
посылаете серверу пакеты чаще чем он способен обработать- (скажем
серверный fps=80, а значение cl_cmdrate 101) то некоторые пакеты будут
просто "скинуты" сервером, необработаны ( 101-80=21 необработанный
пакет). По сути енти 21 пакета погоды не делают, просто приведут к
забиванию вашего upload ( и увеличению траффика), что тоже погоды не
делает. Рекомендую: смело ставим cl_cmdrate равное серверному fps либо выше. ex_interp:
Cтавим в 0 без размышлений. CS автоматически поставит ее значение
ex_interp= 1/cl_updaterate ( в консоли увидите “ex_interp forced up to
xx msec”). При значении 0, изменение значения команды cl_updaterate
будет автоматически менять и значение ex_interp. Я РЕКОМЕНДУЮ МЕНЯТЬ
ЗНАЧЕНИЕ ТОЛЬКО CL_UPDATERATE, ПОЗВОЛЯЯ CS поменять значение ex_interp.
Вы уже не можете поставить значение ex_interp ниже чем 1/cl_updaterate,
а вот ставить его выше- енто уже просто нечестно. Ставить значение выше
1/cl_updaterate приведет к тому, что вам придется стрелять немного
позади модельки противника ( получается так, что вы видите проивника
немного раньше чем положено). К примеру, при использовании
cl_updaterate 101, верное значение ex_interp= 1/101=0.009, но по
умолчанию ex_interp= 0.1 а енто выше чем 1/101- вот тут и возникает
глюк... Рекомендую: ex_interp 0- стреляем туда, куда целимся cl_updaterate:
Бытует мнение что значение данной команды надо подбирать следующим
методом: присваиваем значение cl_updaterate 101 и снижаем его до тех
пор пока параметр choke ( его можно увидеть, если набрать в консоли
команду net_graph 3) не будет равен 0 или ооочень низок. По мне, так
choke- енто самое последнее о чем стоит беспокоиться. Правильное
значение cl_updaterate- енто более глубокий вопрос чем просто choke.
Значение sv_maxupdaterate на сервере для чемпов должно иметь значение
101 ( так настроен сервер для CAL CPL)- из ентого можно сделать вывод
что в идеале значение cl_updaterate=101. Однако большинство серверов в
online имеют значение sv_maxupdaterate "30" или просто неспособны
вычислить 101 sv_maxupdaterate. Из чего следует что сервер просто
неспособен послать вам 101 пакет/секунду. Так все таки какое значение?
Большинство могут сказать " Я поставлю 101, а сколько дойдет- всё моё",
но тут уже играет отрицательную роль высокое значение ex_interp, что
нарушит баланс между этими командами. Для того, чтобы подобрать
оптимальное значение cl_upodaterate (ex_interp "0") стави его в 101 и
начинаем снижать его до тех пор пока модельки игроков не будут слегка
двигаться скачками ( при ex_interp 0 и cl_updaterate 101 - они будут
оочень сильно пропускать). Не надо бояться ставить значение
cl_updaterate ниже 50 если енто необходимо. Большинство серверов
sv_maxupdaterate "30" так что cl_updaterate 30 будет лучшим значением. Стоит отметить что начинать подборку cl_updaterate надо " сверху вниз" а не наоборот. Рекомендую: равно серверному fps и не выше sv_maxupdaterate sys_ticrate:
Для нахождения оптимального значения данной переменной необходимо
произвести несколько экспериментов. Прежде всего, если ваш сервер не
"ускорен" то значение переменной ticrate выше 100 ни к чему не
приведет. Если же сервер находится на хорошей платформе (богатый
провайдер), то бишь "ускоренный", у вас появляется место для полета
фантазии. Не смотря на то что "чем больше серверное fps тем лучше",
эффект от увеличения sys_ticrate выше 200 (а может и еще меньше) на
самом деле не окажут такого уж хорошого влияния на игру. А вот
использовать sys_ticrate "200" или ниже сделает игру более стабильной
даже если придется пожертвовать минимальным количеством
производительности. Представьте вдобавок, что компьютер, исползуемый
под игровой сервер тянет аж несколько HLDS (например CS1.6 и CZ) и для
обоих sys_ticrate "10000" нагрузка на процессор возможно будет
черезмерной. Такое положение вещей может привести к потери
производительности самой игры. В конце можно добавить, что если вы
хотите получить, скажем, 140fps то вам нужно выставить значение
sys_ticrate выше предпологаемого где-то на 20-50. (Например сервер
может спокойно тянуть 150fps, значит значение sys_ticrate будет 150+30=
180.) Рекомендую: sys_ticrate 110-180- зависит от качества сервера. Слово о LAN
Повод, по которому большинство известных турниров, таких как CPL, WCG
используют cl_updaterate 101- зависит от качества сервера. На таких
чемпах все сервера обычно "ускорены" что делает реалным такое высокое
значение cl_updaterate. Для того чтобы быстро узнать "ускорен" ли
сервер, достаточно просто обратить внимание на пинг- у простого
сервера, fps которого 50-60, все игроки имеют средний пинг 15ms, а вот
на "ускоренном" -5 ms.
|