Многие игроки CS:S сталкиваются с проблемой лагов на серверах. Часто они жалуются на то, лаги происходят по вине сервера, а не по их вине. Конечно бывает и так, но чаще вина лежит не столько на сервере, сколько на самих игроках. Данная статья призвана объяснить игрокам, отчего случаются лаги, и как их избежать. Тот кто поймёт причины лагов, сможет их устранить, либо минимизировать.
Для начала рассмотрим ряд основных терминов:
Lag (лаг) – термин, означающий медленное (заторможенное) соединение, т.е. «лагающее». Ни в коем случае не путать с другими лагами, в том числе с теми, что используются штурманами на кораблях.
Ping (пинг) – величина, определяющая время прохождения пакета информации от Вашего компьютера до сервера и обратно, измеряется в миллисекундах.
Latency (задержка) – величина, определяющая время прохождения пакета информации от Вашего компьютера до сервера (она, конечно, меньше, чем пинг). Не стоит путать ping и latency!
Rates (коэффициент скорости) – термин, используемый в настройках скорости Counter-Strike: Source.
Choke (буквально – душить, заглушать) – это серверный лаг. Т.е. когда ваш комп посылает на сервер информационные пакеты, такие как позиции игрока, произведённые выстрелы и прочие ваши действия, но они не доходят до сервера. В CS:S по умолчанию все действия игроков отправляются на сервер 30 раз в секунду, -при отсутствии серверных лагов. Choke может иметь две причины:
1) Ваш компьютер отправляет на сервер слишком много пакетов в секунду. Например, от вас уходят на сервер 100 пакетов в секунду, но тот, в свою очередь, настроен так, что может принять лишь 40 пакетов в секунду. В итоге получается choke 60. При этом становится очевидно, что большинство ваших выстрелов просто не может дойти до сервера в нужное время. Лишь 40% Ваших выстрелов будет зарегистрировано. Теперь представьте себе ситуацию, что вы встречаетесь лицом к лицу с противником, стреляете в него первым, но не причиняете ему практического вреда, тогда как он вас убивает первым же выстрелом. Думаю, у многих была подобная ситуация. И многих эта ситуация выводила из себя.
2) Сервер не способен обрабатывать всю информацию, которая ему отправляется от игроков. Причины этому -либо сетевой лаг на сервере, либо лаг, вызванный перегрузкой процессора, отвечающего за работу сервера (например, при невысокой тактовой частоте). Однако в этом случае клиент (т.е. игрок) может частично подстроиться под особенности сервера и минимизировать лаги. См. решение ниже.
Loss (потери) – т.е. лаг, возникающий не по вине Вашего компьютера, и не по вине игрового сервера. Дело в том, что Ваши пакеты (команды), идущие от Вас на сервер, имеют длинный (зачастую) маршрут, проходящий по большому количеству различных сетей, в частности если сервер находится от Вас далеко, за сотни или тысячи километров. В этом случае часто пакеты запаздывают, либо вовсе "теряются”. Часто loss возникает при использовании беспроводных соединений. Этот лаг не поддаётся контролю.
Tickrate (тикрейт) – tick (тик) это временная единица, во время которой сервер обрабатывает входящую информацию, а также производит её проверку и обновляет состояние объектов игры. Большое значение тикрейта позволяет повысить точность обработки Вашей информации сервером, однако требует достаточной мощности сервера (точнее железа, на котором он стоит). К примеру, по рекомендации компании Valve, серверам с количеством 20 слотов желательно иметь тикрейт 66. Более высокий стандартный тикрейт, такой как 100, может использоваться на CW серверах или на паблик-серверах, устанавливаемых в количестве одного или двух на отдельно взятую машину с небольшим количеством слотов.
Итак, с терминами разобрались. Теперь попробуем узнать игровые возможности на отдельно взятой машине. Делается это с помощью net_graph 3. Чтобы вызвать это приложение, наберите в консоли игры команду net_graph 3. (Без точки, разумеется.) Вызвать консоль можно клавишей ~ (тильда). (Примечание: чтобы убрать приложение, наберите в консоли команду net_graph 0.) Появляется такое окно:
Зелёными цифрами обозначено следующее:
1) FPS – сколько фреймов в секунду способна дать Ваша видеокарта;
2) Ping – время прохождения пакета информации от Вашего компьютера до сервера и обратно в миллисекундах;
3) Data – сколько tcp/ip пакетов Вы способны отправить и получить;
4) Kilobits per second – сколько килобит Вы отправляете и получаете (в нашем случае это не важно);
5) Сколько раз в секунду Ваш компьютер обновляет позицию игрока (т.е. Вас) на сервере (out -внизу). Сколько раз в секунду сервер посылает позицию игрока (in - сверху);
6) Loss – потери, возникающие в сети, не по вашей вине и не по вине сервера;
7) Choke – серверный лаг (см. выше).
Теперь переходим к решению (как убрать лаги в игре).
Каждый сервер настроен по разному. Это обусловлено тем, что мощность компьютеров, как и скорость интернет-соединения не может быть везде одинаковой. Поэтому на одних серверах количество слотов небольшое, на других, напротив, высокое. Я не буду углубляться на тему железа, но могу пояснить одно, что сервер в 10 слотов должен иметь скорость интернет-соединения не ниже 512 Кбит/с. Т.е. если у Вас на сервере количество слотов 15, а скорость 256 Кбит/с, то сервер будет у Вас лагать, даже если вы имеете достаточно мощный процессор и большой объём памяти. Поэтому важно правильно рассчитывать количество слотов и, безусловно - рейты. И те и другие выставляются в настройках сервера. Зачастую их значения можно узнать прямо на серверах, но встречаются исключения. В этом случае мы можем сами попытаться подобрать оптимальные значения рейтов (подстроиться под данный сервер).
Напомню, что рейты можно менять в консоли игры. Просто пишем значения (для примера): rate 25000 cl_updaterate 100 cl_cmdrate 100
cl_updaterate – сколько раз в секунду Ваш компьютер запрашивает сервер о позициях игроков (по умолчанию 20); cl_cmdrate – сколько раз в секунду Ваш компьютер посылает позиции игроков на сервер (по умолчанию 20); rate – максимальное количество байтов, которые Вы можете получить.
Зайдите на сервер и попробуйте сменить Ваши рейты на cl_cmdrate 80 и cl_updaterate 60. Поиграйте несколько минут, и сравните с предыдущими значениями (меньше стало лагов или больше). Вы должны убедится, что значения в области под номером 5 на net_graph не урезаются сервером. Если значения всё время показывают 33.3 или 66.6, это означает, что Вы должны уменьшить значения до cl_cmdrate 66 и cl_updaterate 45. Поиграйте несколько минут, наблюдая за loss и choke. Если у Вас choke, Вы должны выставить рейты на более низкие значения. Придерживайтесь соотношения три к четырём, то есть updaterate должен составлять ¾ от cmdrate. Собственно это не важно, хотя желательно. Например, если у Вас choke 10, то и рейты следует опустить на 10 значений, до cl_updaterate 40 и cl_cmdrate 55. При игре на паблик-серверах нормальным считается choke 5 в середине раунда, а в начале и в конце раунда не больше 10-20 (choke всегода выше в начале и в конце раунда, - в это время сервер сбрасывает и обновляет объекты). Стоит иметь ввиду, что на серверах с постоянным респауном игроков (типа DM или Conquest) choke, как правило, выше, так как в данном случае на сервер идёт большая нагрузка, чем на обычный сервер. Поэтому изменение рейтов к сожалению не всегда спасает от choke, но позволяет его уменьшить.
Настройка рейтов позволяет Вам установить максимальное количество данных, которые приходят к Вам от сервера. Часто принято использовать следующие значения:
Modem 56k -< 20000 Slow DSL/Cable – минимум 20000 Fast DSL/Cable – минимум 25000
Чтобы установить рейты, просто введите в консоли необходимое значение. Например: rate 25000.
Примечание: Даже правильно выставленные значения рейтов не в силах избавить Вас полностью от всех лагов. Однако это улучшит игру и Вам, и Вашим соперникам. Удачи!
|