Так как я новичёк и не могу давать ссылки на сайты плюс не хочу заниматься плагиатом Перенесу тексты статей от Уважаемого Landdropper с "Day of Defeat на Полигоне" Создаем свой конфиг. Сеть.
Конфиг индивидуален. Вы, конечно, можете использовать чужой конфиг, но
гораздо правильней сконструировать свой собственный. Эта статья,
надеюсь, поможет в этом не самом простом деле.
Конфиг - то, что сделает игру в додс удобней именно для вас. Он не
принесет вам решающего приемущества в турнирной игре, но повысит
удовольствие от игры и сделает многие вещи комфортнее.
Есть несколько правил, которые помогут вам, не сбиваться с собственного пути на путь толпы.
1. Не верьте легендам. Огромное число топ игроков
не-имеет-ни-малейшего-представления-о-том-как-устроен-конфиг. Они слепо
копируют файлы нюкера или томску не понимая что значат 90% команд в этом
кфг. Будьте умнее.
2. Не бойтесь проверять. Можно сто раз услышать, но достаточно один раз
запустить игру и проверить изменение значения чтобы понять суть той или
иной переменной.
3. Не используйте запрещенные команды. Если правила какого либо
соревнования запрещают изменений значения консольных переменных(console
variable=cvar), то использование оных повлечет штрафные санкции при
обнаружении - это может перечеркнуть все старания и тренировки
проведенные вами и вашей командой. К тому же опустит репутацию команды
ниже плинтуса. Поскольку ваша цель, эффективная игра на турнирах, нет
никакого смысла привыкать использовать эти команды и на тренировках.
Привыкайте играть с тем же конфигом с которым будете участвовать в
турнире
4. Не переусердствуйте. Знайте меру в эксперементировании. Помните, что
от добра добра не ищут. Если вам комфортно с дефолтным конфигом - не
меняйте ничего!!! Пару вечеров посвященных индивидуальным настройкам
конечно не скажутся на общем тренировочном процессе, но если вы будете
заниматься этим круглый год, это будет означать что что вы идете не по
той дорожке.
Эта статья открывает небольшой цикл статей посвященных конфигам и будет посвещена главной его части - сетевым настройкам.
Додс - онлайн игра, а значит в процесс игры вовлечено ваше соединение с
интренетом. Задача конфига, в этом смысле, - оптимизировать сетевые
настройки под большинство серверов. Настройки для российских пабликов и
европейских КВ серверов, естественно должны отличаться. Здесь мы будем
говорить о настройках для тренировок и игр с европой.
МЫ - счастливые обладатели российского интернета. А это значит, что наше
интернет соединение не стабильно и чем ближе к вечеру тем ситуция
ухудшается(каналы провайдеров забиваются, клиентские - сужаются).
Перейдем к самому интересному - командам.
net_graph - переменная предназначенная для отслеживания всех сетевых
параметров игры. Она может иметь несколько значений: (см.картинку)
0 - нет отображения
1 - только текстовые значения(зоны 3,4,6,7)
2 - зоны 8 и 9 прогрузка и значения интерполяции
3 - зоны 1 и 4 история прогрузки и процент потерь пакетов при соединении.
4 - зона 5 показывает сетевую статистику сервера
net_graph 1 - является обязательным параметром для игры на некоторых
соревнованиях(например ESL), ну а нам с вами поможет разобраться что к
чему с нашими настройками.
Как вы знаете, сетевой код работает по системе клиент-сервер. Где сервер
обменивается пакетами с информацией со всеми клиентами. Каждый пакет
содержит "мгновенную фотографию" игрового мира, нажатые клиентом клавиши
и т.д.
rate "value" - число байт которые каждую секунду может получать сервер
от клиента. По сути ширина канала клиент-сервер выделяемого из интернет
канала пользователя. В наше время только любители модемов должны
оставлять эту ширину небольшой. 25000-30000 вполне достаточно для любого
не модемного интернета.
cl_updaterate "value" - число пакетов которые клиент принимает от
сервера в секунду. Чем больше значение, тем больше будут совпадать
картинка на клиенте и на сервере. Одновременно с этим возрастает
нагрузка на канал. При низком rate канал может не выдерживать. Например
если вы используете cl_updaterate 100; rate 10000 вы будете получать
гарантированные чоки практически на любой карте. Чоки(choke) - число
пакетов которые не приходят от сервера за одну секунду.
cl_cmdrate "value" - число пакетов которые клиент отправляет на сервер.
Полный аналог cl_updaterate. Число пакетов которые не дошли до сервера в
секунду называется лоссами(loss)
Как подобрать правильные настройки именно для своего коннекта?
Ставьте рэйт 25 000 и максимальные апдейт и цмд. И играйте с включенным
нетграфом 1(на европейских серверах). По ходу пцв наблюдайте за
значениями 7 зоны нетграфа. Запоминайте значения центральных цирф. Т.е.
например на немецком сервере у вас эти значения держутся на 95 и иногда
проседают до 80. Это значит что ваш коннект не держит такие высокие
настройки и часть ваших выстрелов уходит в молоко. Ставьте ваши рэйты на
чуть меньшие значения. в нашем случае это будет cl_updaterate 75;
cl_cmdrate 75 и следите снова. Повторяйте пока ваш коннект не будет
держать стабильные сетевые настройки (люфт в 5 чоков-лоссов будет
всегда, на него внимание не обращайте). Как ни странно, если вы играете
без интерполяции, то ваши сетевые настройки зависят от того какой фпс
может держать ваш компьютер. Т.е. Если фпс больше 100 - вам не о чем
беспокоиться, но если меньше, то будет происходить вот что: допустим
ваш компьютер держит стабильные 50 фпс. Но при этом вы используете рэйты
25000 75 75. Это значит что от сервера вам приходит 75 картинок в
секунду, а ваш компьютер показывает вам только 50. Отсутствие
интерполяции означает что клиент лишние кадры просто выбросит, остававив
число отрисованных кадров в 7 зоне нетграфа равным числу фпс. А вместе с
выброшенными кадрами теряется информация о звуках выстрелов,
перемещениях соперников и т.д. Учтите, что европейские серверные конфиги
для учатстия в турнире ставят ограничения на минимальные сетевые
натсройки 15000 40 40, а это значит, что, если вы зайдете на сервер с
меньшими значениями, они, тем не менее, примут вышеуказанные значения.
Итог: Используйте максимально высокие сетевые настройки для игры которые
вам позволяет иметь ваш компьютер и провайдер - так информация которую
вы будете получать будет честнее и играть вам будет комфортнее.
Настройки на которых я остановился (коннект: Москва, корбина) 25000 66
66.
Лерп и интерполяция.
Так же вы можете использовать команду setinfo cl_interpolate 0 - которая
является полным аналогом сочетания cl_interp_ratio 0; cl_interp 0. Но
позволяет играть без интерполяции на серверах с произвольными значениями
sv_min_interp_ratio.
Есть еще несколько команд, значение которых можно менять в тех или иных
случаях, но я бы рекомендовал оставлять их по умолчанию:
cl_predict //1 или 0, предсказание действий игрока для того чтобы
передвижения и стрельба игрока начинались сразу же после нажатия на
кнопку, а не после того как подтверждение о действии придет с сервера
cl_smooth //1 или 0, сглаживание ошибок предсказания, имеет смысл ставить только с cl_predict 1
cl_resend //время в секундах между попытками наладить соединение клиента с сервером, по сути - время фризов(зависаний)
cl_timeout //время в секундах после которого клиент, не получив пакет от сервера, дисконнектиться (30 по умолчанию)
Плюс полезной может оказаться нижеследующая команда, которая оградит вас от скачеваемых с каждого паблика звуков квейк.
cl_downloadfilter //файлы которые вы можете скачивать, all - все файлы,
nosounds - все файлы, кроме звуковых файлов, none - никакие.
Еще раз напомню, сетевые настройки - главная, но достаточно простая часть вашего конфига. Постарайтесь настроить все сами.
Создаем свой конфиг. HUD.
hud - head-up-display - способ отображения информации на экране.
ДОДС, вопреки расхожему представлению, это не только стрельба, это еще и
огромная работа с информацией, ХУД отвечает за визуальную составляющую
инофрмации.
Работа с миникартой.
Важность миникарты сложно переоценить, несмотря на то, что большинство
игроков паблика убеждены что миникарта только загораживает жизненно
необходимый угол экрана. Умелое владение миникартой позволяет вам
избегать ненужных тимкилов, позволяет сосредоточить внимание только на
тех областях откуда возможно появление угрозы ну и конечно своевременно
помогать товарищам по команде. Само наличие миникарты еще не гарантирует
вам скиллбуста. Необходимо настроить ее и научиться пользоваться.
Вот некоторые настройки миникарты:
overview_health 1 (значение по умолчанию) Показывает здоровье игроков на миникарте
Убирать не стоит. Полоска здоровья занимает мало места, при этом подсказывает сколько вашим товарищам осталось жить.
overview_locked 1 Поворачиваемость карты
В незакрепленном положении(0) - карта всегда расположенна так что ваш
взгляд направлен на ее север. Дело привычки, но мне кажется удобней
значение 1.
overview_names 1 Показывает имена игроков на миникарте
Это команда полезна только по началу, когда вы следите за игрой, где
какой партнер и так понятно. Именна тиммэйтов занимают довольно много
места, поэтому рекомендую использовать значение 0.
overview_tracks 1 Показывает след передвижений игроков на миникарте
Подобно предыдущему пункту может быть полезна лишь поначалу. Когда вы
следите за действиями партнера, след становиться очевиден и только
нагружает карту дополнительной информацией.
Для тех, кто все-таки надеятся получать информацию и из области за
миникартой. Делаете карту полупрозрачной или почти прозрачной используя
малые значения переменной(например 0.1). Миникарту само собой вы будете
видеть хуже, зато если что либо шивельнется в этом углу, вы, конечно же,
будете в курсе.
overview_zoom 2.1 Массштаб миникарты
Прицел
cl_crosshair_scale масштаб прицела (чем больше значение тем меньше прицел на экране)
Размер прицела регулируйте по собственному вкусу. Не советую играть с
большими прицелами в виде точки(заслоняют модель на больших
расстояниях), и с маленькиими прицелами в види перекрестия(те же
причины)
Ставить нужно максимум - прицел будет заметнее.(С этой командой бывают проблемы, значение меняется - вид прицела не меняется)
cl_crosshair_file "crosshair6" файл прицела(может быть кастомным).
Кастомные прицелы не допускаются к использованию при переменной сервера
sv_pure 2, т.е. для всех турнирных серверных конфигов.
cl_dynamic_crosshair 1 изменение размеров прицела при беге, 0 - не меняется.
еще одна переменная значение которой нужно выставлять в зависимости от
предпочтений, подавляющее большинство игроков играют со значением 0.
Цвет прицела.
cl_crosshair_red ;cl_crosshair_green ;cl_crosshair_blue
В принципе можно менять цвет в зависимости от карты. Я предпочитаю
белый, хотя на некоторых картах он не так хорош. Рекомендую не
использовать темные цвета - их плохо видно.
Помимо миникарты и прицела есть еще несколько переменных отвечающих за визуальную информацию:
Прочие параметры:
hud_deathnotice_time 6 Время отображения фрагов в секундах.
В идеале должно быть равно времени между спаунами на каждой карте, что
бы можно было как можно точней оценивать число живых соперников. Я
рекомендую поставить это время чуть больше, особенно если рамки
отображения убийств у васменьше чем по умолчанию. Оптимальное значение
10-12. Значимость этой команды трудно переоценить.
hud_drawhistory_time 5 Время отображения игровой истории в секундах.
Информация о захватах флагов и полученных очках не так важна как о
фрагах. Не особенно нужна, но и не безполезна. Так что оставляем дефолт.
hud_saytext_time 12 Время отображения игрового чата в секундах(0 - не отображаются)
hud_centerid 1 Показывает имя дружеского игрока при наведении на него прицела (0 - не показывает)
cl_autorezoom 1 Автовозврат после выстрела в вид с прицелом для снайперки.
cl_autohelp 1 Показывает помощь немощам (0 - для тех кому помощь не нужна)
cl_showhelp 1 Показывает помощь немощам (0 - для тех кому помощь не нужна)
cl_showpluginmessages 1 Показывает сообщения плагина администрирования (0 - для тех кому не нужно)
hud_fastswitch 1 Быстрая смена оружия
hud_takesshots 1 Сохранение скриншотов со статистикой в конце раунда
hud_classautokill 0 Отмена суицида при смене класса
hud_capturepanel 0 Отключить панель прогресса захвата двойных флагов
cl_identiconmode 2 Отображение иконки над головой тиммейтов 0 - не
отбражать, 1 - отображать при наведении прицела, 2 - всегда отображать
HUD - Одна из самых важных пользовательских настроек. Умело настроенный
"под себя" ХУД принесет комфорт и сделает процесс ориентирования во
время игры гораздо проще.
О lerp и его особенностях
Как вы знаете, после летнего обновления сетевой код DoD:S был изменен.
Появилось несколько новых переменных и несколько старых убрано. Об их
значении и пойдет речь.
Небольшой ликбез
Клиент-сервер - сетевой код игры созданый на основе обмена пакетами
между сервером и клиентом. В этих пакетах информация о текущем состоянии
игрового мира (расположении объектов и т.д.)
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, то вы
обрекаете часть своих выстрелов застревать в промежутке клиент-сервер.
Вывод
Добивайтесь минимального значения lerp, оставляя его белым на каждом
сервере, на котором играете. Это позволит вам снизить к минимуму все
проблемы, связанные с вашим соединением с интернетом.
На последок замечу, что существует миф, будто бы lerp должен быть равен
пингу. Пинг - время за которое пакет доходит от сервера к клиенту и он
не имеет никакого отношения к интерполяции. Бесполезно пытаться найти
связи в этих двух понятиях. При любом пинге сохраняйте lerp минимальным и
белым.
Совет sok'а
Чтобы не париться с математикой, можно забиндить клавиши так:
alias lerpa+ "incrementvar cl_interp 0.01 0.09 +0.0001"// cl_interp +0.0001
alias lerpa- "incrementvar cl_interp 0.01 0.09 -0.0001"// cl_interp -0.0001
alias lerpb+ "incrementvar cl_interp 0.01 0.09 +0.001" // cl_interp +0.001
alias lerpb- "incrementvar cl_interp 0.01 0.09 -0.001"// cl_interp -0.001
alias lerpc+ "incrementvar cl_interp 0.01 0.09 +0.01"// cl_interp +0.01
alias lerpc- "incrementvar cl_interp 0.01 0.09 -0.01"// cl_interp +0.01