Консольные команды Counter-Strike 1.6


Консольные команды Counter-Strike 1.6 

Команда управления

Команда Описание

+forward двигаться вперед
+back двигаться назад
+moveleft стрейфиться налево
+moveright стрейфиться направо
+left повернуться налево
+right повернуться направо
+jump подпрыгнуть
+duck присесть
+use использовать
+attack стрелять, резать ножом
+attack2 альтернативная стрельба / дополнительная функция оружия
+reload перезарядить оружие
slot1 1-ый слот
slot2 2-ой слот
slot3 3-ый слот
slot4 4-ый слот
slot5 5-ый слот
slot6 6-ой слот
slot7 7-ой слот
slot8 8-ой слот
slot9 9-ый слот
slot10 нулевой слот
cancelselect отменить
messagemode говорить всем игрокам
messagemode2 говорить игрокам своей команды
radio1 первая группа радиокоманд
radio2 вторая группа радиокоманд
radio3 третья группа радиокоманд
toggleconsole открыть/закрыть консоль
chooseteam выбрать команду, за которую хотите играть
+showscores показать статистику
drop выбросить текущее оружие
nightvision включить/выключить очки ночного видения
impulse 201 нарисовать лого
impulse 100 включить/выключить фонарь
invprev переключиться на предыдущее оружие
invnext переключиться на следующее оружие
invlast переключиться на последнее оружие
buy включить меню покупки
buyammo1 купить патроны для основного оружия
buyammo2 купить патроны для пистолета
buyequip купить допольнительное снаряжение
pause запаузить игру
+voicerecord использовать голосовую коммуникацию
+commandmenu показать встроенное VGUI меню
showbriefing показать брифинг к карте
snapshot сделать скриншот
quit выйти из игры


Команда Admin Mod'a

Команда Описание

admin_help <клучевое слово или фраза | # > Показывает информацию о команде или о всех командах(#)
admin_ban <никнейм или WONID или IP> [<минуты>] Бан игрока. Если параметр "минуты" не указан, игрок отправляется в баньку навечно:)
admin_cancelvote Отменить текущее hlds_ld голосование
admin_cfg <конфиг> Запустить конфиг на сервере
admin_chat <сообщение> Сказать что-нибудь другим админам
admin_csay <сообщение> Показывает сообщение в центре экрана
admin_denymap <карта> Удаляет все голоса за карту
admin_disco Диско! Работает только в fun-режиме
admin_enableallweapons Разрешить покупку всего оружия
admin_enableequipment Разрешить покупку всего дополнительного снаряжения
admin_enablemenu <# меню> Убирает запрет с # меню
admin_enableweapon <# меню> <# оружия> Разрешает покупать # оружие из # меню
admin_execall <команда> Все игроки запускают команду
admin_execclient <никнейм> <команда> Игрок c никнеймом запускат команду
admin_execteam <команда(team)> <команда> Все игроки команды(контры или терроры) запускают команду
admin_fraglimit <лимит фрагов> Устанавливает серверную переменную mp_fraglimit
admin_friendlyfire <"on" | "off"> Устанавливает mp_friendlyfire
admin_fun <"on" | "off"> Вкючает / выключает fun-режим
admin_gag <никнейм> [<минуты>] Заткнуть игрока с никнеймом
admin_glow <цвет | "off"> Блестеть(сиять) каким-нибудь цветом
admin_godmode <никнейм> <"on" | "off"> Режим бога для игрока с никнеймом
admin_gravity <гравитация> Устанавливает переменную sv_gravity
admin_hostname <имя> Устанавливает переменную hostname
admin_kick <никнейм> [<причина>] Кикает игрока с никнеймом
admin_listmaps Показывает карты в mapcycle
admin_listspawn Выводит список всех энтити
admin_llama <никнейм> На английском было так:Llama-fy target
admin_map <карта> Меняет карту
admin_messagemode <команда> Сервер будет воспринимать 'say' как команду
admin_movespawn <идентификатор> Передвигает объект
admin_nextmap Показывает следующую карту в mapcycle
admin_noclip <никнейм> <"on" | "off"> Игрок с никнеймом становится "невещественным"
admin_nomessagemode Сервер будет воспринимать 'say' как 'say'
admin_nopass Снимает пароль с сервера
admin_pass <пароль> Устанавливает пароль на сервер
admin_pause Ставит значение "1" у переменной pausable
admin_psay <никнейм> <сообщение> Посылает приватное сообщение игроку с никнеймом
admin_rcon <команда> Исполняет rcon команду
admin_reload Обновляет файлы AdminMod
admin_removespawn <идентификатор> Убирает объект
admin_restrictallweapons Запретить покупку оружия
admin_restrictequipment Запретить покупку дополнительного снаряжения
admin_restrictmenu <# меню> Запретить покупку из # меню
admin_restrictweapon <# меню> <# оружие> Запретить покупку # оружия из # меню
admin_say <сообщение> Послать сообщение в качестве админа
admin_servercfg <конфиг> Сделать конфиг дофолтовым для сервера
admin_slap <никнейм> Поранить игрока с никнеймом
admin_slay <никнейм> Убить игрока с никнеймом
admin_slayteam <команда (team)> Убить всю команду. Хе-хе:)
admin_spawn <класс> Создать новый объект
admin_ssay <сообщение> Послать сообщение от админа, причем никнейм виден не будет
admin_stack Расположить всех перед собой
admin_startvote Объявляет hlds_ld голосование
admin_teamplay <тимплей> Устанавливает переменнную mp_teamplay
admin_teleport <никнейм> Телепортирует игрока в заданные координаты
admin_timeleft Показывает, сколько времени осталось до смены карты
admin_timelimit <минуты> Устанавливает переменную mp_timelimit
admin_tsay [цвет] <сообщение> Печатает сообщение в правом нижнем углу
admin_unban <никнейм или WONID или IP> Разбанить...
admin_ungag <никнейм> "Вынуть кляп", то есть разрешить говорить
admin_unllama <никнейм> На английском: Unllama-fy target
admin_unpause Ставит переменной pausable значение "0"
admin_userlist [<имя>] Показывает список игроков
admin_userorigin <никнейм> Возвращает координаты игрока с никнеймом
admin_vote_kick <никнейм> Объявляет голосование за то, чтобы кикнуть игрока с никнеймом
admin_vote_map <карта> Объявляет голосование за то, чтобы сменить карту
admin_vsay <вопрос> Объявляет голосование по решению вопроса
say rockthevote Объявляет hlds_ld голосование
say vote <карта> Голос за карту
say glow <цвет | "off"> Блестеть(сиять) каким-нибудь цветом


Команда AMX Mod'a

Команда - Описание

amx_kick [reason] - кикнуть игрока с сервера
amx_ban [reason] - забанить игрока на сервере
amx_banid [reason] - забанить игрока на сервере по SteamID/WonID
amx_banip [reason] - забанить игрока по IP
amx_unban - разбанить игрока
amx_slay - убить игрока
amx_slap [power] - пнуть игрока. "Ёж птица гордая пока не пнёшь не полетит".
amx_leave [tag] [tag] [tag] - оставить на сервере только игроков с определёным "tag" в имени
amx_pause - поставить/убрать паузу
amx_who - показать у кого какие права на сервере...
amx_cvar [value] - изменить или отобразить значения cvar-ов. Т.е. можно изменить на отличное от сервеного значение, к примеру, mp_timelimit.
amx_map - сменить карту
amx_cfg - выполнить конфиг
amx_rcon - выполнить команду в консоле сервера.
amx_plugins - список всех загруженых плагинов
amx_modules - аналогично список всех загруженых модулей


Чат админов:

amx_say - отправить сообщение всем игрокам
amx_chat - отправить сообщение админам
amx_psay - отправить приватное сообщение
amx_tsay - отправить сообщение всем игрокам (слева жирным)
amx_csay - тоже что и выше только по центру экрана


Админские голосования:

amx_votemap [map] [map] [map] - начать голосование за смену карты
amx_votekick - начать голосование на кик игрока
amx_voteban - Начать голосование на бан игрока
amx_vote - просто так любое голосование типа Вася му№;%№ 1. Да 2. Да конечно
amx_cancelvote - прервать последнее голосование


 ay...

say /hp - показать информацию о Вашем убийце
say /statsme - отобразить Вашу статистику
say /stats - показать статистику остальных
say /top15 - отобразить 15 лучших игроков
say /rank - отобразить Ваше место на сервере.
say nextmap - отображает какая карта будет следующей
say timeleft - сколько времени до конца текущей карты
say thetime - отображает текущее время


Меню:

amx_cvarmenu - меню cvars’ов
amx_mapmenu - отображать меню смены карты
amx_kickmenu - отображать меню kick
amx_banmenu - меню бан
amx_votemapmenu - отображать меню выбора карт на голосование
amx_slapmenu - меню slap (пнуть игрока)
amx_teammenu - отображать меню выбора команды игрока
amx_clcmdmenu - меню клиентских команд
amx_restmenu - ограничение на использование оружия в игре
amx_teleportmenu - меню телепортаций
amx_statscfgmenu - отобразить меню конфигурации статистики
amx_statscfg [parameters] - отображает справку по конфигурации статистики:
amx_nick "name" "name" - поменять игроку ник


Counter-Strike Команды серверa

mp_autoteambalance Включение(1) / выключение(0) баланса в командах
mp_c4timer Значение этого параметра равно секундам, которые пройдут после закладки бомбы перед ее взрывом
mp_fadetoblack При значении "1" экран становится черным, когда игрок умирает
mp_flashlight Включение(1) / выключение(0) возможности использования фонарика
mp_footsteps Включение(1) / выключение(0) шагов в игре
mp_forcechasecam "Свободный полет"(0) / возможность следить только за игроками своей команды(1) / "лежачее положение"(2)
mp_timelimit Время, через которое меняется карта, значение 0 выключено, тоесть карта не меняется.
mp_roundtime Время одного раунда
mp_freezetime Значение этого параметра равно секундам, которые даны на закупку оружия
mp_limitteams Количество игроков на которое должна быть в одна команде больше, чем в другой чтобы произошло выравнивание команд по кол-ву. Значение 0-выкл
mp_friendlyfire В зависимости от этого параметра своих либо можно убивать(1), либо нет(0)
mp_hostagepenalty Значение этого параметра равно заложникам, которых над убить, прежде чем игрока кикнет с сервера
mp_mapvoteratio Значение этого параметра равно той части игроков(0,1 - 1), которые должны проголосовать за смену карты
mp_startmoney Параметр, устанавливающий количество денег, которое дается вначале игры
mp_tkpunish Параметр, устанавливающий, должны ли тимкиллеры отдыхать следующий раунд(1) или нет(0) hostname имя сервера
sv_restartround Значение этого параметра равно секундам, через которые произойдет рестарт
sv_cheats Значение (1) включение режима кодов, (0) - выключение этого режима (по умолчанию)
sv_password Пароль на присоединения к серверу.
sv_maxspeed Скорость предвижения по умолчанию значение 270
sv_gravity Гравитация по умолчанию значение 800
kick Выкинуть игрока из игры (нужно ввести имя игрока)
сhangelevel Смена катры, при этом все игроки остаются (нужно ввести название карты)
map Смена катры, при этом все игроки выкидываются с сервера (нужно ввести название карты)
con_password Пароль для удалённого администрирования сервера вводится на сервере. В качестве значения <пароль>. Так же вводится на стороне клиента для управления сервером перед командами (Например: con_password <пароль> map de_dust )
pausable Значение (1) разрешает установку пауз, значение (0) запрещает.


Команды мыши

Команда Описание

+mlook Позволяет поднимать прицел вверх, вниз.
m_filter Позволяет включить "сглаживание" движения мыши
m_forward Скорость мышки прямо
m_pitch 0.022 Устанавливает коэффициент чувствительности мыши при движении вних и вверх, при отрицательных значениях получим invert
m_side 0.800 Устанавливает скорость стрейфа мыши (например, при включенной команде +strafe)
m_yaw 0.022 Устанавливает коэффициент чувствительности мыши при движении влево, вправо
sensitivity чувствительность мыши
zoom_sensitivity_ratio чувствительность мыши с зумом


Команды настройки звука

Команда Описание

hisound Включает высококачественный звук: 1=22kHz, 0=11kHz
nosound Выключает(1) или включает звук(0)
playvol Громкость проигрывания демки
s_2dvolume Максимальная громкость 2d звука (0 - 1)
s_a3d включает(1), выключает(0) поддержку A3D
s_automax_distance Устанавливает дистанцию для максимальной громкости
s_automin_distance Устанавливает дистанцию для минимальной громкости
s_buffersize 65536 устанавливает размер буфера в байтах
s_disable_a3d выключает a3d
s_distance 60 вообщем, чем больше значение, тем ближе все слышно
s_eax включает(1) или выключает(0) поддержку EAX
s_enable_a3d включапет a3d
s_geometry включает(1)или выключает(0) геометрическое разбиение(только для a3d 2.0)
s_max_distance максимальная дистанция, когда игрок еще слышит звуки (s_min_distance - бесконечность)
s_min_distance минимальная дистанция, когда игрок начинается слышить звуки (0 - s_max_distance)
s_numpolys количество полигонов, обрабатываемых в a3d
s_occfactor проницаемость материала, то есть насколько материал заглушает звук (0 - 1)
s_refdelay минимальная дистанция между источников и ближайшим отражением
s_refgain
s_verbwet контролирует "сухость" звуков... чем больше значение, тем более "влажный" звук
speak если в параметре указаны некоторые ключевые слова, то вы их услышите чере наушники или колонки, например speak mesa
stopsound прекращает проигрывать текущий звук
ambient_fade 100 устанавливает дистанцию, на которой слышны "включенные в карту" звуки, например музыка на cs_italy
ambient_level устанавливает громкость для встроенных звуков (смотрите выше)

Команды голосовой связи

voice_loopback 1 Создайте сервер и наберите в консоли команду voice_loopback 1. Теперь скажите что-нибудь. То, что вы услышите в наушниках и есть то, как вас слышат другие. Теперь подберите оптимальную громкость вашего голоса и расстояние от рта до микрофона.
voice_scale x Эта команда устанавливает громкость голоса всех людей, в том числе и вашего.
voice_overdrive N Ослабляет все звуки (выстрелы и т.д.) в N раз, когда кто-то говорит. Оптимальнаое значение от 1 до 2.
voice_overdrivefadetime x.xxx Определяет время в секундах, в течение которого будет действовать эффект ослабления окружающих звуков (см. предыдущую команду). Оптимально 0.4.
voice_maxgain x Сглаживает голос говорящих. Ставьте от 1 до 5. Поэкспериментируйте в онлайне.
voice_avggain x Усреднение голосовой волны (удаление шума). Установите 0.5 - 0.1.
voice_fadeouttime x.xxx Влияет на время затухания вашего голоса. Оставьте около 0.1.


Команды настройки GL и видео

Команда Описание

gl_playermip Детализация моделей игроков
gl_picmip Детализация текстур 0-3
gl_max_size Ограничение маскимального размера текстуры, чем меньше значение, тем размытее текстуры
gl_texturemode Качество текстур
gl_polyoffset Смешение декалей относительно поверхности
gamma Гамма
ightgamma Гамма освещения
brightness Яркость
gl_ztrick Для карт 3DFx нужно поставить 1 для ускорения
gl_alphamin Видимость прозрачных текстур
gl_monolights При значении 1 карта становится светлой везде
violence_ablood Показывать ли кровь, мясо и т.д.
violence_agibs Показывать ли кровь, мясо и т.д.
violence_hblood Показывать ли кровь, мясо и т.д.
violence_hgibs Показывать ли кровь, мясо и т.д.
r_drawentities При значении 0 не видно объектов(энтитей), в том числе и игроков
r_drawviewmodel При значении 0 не вижно модельки оружия
r_dynamic Динамическое освещение
r_shadows Тени предметов
r_mmx Для включения поддержки ММХ
r_decals Число декалей в игре
fastsprites Качество дыма
max_shells Число одновременно видимых гильз
max_smokepuffs Число одновременно видимых дымков от пуль, при попадание в стены.

Команды для просмотра и записи демок

Команда Описание

appenddemo Записывает демку и добавляет ее в начало demo.dem
listdemo Показывает информацию о демке
playdemo Проигрывает демку на нормальной скорости
playvol 9 Громкость звука при проигрывании демки
record Записывает демку
setdemoinfo info Добавляет информацию о демке, например название
startdemos demo1, demo2, ..., demon Начинает проигрывать демки в последовательности их указания в качестве параметров, когда заканчивается последняя, начинает проигрывать все демки заново
stop останавливает записывание демки
stopdemo Прекращает проигрывать демку
swapdemo Меняет позиции сегментов в демке
timedemo Проигрывает демку с максимальным fps и показывает средний fps

Команды подключения к серверу

Команда Описание

allowupload Запрещает закачку на сервер декалей и моделей(0)
cmdlist выводит список всех команд, если напечатать 'cmdlist a', то выведет все команды, начинающиеся с буквы a, а команда 'cmdlist log logfile' запишет все команды в лог-файл logfile
cvarlist то же самое, что и предыдущая команда, только выводит список переменных, а не команд
connect IP коннектит к серверу с IP
developer 1 при значении 1 выводит дополнительные отладочные сообщения в консоли
disconnect отсоединение от сервера
echo "message" выводит текст в консольке
enableconsole открывает консоль
exec file запускает конфиг file
fullinfo показывает инфу о пользователе
fullserverinfo показывает инфу о сервере
getcertificate получает сертификат от WON
getsv показывает IP каждого сервака и общее число серверов
hideconsole закрывает консоль
motd показывает Совет Дня и motd.txt файла на сервере
pingsv пингует сервер
quit выход из игры
reconnect переконнект к текущему серверу
retry пытается подконнектится к серверу четыре раза
serverinfo показывает информацию о сервере
toggleconsole в зависимости от состояния консоли открывает или закрывает ее
wait короткая пауза в алиасе или скрипте(примерно равна 1/20 - 1/25 секунде)

Команды настройки вида игры

Команда Описание

adjust_crosshair изменяет цвет прицела
bottomcolor 6 устанавливает "нижний" цвет у модели игрока
drawradar включает радар
hideradar выключает радар
force_centerview заставляет игрока смотреть прямо вперед
graphheight 64 устанавливает ширину графы r_netgraph
graphhigh 512 устанавливает макисмальное значение, которое показывает графа
graphmedian 128 устанавливает среднее значение графы
hud_centerid 1 показывает имя игрока в центре(1) или внизу(0)
hud_fastswitch 1 быстрое(1) или медленное переключение оружия(то есть надо ли нажимать стрельбу, чтобы переключить пушку)
hud_saytext_time 15 устанавливает время секунд, в течение которых мессаги остаются на экране
net_graph 1 показывает FPS и некоторые другие параметры, при значении "3" показывает информацию без графы, тем самым "сохраняя" FPS
r_decals 250 максимальное количество декалей, которые видны на карте
r_drawviewmodel 0 показывает(1) или не показывает(0) модельку оружия
r_netgraph 0 показывает информацию о соединении(1) или информацию о посылке сетевых пакетов(2)
scr_centertime 2 устанавливает как долго сообщения сервера остаются на экране
scr_conspeed 600 скорость выпадания консольки
scr_printspeed 7 скорость печати сообщений на экране
sizedown уменьшает разрешение, но повышает FPS
sizeup увеличивает разрешение, но понижает FPS
topcolor 30 устанавливает "верхний" цвет для модельки игрока
toggleconsole консоль появляется и закрывается при повторении команды
viewframe включает wireframe режим(только для OpenGL)

Команды cl_

Команда Описание

cl_allowdownload Разрешает(1), запрещает(1) скачивание карт, моделек и декалей с сервера
cl_allowupload Разрешает(1), запрещает(1) закачку карт, моделек и декалей на сервер
cl_anglespeedkey Устанавливает скорость вращения с помощью клавиш
cl_backspeed Задает "заднюю" скорость игрока
cl_bob Измеряет количество "подскакиваний" изображения, когда игрок бежит
cl_bobcycle Устанавливает частоту "подскакиваний" изображения игрока, когда он бежит
cl_bobup Устанавливает количество "подскакиваний" изображения игрока, когда он бежит
cl_download_ingame Разрешает(1), запрещает(1) скачивание моделек и декалей с сервера во время игры
cl_forwardspeed Задает скорость игрока при движении вперед
cl_gaitestimation Дает возможность ходить игроку
cl_gg Включает шаблонный(измеряющий) режим игры (если честно, сам не понял )
cl_himodels При значении "1" показывает высококачественные модельки игроков
cl_messages Показывает сообщения сервера
cl_movespeedkey Устанавливает скорость движения для клавиатуры
cl_nopred Включает упреждение на стороне клиента
cl_pitchdown Задает максимальный угол, на который игрок может смотреть вверх(по дефолту 89)
cl_pitchspeed Устанавливают скорость изменения вертикального угла(смотри cl_pitchdown и cl_pitchup)
cl_pitchup Задает максимальный угол, на который игрок может смотреть вниз(по дефолту 89)
cl_showfps Показывает FPS(кадров в секунду)
cl_shownet Показывает параметры сетевых пакетов
cl_slist Устанавливает число серверов, которых видно с помощью команды slist
cl_solid_players Включает режим "солид" при изображении моделей игроков
cl_upspeed Устанавливает скорость, с которой игрок взбирается наверх
cl_waterdist Задает дистанцию в воде.
cl_yawspeed Задает скорость поворота




ZBot для CS 1.6

ZBot — официальные боты фирмы Valve для Counter-Strike 1.6. Надо сразу сказать, что боты очень хороши! То, что было до этого (Akimbot, а для CS 1.5 — PODBot, Nice, Real) — полная нелепица. Рассказывать о преимуществах ZBot долго. Проще скачать и все посмотреть самому. Скажу лишь, что боты могут использовать щит, могут красться, кидают флэшки и взрывные гранаты, могут услышать ваши шаги и поменять траекторию движения (если бот бежал куда-то, он может развернуться и пойти на вас) и т.д. До идеала им далеко, но то, что уже есть — очень неплохо! Советую скачать и испробовать все самим.
Преимуществом (а как некоторые уже отметили, и недостатком) ZBot является отсутсвие требований к вэйпоинтам, т.е. вы можете играть с ботами на карте, не имеющей вэйпоинтов! Конечно же, это преимущество! Но некоторые проблемы с авторасстановкой вэйпоинтов пока что имеются. Однако играть можно и даже очень неплохо.
В начале карты нужно будет подождать (когда вы напишете bot_add, то начнется процесс автоматической расстановки вэйпоинтов, на экране вы вскоре увидете надпись Analyzing, при этом все будет неслабо тормозить). По завершении растановки вэйпоинтов, они будут сохранены в файл *.NAV в директории «cstrike/maps». Карта будет перезапущена и можно начинать играть! Пишем опять bot_add и играем. Тормозов уже не будет.

Установка ZBot
Распакуйте архив в папку Cstrike. Описание команд на английском вы можете найти в файле zbot_command.txt. В этой же статье я привожу вольный перевод официального руководства.

Команды ZBot

bot_add — добавить бота (бот пойдет за команду, указанную параметром bot_join_team)
bot_add_t — за террориста
bot_add_ct — за контра

bot_kill name|all — убить бота по имени или всех сразу (all)
bot_kick name|all — кикнуть бота по имени или всех сразу (all)
bot_knives_only — боты играют только на ножах
bot_pistols_only — только на пистолетах
bot_snipers_only — только со снайперками
bot_all_weapons — использую все оружие
bot_difficulty 0-3 — мастерство бота (3 — самый сильный, действует на новодобавленных ботов; уже играющие боты будут иметь старый уровень мастерства)
bot_quota число — минимальное количество ботов (если вы кикните бота, то новый бот автоматически добавится; значение 0 отключает этот параметр)
bot_prefix имя — данное имя (а точнее префикс) будет добавлено к имени каждого новосозданного бота. Типа, можно симулировать ClanWar ;)
bot_join_team ct|t|any — устанавливает, к какой команде будут присоединяться боты (контры; терры; к обеим)
bot_join_after_player 0|1 — боты присоединяются только, когда хотя бы один «живой» игрок есть на сервере (0 — боты создадутся, даже если людей на сервере нет)

bot_allow_pistols 0|1 — ботам разрешено использовать/покупать пистолеты
bot_allow_shotguns 0|1 — дробовики
bot_allow_sub_machine_guns 0|1 — пистолеты-пулеметы (3-шки)
bot_allow_rifles 0|1 — винтовки, кроме снайперок
bot_allow_machine_guns 0|1 — M249
bot_allow_grenades 0|1 — гранаты
bot_allow_snipers 0|1 — снайперки
bot_allow_shield 0|1 — щит
bot_allow_rogues 0|1 — безбашенные боты (если 1 — боты бегают, никого не слушают и палят во все, что движется :)

Изменение навигации ZBot

Нижеследующие команды предназначены для ручной правки путей ботов (NAV-данных). Рекомендуется забиндить эти команды на какие-нибудь клавиши для удобства использования.

ПРЕДОСТЕРЕЖЕНИЕ: операции «отмена» (undo) нет, поэтому почаще сохраняйтесь.

bot_nav_mark

Помечает выбранную NAV-область для последующих операций.

bot_nav_delete Удаляет выбранную NAV-область.
bot_nav_split Разделяет выбранную NAV-область на 2 области по БЕЛОЙ линии.
bot_nav_merge Объединяет текущую выбранную NAV-область с предыдущей помеченной. Объединение произойдет только в том случае, если размеры обеих NAV-областей совпадают по линии объединения.
bot_nav_connect Создает однонаправленную связь от текущей помеченной NAV-области до текущей выбранной NAV-области. Это говорит ботам, что они могут бегать ОТ выделенной области ДО выбранной. В большинстве случаев, необходимо соединять области в обоих направлениях. Исключение: области, когда бот должен спрыгнуть куда-то вниз (назад ему уже не попасть).
bot_nav_disconnect Удаляет все связи от текущей помеченной области до текущей выбранной области.
bot_nav_begin_area bot_nav_end_area Эти две команды создают новые области: bot_nav_begin_area помечает один угол области, а bot_nav_end_area — противоположный и собственно, создает область. Для отмены операции напишите команду bot_nav_begin_area снова.
bot_nav_splice Создает новую NAV-область между текущей помеченной областью и текущей выбранной областью и соединяет новую область двусторонней связью. Данная команда особенно полезна в наклонных областях.
bot_nav_crouch Помечает область как «crouch», т.е. застявляет ботов ползти (идти вприсядку) в этой области.
bot_nav_jump Помечает область как «jump», т.е. заставляет ботов прыгать в этой области.
bot_nav_analyze Анализирует NAV-данные и определяет на карте доступные (достижимые) области. Операция может занять несколько минут в зависимости от размеров и сложности строения карты.

УТОЧНЕНИЕ: Данная команда требует, чтобы на карте был хотя бы 1 бот. Рекомендуется поступать следующим образом: сохранитесь, добавьте бота и быстренько введите эту команду: bot_analyze.

bot_nav_save Сохраняет навигацию в файле *.NAV в директорию «cstrike/maps» под именем карты.
bot_nav_load Загружает NAV-данные из файла, очистив текущие данные.


Редактирование навигации

bot_nav_edit 0|1 Значение 1 — позволяет редактировать навигацию вручную.
bot_nav_zdraw значение высоты Устанавливает высоту навигационных элементов над землей в режиме редактирования. Если рельеф карты довольно сильно меняется (подъемы, спуски), то будет полезно увеличить этот параметр до 10 или 15. По умолчанию: 4.
bot_quicksave 0|1 При значение 1 операция анализа карты будет пропущена. Но помните, что без анализа, боты не смогут правильно смотреть.


Отладка

bot_walk 0|1 Боты не могут бегать (только ходят).
bot_stop 0|1 Боты вообще не двигаются.
bot_show_nav 0|1 При значении 1 навигация будет показана около бота.
bot_show_danger 0|1 При значении 1 «опасность» будет показана для каждой NAV-области в виде вертикальной полоски. СИНЯЯ полоса показывает опасность для контров, а красная — для терров.
bot_traceview значение Используется для внутренней отладки навигации ботов.
bot_debug значение Используется для внутренней отладки поведения ботов.


Разное

bot_about Показывает номер версии ботов и информацию об авторе.
bot_goto_mark Заставляет 1 бота идти к центру текущей помеченной области. Это полезно при тестировании «проходимости» некоторых мест. 




Клиент-Сервер

Команды с префиксом 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 "загружает" и сам процессор сервера. (Кстати такое "увеличение" каким-то образом загружает процессор по максимуму на таких картах как 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% в каждую секунду времени, так как вы получаете ограниченное количество обновлений в секунду с сервера. Когда увеличивается количество обновлений, интерполированная фигура становится более аккуратной. В 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: ставим в 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. 

Игра по модему, пинг и как его понизить.

Здравствуйте, счастливые обладатели модемов. Эта статья написана специально для Вас и речь в ней идет о такой замечательной и всеми любимой вещи как пинг. Вообще, мастерство игрока не самое важное при игре в КС. Тем более, если он играет по модему. На "качество" модемной игры влияют следующие (основные) факторы:
1. Пинг (ping)
2. Скорость соединения
3. Индивидуальное мастерство игрока
4. Мощность "тачки"
5. Качество привода ("мышь", и пр. манипуляторы)
6. и другие...
От автора: Хотя предыдущий список может сильно изменяться, но на данный момент пинг для меня - единственный камень преткновения. Мастерство накапливается с годами, а пинг с годами может не меняться вообще.
Пинг на случайно занимает первое место, поскольку именно при большом пинге игра невозможна вообще. Для играющего по модему пинг он как святой... на него молятся, ставят свечи, пытаются понизить любыми способами. Но эти способы не всегда работают (непонятно почему).
На самом же деле пинг - время между отправкой пакета и приемом ответного (если такой есть:) И даже козе понятно: чем ниже - тем лучше! Но на деле не все так просто. Пинг по своей природе делится на нормальный и анормальный. Рассмотрим каждый из них подробно.

НОРМАЛЬНЫЙ ПИНГ

Нормальный пинг - по-простому, это задержка сигнала на всех участках линии, при его "путешествии" от пользователя до сервера плюс то же самое, но назад. Что может быть проще? Но, есть одно "но" - это при отправке одного пакета. А когда их посылается несколько и подряд (т.е. ответ на первый ещё не пришел, а второй уже послан и так со следующим и т.д.), то пинг увеличивается на 40-60% (а иногда и на 100%) от начального. В итоге: минимальный пинг 150 мс, максимальный 250 мс. Вот, именно, максимальный и будет в игре (или даже больше). Конечно, тут большую роль играет качество телефонной линии.

АНОРМАЛЬНЫЙ ПИНГ

Этот пинг - результат несоответствия физических возможностей линии и сетевых настроек игры. Рассмотрим ситуацию: коннект 28.8 кбод, игрок выбегает на толпу противников, его "мясят" и в итоге - фраг с пингом 4096 висит в воздухе или танцует брейк-данс. Тут имеет место всеми любимого FlushEntityPacket - (переполнение) пакеты не могут дойти до пользователя в указанный срок и в нужном порядке. Надо либо увеличить пропускную способность линии, либо уменьшить число пакетов (согласований). Тут гадать нечего: будем уменьшать количество пакетов (т.к. иногда больше 33,6 из модема выжать просто невозможно).


КОМАНДЫ И РЕЗУЛЬТАТ

Собственно, для оптимизации процесса согласования под конкретную машину и конкретное модемное соединение, нужно знать основные команды для оптимизации сетевой игры. Эти команды помогут всегда (или почти :). Но для конкретной ситуации - конкретная конфигурация.
cl_updaterate ## - количество пакетов (согласований), посланых от сервера - клиенту за еденицу времени (секунду). Эта команда напрямую связана со скоростью соединения и имея 28.8 кбод нет смысла ставить значение больше 15 (лучше 10). Потому что поделить 2.5 кб/сек на 15 и получим небольшой размер "пакета" данных на одно согласование (маловато будет). Так что для 28.8 ставьте cl_updaterate "10" и не больше.
При соединении 28.8 Кб, cl_updaterate (1/сек) от 10* до 15
При соединении 33.6 Кб, cl_updaterate (1/сек) от 15* до 20
При соединении 48.8 Кб и более, cl_updaterate (1/сек) от 20* и более


* - Оптимальное значение

cl_cmdrate ## - количество согласований в секунду, посланных от клиента - серверу. Тут дело такое: если Ты хочешь общаться по микрофону и хочешь, чтобы другие игроки слышали твой голос, а не "дизельный выхлоп" или хуже, то ставь значение 30. Но как известно единовременно исходящий и входящий потоки они:как два медведя в одной берлоге, взаимоуменьшают друг друга. Так что если общаться голосом не предвидится, то ставь от 10 до 20. В принципе для 28.8 cl_updaterate "10" и cl_cmdrate "30" вполне приемлемо. На каждые три согласования со стороны клиента - одно со стороны сервера. Сойдет!
rate #### - Поток (в байтах) со стороны сервера. Вообще эта величина должна быть ниже скорости модемного соединения примерно на 20-30% (потому что исходящий поток тоже существует и, заняв все 100% пропускной способности линии, Вы себя обречете).
При соединении 28.8 Кб, rate (бит/сек) от 2000 до 2500
При соединении 28.8 Кб, rate (бит/сек) от 2000 до 2500
При соединении 33.6 Кб, rate (бит/сек) от 2500 до 3000
При соединении 48.8 Кб и более, rate (бит/сек) от 3000 и выше

Если задать значение больше допустимого - лови FlushEntityPacket, сервер закидает тебя "пакетами" по твоему же требованию в удобный для него момент. Учтите, что для большого числа игроков (16-20) скорость соединения играет большую роль. Не рекомендуется ставить максимальное значение, если пакеты часто не доходят: на их "перепосылку" надо иметь "резерв".
cl_latency -### - Компенсация лагов. Величина, необходимая для хоть какого-то скрашивания серых будней "модемного" игрока. Задаётся как 50% или 75% от текущего пинга с противоположным знаком (100% имеет эффект, но не стОит столько задавать). Например для пинга 200 подойдет cl_latency "-150". Эта величина ОЧЕНЬ важна. Но в КС1.6 она не используется.
cl_rate #### - Тоже, что и rate, но со стороны клиента. Величина не столь важная, т.к. клиент никогда не сможет использовать её на 100% (только когда происходит закачка "лого" на сервер). По умолчанию стоит cl_rate "9999", так и оставим.
fps_max ### - Как уже видно из названия - максимальный FPS в игре. Обычно ставят 100. Это зависит от "мощности" машины. В принципе от 60 до 100 - вполне приемлемое качество. НО, без следующей переменной вы не увидите эти FPS вообще.
fps_modem ### - А вот это то, что надо. Приравниваем fps_modem к fps_max и всё. Ходит мнение, что fps_modem должна ровняться cl_updaterate. Представляете "дурдом" в 20 FPS? Я из принципа fps_max "100" и fps_modem "100" поставлю. К тому же без высокого значения fps_modem нельзя проделать кое-какие "грязные" трюки. Но у этих переменных есть и МИНУСЫ. "Лагает" сильнее, т.е. чаще при высоком fps_modem, чем при низком. Так что ставьте от 60 до 100.

В принципе - это всё, что нужно для оптимизации игры по модему. Добавлю, что при сетевой игре происходит непрерывное согласование сервера и клиента. Их пакеты взаимосвязаны и если пакеты сервера не дошли до клиента, то и пакеты клиента не будут восприниматься сервером немедленно, а встанут в очередь. Ведь пропустить ничего нельзя.
Напоследок приведу стандартный "конфиг" для скорости соединения 33.6 кбит/сек.

cl_updaterate "15"
cl_cmdrate "30"
rate "2500"
fps_max "60"
fps_modem "60"

А в autoexec.cfg неплохо бы добавить:
//При latency или пинге в 200мс
cl_latency "-150"
//Использование MMX. Не известно правда, что дает :)
r_mmx "1"
//Для того, чтобы голос свой слышать наряду с другими игроками.
voice_loopback "1" 


Основные сетевые команды

Вступление

Несмотря на растущую популярность создания собственных конфигов и настроек для Half-Life, многие игроки имеют лишь приблизительное представление о реальном значении некоторых команд, отвечающих за сетевые настройки.
Целью данной статьи является детальное разъяснение эффекта основных сетевых команд как для Half-Life 1.5 таки для грядущего 1.6 релиза.

"Удушье"

Эффект "удушья" (лаг со стороны клиента) возникает в случае, если пропускная способность соединения не справляется с объемом поступающего трафика. Сейчас мы попробуем разобраться почему это происходит.
Время посылки слудеющего пакеты вычисляется так:
Текущее время + 1/cl_updaterate
Текущее время + (Количество посланных байтов/значение rate)
Соответственно, если у вас выставленно высокое значение cl_updaterate, а пропускная способность соединения недостаточна вы начнете испытывать лаг. Также, большое количество игроков означает увеличение потока данных, а значит увеличение задержек из-за низкой пропускной способности. Тот же эффект наблюдается при низком значении rate. При возникновении эффекта "удушья" сервер пытается справиться с ним посылая пакеты подряд, не дожидаясь следующего времени посылки, установленного в 1/cl_updaterate, пока лаг не будет устранен.

Интерполяция

Движок Half-Life использует интерполяцию для хранения истории игровых позиций и времени, когда игрок точно находился в этих позициях. После этого используется ex_correct для поиска в истории двух лучших позиций (заметьте, абсолютно не обязательно двух последних). Соответственно игрок всегда двигается с постоянной скоростью (реальная скорость передвижения игрока между позициями на сервере) меж этих двух позиций, не знависимо от значения ex_interp (до тех пор пока ex_interp выставлен равным 1/cl_updaterate или выше).
Единственный случай, когда игрок реально может двигаться быстрее, это после огромной потери пакетов или после сильной задержки из-за высокого пинга так, как он отстает от игрового мира и скорость увеличивается, чтобы исправить его реальную позицию.

Команды

cl_updaterate/cl_cmdrate:
Причина относительно низких значений по умолчанию состоит в том, что игра разработана для поддержки игроков с любыми типами соединений и обеспечения им нормальной игры через интернет. Еще одна причина - HLDS должен работать практически на любом компьютере и не создавать сильной нагрузки на процессор.
Команды cl_updaterate и cl_cmdrate контролируют трафик сервер-клиент и клиент-сервер. Чем выше значения, тем чаще посылаются пакеты, а значит, тем больше трафик. Однако, выставление низких значений не приведет к искажению реальной картины (это происходит только при большой потере пакетов), так как движку Half-Life не требуется полное соответствие работы клиента и сервера.
А вот выставление слишком высоких значений cl_updaterate и cl_cmdrates ведет к ряду неприятных последствий:
Как сказано выше, если соединение не успевает обработать весь трафик, возникает лаг. Сервер испытывает значительно большую нагрузку, т.к. происходит более частая посылка значительно меньших изменений, подсчет которых вызывает сильную нагрузку на процессор и приводит к лагу со стороны сервера.
Выбор значений индивидуален для каждого и должен основываться на типе и качестве соединения. Высокие значения годятся только для локальных сетей, но не для Интернета
ex_interp
Команда, вокруг которой всегда ходит множество слухов, опасений и мифов. В Half-Life 1.5 лучшим значением ex_interp является установленное по умолчанию - 0.1. Дело в том, что существует небольшой баг (и на сервере и на клиенте), влияющий на то, как interp раскладывается на клиенте и пересылается на сервер (и, соответственно, как он потом включается в лагокомпенсацию на сервере). В результате различных жутких мифов многие думают что 0.1 - единственное допустимое значение, что сослужило хорошую службу в минимизации эффекта бага. ex_interp равное 0.1 - не закон, просто с ним все работает нормально :). Не меняйте без особых на то причин, в противном случае можете возникнуть резкое снижение точности стрельбы примерно на половину хитбокса или более.
Как многие из вас вероятно уже знают, сетевой код Half-Life притерпит ряд изменений в версии 1.6. Алгоритм вычисления лагокомпенсации для клиента и сервера будет модифицировн.В частности ex_interp можно (и нужно) будет выставлять в 1/cl_updaterate (0.01 при cl_updaterate равном 100). Новая формула равно 1/cl_updaterate потому, что при условии отсутствия эффекта "удушья" и потери пакетов игроки и объекты будут двигаться непрерывно и получать следующее обновление от сервера сразу по завершении интерполяции. Заметим, что для получения полного эффекта от ex_interp равного 0.01 сервер должен быть способен посылать 100 пакетов в секунду каждому клиенту, а подавляющее большинство серверов этого просто не могут.
sv_lan
После того, как CPL (и другие чемпионаты) изменили значения cl_updaterate и cl_cmdrate со стандартных на более высокие можно заметить возросшие лаги в LAN соревнованиях. Это происходит потому, что HLDS выставляет rate в 10000 на всех клиентах при sv_lan равному 1. Изначально, это было сделано не для ограничения значения rate 10000, а для поднятия значения по умолчнию на клиенте с 2500 до 10000 и достижения более комфортной игры в локальной сети. В новой версии Half-Life это будет исправлено. Однако движок Half-Life ограничивает максимальное значение rate 20000, или все что выше игнорируется.
ex_extrapmax 1.2
Экстраполяция происходит в случаях, когда у клиента нет конечной позиции для интерполяции. В этом случае экстраполируется предсказанная позиция на которую и передвигается клиент. Extrapmax устанавливает максимальное время экстраполяции для игрока (насколько далеко мы будем предсказывать позицию). Если позиция выходит за пределы выставленного значения игрок прекращает движение. Сервер всегда учитывает только значение по умолчанию, так что изменение этого значения ничего не даст.
ex_correct 0
Еще один способ интерполяции и предсказания для клиента. Сервер всегда осовывается на значении 0. Эта команда будет удалена из следующей версии Half-Life.
ex_maxerrordistance 64
В сочетании с ex_correct равным 1 вы можете выставить максимальный радиус, в котором игрок будет плавно двигаться от позиции x к позиции y. Если игрок покидает этот радиус он будет мгновенно телепортирован в конечную позицию. Но так, как сервер учитывает только ex_correct равным 0 толку от этого не много. Эта команда также исчезнет в следующей версии Half-Life.
sys_ticrate
Эта команда ограничивает максимальную скорость посылки пакетов клиентам. Чем выше значение, тем больше пакетов может быть послано.
sv_maxupdaterate
Ограничивает частоту обновлений сервера. Чем выше значение, тем больше пакетов будет послано клиентам (если скорость посылки позволяет).

Заключение

Как сказано ранее, наиболее важными факторами для выбора значений являются личные предпочтения и какую нагрузку могут выдержать ваше соединение и компьютер. Движок Half-Life дает возможность нормально взаимодействовать даже при низких значениях. В хорошем окружении (читай: в локальной сети) и клиент и сервер могут выдержать даже большие значения игра будет еще более комфортной. 


Руководство по оптимизации сетевого кода

Уфф... Долго я это откладывал... Около 4000 слов - и готово (хотя меня несколько загрузила вся писанина, так что вам придется обойтись без раздела разрешения вопросов).
Это мое долгожданное руководство по сетевому коду для Half-Life вообще и для Fireamrs в частности. Оно не разрабатывалось специально для single connection; я также не даю каких-то конкретных значений, поскольку оптимальные величины зависят от конкретных параметров вашей системы и соединения. Тем не менее, я часто буду заострять внимание на модемах и на широкополосном соединении. Пользователи ISDN могут рассматривать себя как нечто среднее между ними. Также я привожу раздел твиков для админов серверов. А, и еще, я не расскажу, как получить fake lag (хотя это просто).
Остальные, кто имеет кэшированный LAN, попали. Смиритесь, вам ничего не остается делать, поступайте как если бы у вас был ISDN.
Помните, что Half-Life - это сингл, и разрабатывался соответствующим образом. Все, что кажется корявым для мультиплея, скорее всего, таковым и является, но только потому, что это хорошо для сингла. Так что, пожалуйста, не надо комментариев вроде "они вообще не должны были так делать".
У многих появится желание пропустить несколько следующих абзацев, в которых поясняется, как работает игра, и перейти непосредственно к последующему рассмотрению cvar'ов. Тем не менее, прочитав описание игры, вы сможете лучше понять, что именно вы делаете, и найти лучше значения. И вам придется рассматривать cvar'ы в приведенном порядке, поскольку большинство твиков не помогут без выполненных предыдущих.
В сингле программе нет необходимости обрабатывать то, что происходит между кадрами, поскольку игрок взаимодействует только с тем, что он может видеть и слышать. Half-Life, таким образом, работает с игровыми кадрами. В сингле это то же самое, что и графические кадры (как fps - frames per second). Пока видеокарта прорисовывает следующий кадр, процессор просчитывает просиходящее в игре (повреждения, перемещения, ИИ и т. д.), и следующий кадр не начинается до тех пор, пока обе задачи не завершаются.
В мультиплее это работает слегка по-другому, в зависимости от того, какой сервер используется: listen-сервер или dedicated-сервер (выделенный сервер можно отличить по небольшой серверной иконке рядом с соответствующей строчкой в окне серверного броузера). Для listen-сервера сетевые кадры (по которым крутится сетевая игра) те же, что и игровые кадры хоста, т. е. те же, что и графические. Для выделенного сервера (а все хорошие серверы - это именно выделенные серверы) задача прорисовки до невероятного проста - выделенный сервер просто отображает консоль, которую можно прорисовывать очень быстро в силу того, что не требуется производить никаких 3D-вычислений. Следовательно, серверная кадровая частота будет зависеть только от того, как быстро он может обрабатывать игровую информацию (просчитывать перемещения и т. д.). Обычно выделенные серверы работают на 80 fps и выше, а во время затишья между сражениями частенько превышают HL-предел в 100 fps. Они работают на 100 fps все время, когда нет необходимости обрабатывать клиентские запросы. Попробуйте запустить свой сервер, и вы увидите, что как только к вам законнектятся несколько человек, частота кадров сразу значительно упадет.
В текущей версии Half-Life, как утверждает Valve, сетевой и графический фреймрейты полностью разделены, позволяя модемщикам играть на 100 fps без ухудшения производительности сети. В каком-то смысле это верно, поскольку графическая частота кадров намного выше (по крайней мере, в 3 раза) сетевой. Тем не менее, сетевой кадр по-прежнему не может быть начат до тех пор, пока не закончен соответствующий игровой кадр. Это означает, что графическая частота кадров, близкая к сетевой, может дистабилизировать последнюю.
В силу особенностей работы интернета и Half-Life, сетевые проблемы, такие как высокое время запаздывания (high latency) и потеря пакетов (packet loss), минимизируются за счет наличия регулярного потока обновлений. Это достигается благодаря синхронизации с кадровой частотой сервера, установки виртуальных цепочек на PoP и модемных временных алгоритмах переключения. Таким образом, иррегулярные сетевые кадры приводят к вещам, которые мы все ненавидим, - явлениям, объединенным общим названием "лаг"
Думается, мне лучше сначала пояснить, с чем нам придется иметь дело, прежде чем начать рассказывать, как это минимизировать.
Ping - [Packet Information Groper (сначала придумали сокращение, а уж затем - собственно термин).] Это интервал времени (в миллисекундах или в тысячных долях секунды) между посылкой пакета на сервер вашим компьютером и получением ответа ("pong"). Этот параметр наиболее зависим от вашего типа соединения, большинству модемов требуется около 150 мс просто чтобы достучаться до ISP, так что пинг редко бывает ниже 200. Пользователи ADSL, как правило, имеют пинг около 10 мс до провайдера, так что для них преградой является фундаментальные скоростные ограничения их части интернета; это игроки, на коннект которых больше всего влияет расположение сервера (если разница между 30 мс и 80 мс для вас является существенной).
Packet Loss - Это, пожалуй, самый важный и требующий оптимизации параметр, которым часто жертвуют в пользу пинга. Пакет считается потерянным, если на каком-то отрезке пути он был отброшен - или потому, что устарел (наиболее распространенный случай) или потому, что ограниченная пропускная способность не позволила ему пройти. Эти надоедливые Connection Problems? Они появляются, когда потеря пакетов достигает 100% (т. е. ничего не проходит) в течение нескольких секунд единовременно или даже постоянно (из-за чего вы спустя некоторое время уходите с сервера, если не знаете, как справится с этими ужасными проблемами).
Choke - Это среднее время (в миллисекундах) между моментом генерации пакета на вашей машине и моментом отсылки его на сервер. Одной из главных задач оптимизации является получение значения choke, равного 0, или, по крайней мере, близкого к нулю настолько, насколько это возможно.
"Broadband Slowdown" - Клиенты с высоким пингом НЕ являются причиной лагов! Я не знаю, из чего вырос этот глупый миф, но это - абсурд. На самом деле, как вы уже наверное догадались, замедляют сервер широкополосные соединения (broadband connections). Выделенщики (broadbanders) запрашивают большое количество обновлений в секунду с высокой точностью (accuracy - packet size - размер пакета), при этом сами посылают большое количество обновлений, опять-таки с большим размером пакетов. Все, что используется широкополосным соединением (полоса пропускания сервера, используемая одним широкополосным соединением, может "прокормить" от 5 до 10 модемщиков), и все посылаемые пакеты съедают существенную часть ресурсов процессора и памяти сервера. Самое нечестное в этой ситуации то, что модемщики, в большей степени страдающе от падения производительности, еще и становятся козлами отпущения за грехи выделенщиков. Может быть, этот миф появился оттого, что при медленном сервере у модемщиков большой пинг, и выделенщики просто заключают, что это причина замедления, а не его последствие. Кикать модемщиков с сервера при его замедлении не только не честно, но и бесполезно, поскольку никаких заметных изменений это не даст.
Также ошибочно считать, что приведенные характеристики зависят от сетевого кода, используемого конкретным модом. Например, CS и (в меньшей степени) DoD сделаны так, чтобы уменьшить пинг клиентов настолько, насколько это возможно, даже не задумываясь о потере пакетов или choke. Это хорошо и замечательно для широкополосной передачи и хороших видеокарт, но на людей с нестандартными видеокартами и модемами разработчики откровенно клали с двумя проборами. К счастью, Fireamrs обеспечивает хорошее сочетание двух типов соединения, обеспечивая, например, регулируемую клиентом точность, что позволяет существенно снизить трафик и облегчает жизнь людям на коннекте с ограниченной пропускной способностью (т. е. модемщикам).
Как найти подходящие для вас значения? Half-Life имеет замечательную небольшую утилиту под названием netgraph. Чтобы включить ее, наберите в консоли net_graph 1. Можно использовать значения от 1 до 5, каждое из которых показывает несколько различные вещи, 0 отключает netgraph. Лично я использую 3, но никто не запрещает вам выбрать вид на свой вкус. Netgraph может вызвать понижение fps, но я считаю его несущественным. Большое падение должны заметить только те, у кого графический fps значительно выше сетевого. В этом случае netgraph можно или уменьшить в размере или вообще выключить после того, как вы оптимизируете свой сетевой код. Ниже приводится описание информации, выводимой net_graph 1:

1. Счетчик FPS (FPS counter) - ваше текущее значение fps.
2. Сетевое время запаздывания (network latency) - это ваше текущее значение времени запаздывания (пинг).
3. Ширина входящей полосы пропускания.
4. Ширина исходящей полосы пропускания.
5. График, показывающий изменение пинга. Чем выше пинг, тем тоньше становится график. Также отображает патерю пакетов (красным) и рассогласованные объекты (mismatched entities; синим).
6. Текущая частота обновления сервера (входящая частота).
7. Текущая частота обновления клиента (исходящая частота).
CVar - это клиентская переменная (client variable) или серверная переменная (server variable), величина, управляющая некоторыми операциями движка, которая может быть изменена клиентом (или администратором сервера). Например, con_color может быть использована для ввода RGB-значения цвета текста в консоли. Я рассмотрю нужные cvar'ы, объясню, как их нужно использовать, и дам рекомендации по подбору оптимальны значений. Я неизбежно пропущу некоторые из них (их сотни, хотя большинство на самом деле не влияют на сетевую производительность). Далее буквой x будет обозначаться числа; вводятся переменные в консоли (хотя также они могут быть введены из командой строки).

Netgraph CVars

net_graph x - как отмечено выше, управляет отображением netgraph. 0 - выключает, 1-5 отображает выводимую информацию в различных комбинациях. По умолчанию 0. Я предпочитаю 3.
net_graphpos x - определяет позицию netgraph на экране. 1 - внизу справа, 2 - внизу по центру, 3 - внизу слева. По умолчанию 1, что меня вполне устраивает, хотя некоторые ставят 2.
net_graphwidth x - ширина графика в пикселях. Один пиксель на графике соответствует одному отправленному пакету. По умолчанию 192. Не забывайте оставлять значение достаточным для сохранения читабельности текста.
net_graphheight x - высота графика в пикселях. По умолчанию 64. Опять-таки, не забывайте о читабельности текста.
Вам интересно, почему пинг на netgraph'e как правило меньше пинга на scoreboard'e? Хм, пинг, показываемый netgraph'ом - это чистый сетевой пинг. Пинг на scoreboard'e - это, скорее, отображение временных показателей в их действии против игрока, поскольку он включает время, необходимое для прорисовки и отображения пакета на клиентском компьютере. Каждый показатель является по-своему полезным.

CVar'ы, связанные с FPS

fps_max x - устанавливает максимальный графический fps. Любое значение в промежутке от 1 до 100 является допустимым, значение по умолчанию 72. Half-Life попытается равномерно разделить каждую секунду на соответствующее количество "кусочков". Если прорисовка происходит быстрее, чем такой отрезок времени, то программа начинает рисовать следующий, никогда не уходя при этом дальше, чем на 1 кадр вперед; это делается для рационального использования памяти и поддержания заданной частоты. Если же прорисовка очередного кадра не укладывается в соответствующий интервал, то она продолжается в следующем. Никто не верит мне, но это самая важная переменная для оптимизации сетевого кода. Поскольку все в Half-Life завязано на кадрах, а они, в свою очередь, зависят от графических кадров, то это чрезвычайно важно. Самый распространенный совет - ставить значение 100 (максимальное), так, чтобы прорисовывалось как можно больше кадров в том смысле, чтобы проходило наименьшее время между между получением пакета и его прорисовкой. Это абсолютно и полностью неверно. Как отмечалось ранее, сетевой код работает совершенно определенным образом, и самое главное здесь - регулярность, постоянство. Лучше иметь стабильные 20 fps, чем прыгающие между 20 и 30. На практике часто оказывается, что выставление более низкого значения fps_max повышает среднюю частоту кадров, поскольку их прорисовка четко укладывается во временные "кусочки", что ликвидирует неизбежные потери времени, когда кадру для прорисовки требуется больше одного временного интервала. Значение, близкое к правильному, но все же не совсем правильное, хуже резко отличного, поскольку каждый интервал больше, и потеря половины интервала вреднее. Вам следует значительно снизить эту величину, пока вы не найдете точку, в которой ваш fps будет практически постоянным (и близким к выставленному пределу). Разумеется, могут быть карты или большие перестрелки, где fps может падать, но он должен быть постоянным при нормальной игре. При приближении к нужному значению все может выглядеть очень плохо, но когда вы найдете его, результат окажется гораздо лучше, чем вы могли подумать, поскольку кадрирование будет постоянным, и мозгу легче будет интерполировать движущееся изображение. Именно поэтому изображение в телевизоре смотрится лучше, чем игра на 24 fps, поскольку телевизор всегда держит одну частоту. Корректный подбор этой величины может сразу снизить пинг, потерю пакетов и choke. Все еще не верите? Тогда можете прекратить читать это руководство, все, что написано дальше, бесполезно, если вы не выполнили этот шаг. Если полученный результат слишком низний (меньше 20 fps), попробуйте снизить детализацию для повышения скорости рендерринга, для чего приводятся некоторые твики в конце данного руководства (На самом деле их там нет, я их так и не написал). Также бесполезно ставить значение fps_max больше поддерживаемого вашим монитором (60 Hz и 75 Hz - нормально), если только вы не запускаете сервер, поскольку лишние кадры просто не будут отображаться.
fps_modem x - пусть вас не вводит в заблуждение название, эта переменная одинаково применима ко всем типам соединения. Устанавливает максимальное количество графических кадров в секунду для игры по интернету. Используется это значение или fps_max - какое меньше. Допустимо любое число от 1 до 100, по умолчанию 100. Это может как-то пригодится только тем, кто играет и по LAN'у и по интернету - на LAN'е будет использоваться fps_max, а в интернете - fps_modem. Если не считаете, что fps влияет на производительность сети, то как тогда вы можете объяснить использование разных cvar'ов в зависимости от типа соединения? Готов поспорить, что кто-то все еще не верит мне... Возможно будет полезно снизить уровень детализации и получить высокий fps на LAN'е, чтобы воспользоваться преимуществами дополнительной пропускной способности.
fps_lan x - устанавливает максимальный графический fps для игры по LAN'у. Используется это значение или fps_max - какое ниже. Допустимо любое число от 1 до 100, по умолчанию 100. Бесполезен практически для любого HL mod'a, поскольку играет роль только если mod играется и в сингле (где используется fps_max), и по LAN'у (fps_lan) и по интернету (fps_modem). Я таких модов не знаю. Единственная ситуация, которая пришла мне в голову - это если одна и та же машина используется иногда как выделенный сервер, а остальное время - на LAN'е и интернете. В этом случае fps_lan и fps_modem должны иметь нужные значения, а fps_max выставлен в 100, чтобы выделенный сервер работал настолько быстро, насколько это возможно. Что опять-таки неправдоподобно.

Дурные лагоубийственные CVar'ы

Я написал "дурные", потому что не понимаю, зачем людям может понадобится менять их; но когда лагокомпенсатор только появился, все выделенщики хотели знать их, так что...
cl_lc x - 1 или 0, по умолчанию 1. 1 означает использование Half-Life'ом лагокомпенсатора (если мод и сервер его поддерживают), 0 выключает его. Компенсация лагов - это система, с помощью которой вы попадаете в то, что вы целились, когда стреляли, вместо того, чтобы стрелять на опережение цели. Зачем вам может понадобиться отключить его - выше моего понимая, разве что у вас пинг меньше 10. Может быть на быстром LAN'e, где это могло бы ограничить пропускную способность, но поскольку LAN'ы имеют тонны нерастраченной пропускной способности, в этом нет действительной необходимости. Пусть работает.
cl_lw x - 1 или 0, по умолчанию 1. 1 означает, что точность стрельбы и отдачу Half-Life оставит для обработки клиенту. Если отключить, то при нажатии fire вы увидите стрельбу оружия после паузы, равной вашему пингу, потому что придется ждать ответа сервера о том, какая была отдача, и куда полетели пули. Это может иметь некоторый смысл в модах, где стрельба просчитывается на сервере (CS как самый очевидный и жуткий пример), но, например, в Firearms, который в любом случае использует клиентские подсчеты, а сервер подравнивает то, что говорят клиенты, в этом нет смысла, и это делает игру сложнее из-за необходимости учитывать отдачу. Нет разницы в используемой пропускной способности: 1 посылает информацию на сервер, 0 посылает те же данные в другом направлении.
cl_lb x - 1 или 0, по умолчанию 1 (раньше по дефолту стоял 0, что отражено в некоторых руководствах). При 1 игра будет помещать спрайты крови, если ваш клиент считает, что вы попали в цель, при 0 она еще подождет подтверждения от сервера. Это может показаться странным, и служит только для индикации попадания с высококорявых оружий в модах вроде CS, где оружие просчитывается сервером. Бесполезно в Firearms. Оставьте включенным.

Собственно CVar'ы сетевого кода

Эти cvar'ы непосредственно влияют на сетевые пакеты и могут, таким образом, существенно изменить работу сети. Неправильная их установка делает игру неиграбельной или даже приводит к постоянным проблемам соединения при заходе на сервер. Не забудьте сохранить предыдующие значения, прежде чем что-то менять (для этого введите в консоли cvar без числа после него. Half-Life выведет текущее значение).
cl_updaterate x - Любое целое значение от 1 до 200. По умолчанию 20. Это количество обновлений, которое клиент хотел бы получать от сервера в секунду. Клиент сам не отправляет такое количество запросов, просто когда вы присоединяетесь к серверу (или изменяете значение), он шлет серверу пакет с просьбой "Прошу посылать мне столько-то обновлений в секунду". Сервер будет честно стараться посылать столько, сколько запрошено. Лучшее значение равняется fps_max; не превышайте 30 обновлений в секунду (даже 25 не очень хорошо). Если ваше значение fps_max выше, то подберите в качестве cl_updaterate множитель значения fps_max. Например, если fps_max равняется 42, то используйте cl_updaterate, равный 21. Игра начинает дергаться около 13, так что не бойтесь пробовать значения вплоть до 15. Такие значения дают себя знать только когда в игре объекты перемещаются очень быстро, вроде гранат из m79, gp25 или m203. Так как вам просто сообщается то, что уже произошло на сервере, нет необходимости выставлять высокие значения; они только добавят ненужную нагрузку на сервер, вызывая broadband slowdown (см. выше). Ах, да, для LAN'a ставьте 50.
cl_cmdrate x - Любое целое значение от 1 до 100. По умолчанию 30. Величина, противоположная cl_updaterate, - устанавливает число исходящих пакетов в секунду. Нет никакой причины ставить значение выше fps_max, потому что в этом случае будет происходить отсылка одних и тех данных дважды в течение некоторых кадров. Так как исходящая полоса пропускания меняется меньше, чем входящая, в общем случае верхней границей значений является 40 (30 для модемов). Установите его равным fps_max или делителю fps_max (например, половине), если ваш fps_max выше указанных пределов.
cl_rate x или просто rate x - Любое целое от 0 до 9999. Значение по умолчанию определяется выбранным при установке типом соединения. Это объем данных, разрешенных к пересылке каждую секунду в байтах (и входящих, и исходящих). Чем выше значение, тем больше данных пересылается каждую секунду, и тем лучше клиент может отслеживать происходящее на сервере. В то же время, требуется большая полоса пропускания, как на сервере, так и на клиенте. Как клиент, вы захотите установить эту величину настолько большой, насколько это возможно, для оптимальной плавности. Слишком большое значение приведет к потере пакетов, так как просто физически окажется невозможным посылать некоторые пакеты. Начните со значений, несколько больших, чем приведенные ниже, и постепенно сбрасывайте их до тех пор, пока потеря пакетов не прекратится (или станет минимальной, ведь она зависит еще и от сервера). При изменении настроек следует понимать, что это создает разницу в надежности соединения, так что следует потестировать каждое значение 5-10 минут, прежде чем принимать решение.
Здесь приводятся приблизительные величины, для вашего конкретного соединения они могут быть совершенно другими.
56k модем или 64k ISDN – 2500-3000
128k ISDN – 4000-5000
кабельный модем – 6000-8000
xDSL или T1 – 7000-10000
LAN – 10000
cl_resend x - Любое целое значение от 0 до 16. По умолчанию 6. Устанавливает максимальное число попыток переслать потерянные пакеты. Если вы выполнили предыдущие твики, вы должны получить много пп, установка cl_resend в 1 снизит пп, не влияя на производительность и flush слишком сильно.
cl_timeout x - Любое целое значение от 0 до 1000. По умолчанию 30. Устанавливает время (в секундах), после которого соединение считается потерянным, если не было получено никаких пакетов. Часто эта ситуация восстановима, особенно когда вы видите "живые" значения in и out. У меня поставлено 90.

Загрузочные CVar'ы

cl_allowupload x - 0 или 1, по умолчанию 1. При 1 разрешена закачка на сервер своих лого. Так как вряд ли это может вызвать лаги (если только первые 20-30 секунд), и позволяет другим игрокам видеть ваше лого, лучше оставить включенным.
cl_allowdownload x - 0 или 1, по умолчанию 1. При 1 HL может по необходимости загружать звуки или карты с сервера. Для звуков лучше оставить, а вот карты так загружать нельзя НИ В КОЕМ СЛУЧАЕ! Во-первых, карты закачиваются в неупакованном виде, во-вторых, HL-соединение медленнее ftp, так что вы потеряете времени больше, чем необходимо для нормальной закачки карты. Загляните лучше в соответствующий раздел на сайте и возьмите нужную карту оттуда.
cl_download_ingame x - 0 или 1, по умолчанию 1. При 1 разрешена закачка на ваш компьютер лого других игроков во время игры. По выше описанным причинам лучше оставить включенным. Скачанные изображения хранятся в файле custom.hpk в папке соответствующего мода; я рекомендую удалять его периодически (каждые две недели - вполне нормально), поскольку он может достаточно сильно разростись, съедая много памяти и времени при запуске. Все равно HL при необходимости автоматически создаст новый файл.

Админам серверов

Это твики, которые админ сервера может использовать для оптимизации сетевой производительности на своем сервере. Я не уверен абсолютно в приведенном ниже материале, поскольку не имел возможности протестировать его на сервере.
sv_maxrate x - Любое целое число от 0 до 99999. По умолчанию 99999. Устанавливает максимальный rate для одного клиента. Значение надо подобрать так, чтобы умноженное на maxplayers, оно давало 2/3 вашей общей пропускной способности (1/3 - резерв для учета реалей канала, а также для закачки лого и т. п.). Я частенько вижу значения выше пропускной способности, что нельзя назвать умным, потому как rate у всех автоматически падает. Это не только загрязняет аккуратно настроенный сетевой код, но вызывает broadband slowdown (см. выше) и опять-таки портит жизнь модемщикам. На мой взгляд было бы правильным ставить на серверах 3000, чтобы у всех была одинаковая производительность, но я не думаю, что это когда-нибудь произойдет.
sv_minrate x - То же, что и sv_maxrate, только устанавливает минимальный rate вместо максимального. Представляется слегка бессмысленным, люди должны иметь возможность ставить свои rate такими маленькими, какими им хочется. Ставьте 0.
sv_dlmax x - Любое целое значение от 0 до 99999. По умолчанию 99999. Устанавливает максимальный объем закачки в сторону клиента в кб. УБЕДИТЕСЬ, ЧТО ЭТА ВЕЛИЧИНА ПРОСТАВЛЕНА ПРАВИЛЬНО! Лучшим с любой стороны является значение 500. Этого достаточно, чтобы клиент мог скачать любой звук, но недостаточно для закачки любой карты. Это значит, что клиенты не смогут закачивать карт с вашего сервера (что очень неэффективно и сильно лагует сервер, особенно если качают выделенщики).
Ну что ж, это все, на что я смог раскачаться. Возможно, я добавлю раздел устранения неполадок и пополню админскую часть. Извините, что это заняло так много времени, ребята.


Конфиг

Существует 2 файла где хранятся все ваши настройки: autoexec.cfg и config.cfg. Конфиг – это совокупность консольных команд используемых для настройки игры.
В нем вы можете менять громкость, яркость, раскладку клавы. Конфиг в игре есть с самого начала, сразу после установки, он всего один и лежит в каталоге "Drive:"Директория Half-Life"cstrike" под именем "config.cfg"(этот файл был упомянут выше). Ваш конфиг вы можете назвать как угодно, например "NIKNAME.CFG", где вместо NIKNAME можно указать ваш собственный ник. Чтобы запустить ваш конфиг, необходимо через консоль выполнить ключевую команду exec NIKNAME.CFG, где NIKNAME.CFG - имя вашего конфига. Если ваш конфиг лежит не в папке cstrike, вам предется указать путь к нему.
Для создания конфига используется две основные команды "bind" и "alias". Команда "bind" используется для привязки действия/нескольких действий к одной клавише.
bind "+mouse1" "+attack; say " Enemy down ""
В данной строке мы прикрепили к правой кнопке мыши два действия: стрельбу и сообщение о том, что мы покиляли врага.
Если мы хотим использовать несколько команд, мы должны разделять их ";".
Данная команда будет выполняться при нажатие кнопки, если же мы хотим, чтобы действие происходило после нажатия, мы должны преобразовать нашу команды в bind "-mouse1" "+attack; say " Enemy down ""
Команда "alias" используется для ввода и хранения определенной последовательности команд.
alias STR "-mouse1" "+attack; say " Enemy down ""
bind "-mouse1" "STR"
Команда выполняет те же действия, что и указанные выше.
В данном случае объем увеличился, но при написания более сложных скриптов без "alias" будет не обойтись.
zoom_sensitivity_ratio 0.700 - разная чувствительность мыши с/без приближения. В данном случае чувствительность мыши в режиме приближения составляет 0,7 от обычной.
scr_conspeed 9999 - скорость выпадания консоли (в данном случае безумно высокая)
sv_gravity 800 гравитация в игре. (в данном случае стандартная)

Покупка оружия

bind "f8" Para
alias Para "buy; menuselect 5; menuselect 1; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1; menuselect 0;"
bind "f7" awp
alias awp "buy; menuselect 4; menuselect 6; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1; menuselect 0;"
bind "f3" gren
alias gren "buy; menuselect 8; menuselect 4; menuselect 0;"
bind "f6" m4
alias m4 "buy; menuselect 4; menuselect 3; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1 exitmenu;"
bind "f4" vest
alias vest "buy; menuselect 8; menuselect 2;"
bind "f5" cammando
alias cammando "buy; menuselect 4; menuselect 2; buyammo1; buyammo1; buyammo1; buyammo1;"
bind "ins" p90
alias p90 "buy; menuselect 3; menuselect 3; buyammo1; buyammo1; buyammo1;"
bind "del" p228
alias p228 "buy; menuselect 1; menuselect 4; buyammo2; buyammo2; buyammo2; buyammo2; buyammo2; buyammo2;"

Быстрое переключение оружия

На "2" висят пистолеты
alias secondary "slot2; +attack; wait; wait; -attack"
bind 2 secondary

Закладка бомбы

Вот так быстро и без проблем можно установить бомбу, да еще так, чтобы все наши тиммэйты знали об этом.
//Planting
alias "+pb" " +duck ; wait ; wait ; wait ; weapon_c4 ; say_team Cover me! I am planting the bomb!!! ; wait ; wait ; wait ; wait ; +attack "
alias "-pb" " -duck ; -attack ; lastinv ; say_team Bomb has been planted !! "
bind " PGUP " "+pb"


Скрипты для начинающих

Давным давно, в далекой далекой id-software был сделан Quake, и дабы приятно было всяким геймерам, придумали аксакалы консоль, которая закрывает пол-экрана и мешает играть. И стало геймерам муторно, и сказали они: “забьем мы на вашу кваку, и останетесь вы в глубоком поппинсе”. И стало стыдно мудрецам, и добавили они в консоль буковки и циферки всякие и сказали геймерам: “Се - язык! Специально для кваки сделаный. Кто поймет язык этот великий, сможет управление свое менять не выходя из игры и фишки умные лепить, которые неизвестны доселе были геймерам, меняющим управление в глупом и непрогрессивном меню “Controls”. И возрадовались геймеры, и признали кваку игрой. Много килобайт утекло с тех пор. Появились у кваки дети, внуки и соседи по комнате, но до сих пор у всех них можно забить верхнюю половину экрана странными букивками и цифирками.
Итак, что же такое autoexec.cfg и config.cfg. Это те самые файлики, где хранятся ваши настройки. Конфиг, это место, где обитают бинды, а автоэкзек, жилище алиасов. Bind - это команда, приклеивающая к какой нибудь кнопке определенное действие, например bind “ctrl” “drop” приклеивает к кнопке CTRL функцию “выбросить оружие”.
Alias - родной брат макроса, то есть приклеивает к какой-нить команде ряд определенных действий, например alias awp "buy; menuselect 4; menuselect 6; buyammo1; menuselect 0;" создает команду awp, при исполнении которой открывается меню покупки, выбирается раздел 4 (винтовки), затем раздел 6 (сама АВП), покупается один комплект патронов и выходится из меню покупки. Теперь, введя в конфиге команду bind "f7" awp, вы получаете на клавише F7 полный цикл приобредения снайперки.
Есть еще в конфиге куча команд, отражающих разные игровые параметры, но это тема отдельного разговора. Приведу лишь пару примеров:
zoom_sensitivity_ratio "0.700" - разная чувствительность мыши с/без приближения. В данном случае чувствительность мыши в режиме приближения составляет 0,7 от обычной.
scr_conspeed 9999 - скорость выпадания консоли (в данном случае безумно высокая)
sv_gravity - 800 гравитация в игре. (в данном случае стандартная)
Что бы узнать значения той или иной переменной, надо просто вписать ее в консоли (т.е. просто sv_gravity выдаст вам значение этой переменной). Естественно, часть команд работают только на сервере (например та-же гравитация или всеми любимый kick).
При создании своих автоэкзека и конфига, важно знать, что-же с ними происходит. Когда вы подключаетесь к серваку, загружается сначала автоэкзек, а потом конфиг, который обнуляет все бинды командой Unbundall (в начале конфига), а потом переназначает управление. Таким образом, использование команды bind в autoexec.cfg чревато тем, что этот бинд не будет работать. Решить эту проблему можно несколькими путями:
1. Удалить нахрен unbindall в конфиге. На компах, которыми пользуются несколько чело не рекомендую, дабы не получилась петрушка.
2. Сразу после unbindall вписать exec autoexec.cfg, эта команда выполнит автоэкзек еще раз.
3. Не пользоватся биндами в автоэкзеке, возьмем к примеру алиас для включения/выключения радара:
autoexec.cfg
alias radaron "+showradar; bind KEY radaroff"
alias radaroff "-showradar; bind KEY radaron"
bind "KEY" "radaroff"
эта подпрограмма как раз работать и не будет, т.к. есть бинды. А вот эта программа
autoexec.cfg
alias radaron "+showradar; alias radar radaroff"
alias radaroff "-showradar; alias radar radaron"
radaron
config.cfg
bind "KEY" "radar"
будет, т.к. в автоэкзеке биндами и не пахнет. Кстати, дабы не возникла петрушка в конфигах, можно использовать «//». Это обыкновенный REM, так что строчку
// Клинтон дурак
ни автоэкзек ни конфиг читать не будут.
Если вы обратили внимание, то к некоторым командам вначале приставляется + и -. Это означает начало и конец определенного действия. Т.е. bind TAB +showscores позволяет при нажатии табуляции начлюдать результаты игры, пока кнопка нажата. При отпускании кнопки результаты исчезают. И, т.к. при создании алиасов вы заменяете одной клавишей кучу телодвижении, то помните, среди них (телодвижений) есть как нажатия на кнопки, так и «отжатия».
Далее: при жутком дефиците окружающих левую руку клавиш можно использовать так-называемые «метабинды»
alias F2slot "buymp5"
alias +hold "alias F2slot buytmp"
alias -hold "alias F2slot buymp5"
alias buymp5 "buy; menuselect 3; menuselect 1"
alias buytmp "buy; menuselect 3; menuselect 2"
bind "F2" "F2slot"
bind "SHIFT" "+hold"
То есть, при нажатии на F2 вы покупаете MP5, а при нажатии SHIFT+F2, вы покупаете ТМР.

Покупка оружия
bind "f8" Para
alias Para "buy; menuselect 5; menuselect 1; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1; menuselect 0;"
bind "f7" awp
alias awp "buy; menuselect 4; menuselect 6; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1; menuselect 0;"
bind "f3" gren
alias gren "buy; menuselect 8; menuselect 4; menuselect 0;"
bind "f6" m4
alias m4 "buy; menuselect 4; menuselect 3; buyammo1; buyammo1; buyammo1; buyammo1; buyammo1 exitmenu;"
bind "f4" vest
alias vest "buy; menuselect 8; menuselect 2;"
bind "f5" cammando
alias cammando "buy; menuselect 4; menuselect 2; buyammo1; buyammo1; buyammo1; buyammo1;"
bind "ins" p90
alias p90 "buy; menuselect 3; menuselect 3; buyammo1; buyammo1; buyammo1;"
bind "del" p228
alias p228 "buy; menuselect 1; menuselect 4; buyammo2; buyammo2; buyammo2; buyammo2; buyammo2; buyammo2;"

Быстрое переключение оружия
На "2" висят пистолеты
alias secondary "slot2; +attack; wait; wait; -attack"
bind 2 secondary

Пьяный ежик
bind "ALT" "+STARTRUN"
alias +STARTRUN "bind w DRUNKRUN"
alias -STARTRUN "bind w +forward"
alias DRUNKRUN "weapon_knife; wait; +attack; wait; -attack; fw; wait; lw; wait; fw; wait; rw; wait; jp; wait; dk; wait; lw; wait; bw; wait; rw; wait; fw; wait; jp; wait; fw; wait; lw; wait; dk; wait; fw; wait; jp; wait; rw; wait; fw"
alias fw "+forward; wait; wait; wait; -forward"
alias bw "+back; wait; -back"
alias lw "+moveleft; wait; wait; -moveleft"
alias rw "+moveright; wait; wait; -moveright"
alias jp "+jump; wait; -jump"
alias dk "+duck; wait; -duck"
bind "ALT" "+STARTRUN"
alias +STARTRUN "bind w +DRUNKRUN"

Подпрыгнул|присел
alias +jd "+jump;wait;+duck"
alias -jd "-jump;wait;-duck"

Полезные скрипты
Быстрый пистолет

// Quick Pistol from http://www.cszone.ru
alias qpist "slot2; +attack; wait; wait; -attack"
bind "?" "qpist"

Быстрый глушак

// Quick Silencer from http://www.cszone.ru
alias +quicksilencer "+attack2; wait; wait; wait"
alias -quicksilencer "-attack2; weapon_knife; wait; wait; lastinv"

bind "q" "+quicksilencer"

Двойное приближение

// Double Zoom from http://www.cszone.ru
alias zooms "+attack2; wait; wait; wait; -attack2"
alias +zoomd "zooms"
alias -zoomd "zooms"

bind "?" "+zoomd"

Быстрый нож

// Quick Knife from http://www.cszone.ru
alias qknif "weapon_knife"

bind "?" "qknif" 

"Мета" скрипты
Было ли когда-нибудь с вами такое, что вам не хватало клавиш на клавиатуре, потому что вы забиндили и всю покупку, и сообщения, и радиокоманды? А хотели ли вы забиндить на одну и ту же клавишу несколько разных команд? Если ваш ответ да, то эта статья для вас. В ней я расскажу вам как сделать мета-скрипты. Что ж, начнем с синтаксиса:
// Сделаем алиасы для каждой команды
alias command1 "action1; wait; action1" //Алиас для первой команды//
alias command2 "action1; wait; action2" //Алиас для второй...//
// Теперь выберем, что будет по дефолту
bind f1 "command1"
// Делаем мета-алиасы:
alias +meta1 "bind f1 command2" // Эта команда запускается, когда нажата мета-клавиша
alias -meta1 "bind f1 command1" // А эта, когда не нажата
// Назначаем мета-клавишу
bind alt "+meta1"
Теперь приведем пример с радиосообщениями. При нажатии на кнопку "R" клавиши "S", "G", "F", "A" будут вызывать радиосообщения "Storm in Front", "Go, Go, Go", "Team, Fall Back" и "Affirmative" соответственно. Иначе они будут выполнять команды движения назад, выброс оружия, альтернатиная стрельба и стрейф влево.
// делаем алиасы для радиосообщений
alias go "radio2; wait; menuselect 1; wait; wait; wait; slot10; wait; slo10"
alias storm "radio2; wait; menuselect 5; wait; wait; wait; slot10; wait; slo10"
alias aff "radio3; wait; menuselect 1; wait; wait; wait; slot10; wait; slo10"
alias fal "radio2; wait; menuselect 2; wait; wait; wait; slot10; wait; slo10"
// биндим по дефолту
bind s "+back"
bind a "+moveleft"
bind g "drop"
bind f "+attack2"
// делаем мета-алиасы...
alias +meta "bind g go; bind s storm; bind a aff; bind f fal"
alias -meta "bind s +back; bind a +moveleft; bind g drop; bind f +attack2"
// биндим мета-клавишу
bind r +meta 


Клавиши, на которые можно биндить
Клавиши букв:

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

Клавишы цифр:

1
2
3
4
5
6
7
8
9
0

Кнопки мыши:

MOUSE1
MOUSE2
MOUSE3
MOUSE4
AUX5
AUX6
MWHEELUP
MWHEELDOWN

Кнопки джойстика:

JOY1
JOY2
JOY3
JOY4
AUX5
AUX6

Специальные клавиши:

Enter
Space
Shift
Ctrl
Pause
Alt
Backspace
Tab
Escape

Функциональные клавиши:

F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12

Клавиши прокручивания:

Ins
Del
Home
End
Pgdn
Pgup

Стрелки:

Leftarrow
Rightarrow
Uparrow
Downarrow

Клавиши цифровой панели:

kp_leftarrow
kp_del
kp_end
kp_downarrow
kp_pgup
kp_ins
kp_5
kp_plus
kp_uparrow
kp_enter
kp_pgdn
kp_rightarrow
kp_slash
kp_minus
kp_home

Остальные:

,
.
/
;
'
*
[
]
-
=
~


"Пресс-энд-релиз" скрипты

В этой статье, вообщем-то моей первой по данной тематике, я хочу рассказать вам как сделать "прес-энд-релиз" скрипты. Название довольно странное, но если прочитать по английски, то все понятно. Механизм этих скриптов такой: при нажатии на клавишу выполняется некоторые команды, а как только эту клавишу отпускаешь - другие. Написание такого скрипта можно разбить на два шага.
1. Пишем алиасы:
alias "+press" "command1; command2"
alias "-press" "command3; command4"
Обратите особое внимание на "+" и "-". Они должны обязательно ставится перед именем алиаса, иначе сделать "прес-энд-релиз" скрипт невозможно. Второй алиас не является обязательным, если при отпускании клавиши никаких действий совершать не надо.
2. Биндим клавишу
bind "?" "+press"
Вот вообщем-то и все. Осталось только привести пример. Я думаю всем понятен, а может и полезен, будет пример с показом радара:
alias "+radar" "drawradar" alias "-radar" "hideradar"
bind "q" "+radar"
В заключение, хотелось бы отметить, что скрипты "прес-энд-релиз" можно применять и для других целей, например дял покупки оружия(см. покупка оружия в разделе скрипты). Кроме того, аналогично работают некоторые встроенные команды в КС, в частности +forward 


Виды скриптов
Cycle скрипты(Циклы)

Такой вид скриптов используется чаще всего для изменения настроек. С помощью одной клавиши вы сможете проходить по циклу, а конце вернутся на начальную позицию.
Ниже приведен синтаксис дял такого вида скриптов:
Начальное значение алиаса cycle
alias cycle "cycle1"
Для каждой настройки назначаем команды и меняем алиас на следующий член цикла
alias cycle1 "команда1; команда2; командаN; alias cycle cycle2"
Повторяем то же самое несколько раз
alias cycle2 "команда1; команда2; командаN; alias cycle cycle3"
alias cycle3 "команда1; команда2; командаN; alias cycle cycleN"
Возвращаемся на исходную настроку
alias cycleN "команда1; команда2; командаN; alias cycle cycle1"
Биндим наше творение
bind "?" "cycle"

Meta скрипты.

Было ли когда-нибудь с вами такое, что вам не хватало клавиш на клавиатуре, потому что вы забиндили и всю покупку, и сообщения, и радиокоманды? А хотели ли вы забиндить на одну и ту же клавишу несколько разных команд? Если ваш ответ да, то эта статья для вас. В ней я расскажу вам как сделать мета-скрипты.
Что ж, начнем с синтаксиса:
Сделаем алиасы для каждой команды
alias command1 "action1; wait; action1"//Алиас для первой команды//
alias command2 "action1; wait; action2" //Алиас для второй...//
Теперь выберем, что будет по дефолту
bind f1 "command1"
Делаем мета-алиасы:
alias +meta1 "bind f1 command2" // Эта команда запускается, когда нажата мета-клавиша
alias -meta1 "bind f1 command1" // А эта, когда не нажата
Назначаем мета-клавишу
bind alt "+meta1"
Теперь приведем пример с радиосообщениями. При нажатии на кнопку "R" клавиши "S", "G", "F", "A" будут вызывать радиосообщения "Storm in Front", "Go, Go, Go", "Team, Fall Back" и "Affirmative" соответственно. Иначе они будут выполнять команды движения назад, выброс оружия, альтернатиная стрельба и стрейф влево.
Делаем алиасы для радиосообщений
alias go "radio2; wait; menuselect 1; wait; wait; wait; slot10; wait; slo10"
alias storm "radio2; wait; menuselect 5; wait; wait; wait; slot10; wait; slo10"
alias aff "radio3; wait; menuselect 1; wait; wait; wait; slot10; wait; slo10"
alias fal "radio2; wait; menuselect 2; wait; wait; wait; slot10; wait; slo10"

Биндим по дефолту

bind s "+back"
bind a "+moveleft"
bind g "drop"
bind f "+attack2"
Делаем мета-алиасы...
alias +meta "bind g go; bind s storm; bind a aff; bind f fal"
alias -meta "bind s +back; bind a +moveleft; bind g drop; bind f +attack2"
Биндим мета-клавишу
bind r +meta

Скрипты переключения(Toggles)
Как видно из названия, переключатели действуют по принципу включить/выключить.
Пример:
alias d0 "developer -1; con_notifytime 0"
alias d1 "con_notifytime 8; developer 1"
alias ngon "d1; echo Net Graph on; d0; net_graph 3; alias ng ngoff"
alias ngoff "d1; echo Net Graph off; d0; net_graph 0; alias ng ngon"
alias ng "ngon"
bind n "ng"
Отражает на экране надпись Net Graph off, выключает Net Graph, назначает кнопку n алиасу ngon
В результате на одной кнопке получаем и включение и выключение.

Скрипты incrementvar
Суть таких скриптов проста, при нажатии на определённую клавишу, циклически меняет значение команды. Начиная от стандартного значения до наименьшего и кончая наибольшим. Пример:
alias crosshaicolor "incrementvar cl_crosshaircolor 0 4 1"
bind n crosshaicolor
Где 0 - это минимальное значение, 4 - максимальное, 1 - стандартно
При нажатии на n цвет прицела будет менятся. Вместо команды cl_crosshaircolor можно поставить далеко не все команды. Поэкспереминтируйте.

Press and Relise скрипты
Механизм этих скриптов такой: при нажатии на клавишу выполняется некоторые команды, а как только эту клавишу отпускаешь - другие.
Написание такого скрипта можно разбить на два шага.
1. Пишем алиасы:
alias "+press" "command1; command2"
alias "-press" "command3; command4"
Обратите особое внимание на "+" и "-". Они должны обязательно ставится перед именем алиаса, иначе сделать "прес-энд-релиз" скрипт невозможно. Второй алиас не является обязательным, если при отпускании клавиши никаких действий совершать не надо.
2. Биндим клавишу
bind "?" "+press"
Вот вообщем-то и все. Осталось только привести пример. Я думаю всем понятен, а может и полезен, будет пример с показом радара:
alias "+radar" "drawradar"
alias "-radar" "hideradar"
bind "q" "+radar"
В заключение, хотелось бы отметить, что скрипты "Press and Relise" можно применять и для других целей, например дял покупки оружия. Кроме того, аналогично работают некоторые встроенные команды в КС, в частности +forward