Так называемый скриптинг, также его называют биндингом (от англ. bind - связывать), имеет богатую предысторию. Те кто играл в другие игры от Valve (и не только), скорее всего, уже встречались с этим и возможно даже применяли, сами того не осозновая. В данном материале мы постараемся пополнить, обобщить и структурировать имеющиеся знания относительно скриптинга в игре Team Fortress 2.

Что за зверьки такие, скрипты?
Скрипты в TF2 имеют множество синонимов, включая и бинды (binds, keybinds, bindings). Скрипт, сам по себе, позволяет легко привязать к определенной клавише указанный набор команд в консоле.

Где располагаются скрипты?
Скрипты сохраняются игрой в файле, расположенному по адресу:

_папка_где_расположился_steam_\SteamApps\_имя_пользователя_\team fortress 2\tf\cfg\config.cfg

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

_папка_где_расположился_steam_\SteamApps\_имя_пользователя_\team fortress 2\tf\cfg\autoexec.cfg

Изначально данный файл отсутствует, но ты можешь его создать в любом текстовом редакторе. Также как и файл config.cfg, autoexec.cfg автоматически будет прочтен игрой во время ее загрузки. При создании и сохранении такого autoexec.cfg обрати внимание на расширение получившегося файла, текстовые редакторы по умолчанию добавляют к вновь создаваемому расширение .txt. В итоге выходит что-то вроде autoexec.cfg.txt, с таким расширением файл не будет обрабатываться игрой, даже если в консоли его запустить вручную! Чтобы избежать подобной ситуации рекомендую включить отображение расширений файлов.

Легко ли написать скрипт?
Простейший скрипт имеет следующую форму: bind "_клавиша_" "_команда_". Например, если ты хочешь, чтобы при нажатии на 1 в руках твоего героя оказывалось основное оружие, скрипт будет выглядеть так:
bind "1" "slot1"
(команда slot1 заставляет сделать текущим основное оружие)
Каждый скрипт (бинд) должен быть располагаться на отдельной строке. В качестве примера всегда можно посмотреть на config.cfg.

Как писать сложные скрипты?
Сложный скрипт очень похож на простой, разница лишь в количестве исполняемых команд при нажатии на клавишу. Каждая команда разделяется знаком 'точка с запятой' (;). Как примет, небольшой полезный скрипт для играющих в роли инженеров:
bind "q" "build 0; wait 50; +attack; wait; -attack; slot1"
Вышеприведенный скрипт 'привязывает' к кнопке 'q' цепочку команд. После нажатия на эту клавишу, будут выполнены следующие команды по порядку:
build 0 переводит игру в режим постройки подзарядки;
wait 50 ожидает 50 кадров перед тем, как приступить к следующей команде;
+attack начинает основного удара (по умолчанию левая кнопка мыши);
wait ожидает пока не будет исполнена следующая команда;
-attack закончивает основной удар;
slot1 активирует основное оружие (для Инженера это дробовик).
Что означают '+' и '-' в скриптах?
Плюс и минус - это два различных состояния, которые могут принимать команды. Плюс заставляет исполняться команду (и продолжать исполняться), если клавиша нажата. Если имеется минус, команда выполниться, если клавиша отпустилась. Например:
bind "c" "+duck"
Данный скрипт означает, что игрок припадет к земле и будет находиться в таком положении пока нажата кнопка 'c'. После отжатия кнопки, игрок поднимется. Необходимо запомнить, несмотря на то что в скриптах ты не встретишь команды -duck, игрок в любом случае займет изначальную позицию после того, как отпустят кнопку.

Что за алиасы (aliases) и как их писать?
Алиасы подобны скриптам за исключением того, что скриптом можно присвоить кнопке набор команд, а алиас позволяет назначить имя набору команд. Это имя позже может использоваться как замена нескольким командам. Слегка модернизируем вышеприведенный пример для Инженера:
alias "buildDispenser" "build 0; wait 50; +attack; wait; -attack; slot1"
bind "q" "buildDispenser"
В данном примере мы сделали алиас под названием buildDispenser на несколько команд, показав возможности скриптинга TF2 (название алиасы ты вполне мог и сам придумать). Когда дальше происходит обращение к алиасу, автоматически исполняются назначенные ему команды. Далее мы привязали кнопку q к алиасу. Теперь при нажатии на кнопку q будут выполнены команды алиаса buildDispenser.
Почему алиасы предпочтительнее обычной привязки? Мы обсудим это подробнее позже, но для начала, можешь представить себе ситуацию, когда тебе потребуется привязать один набор команд к нескольким клавишам. Вместо того, чтобы каждый раз привязавать команды к разным клавишам, ты можешь сделать алиас на несколько команд и затем уже привязать клавиши к этому алиасу. Если вдруг потребуется изменить набор команд, понадобится всего лишь внести правку в одном месте.

Как влияют "плюсы" и "минусы" на алиасы?
Они имеют схожее влияние и для алиасов. В плюсовом состоянии происходит выполнение (и продолжение выполнения) пока нажимается (нажата) клавиша, в минусовом - выполняется в момент отжатия кнопки. Опять же, в качестве примера модернизируем скрипт для Инженера:
alias "+upgradeBuilding" "slot3; +attack"
alias "-upgradeBuilding" "-attack; wait; slot1"
bind "mouse3" "+upgradeBuilding"
+upgradeBuilding переключается на разводной ключ и машет им
-upgradeBuilding прекращает махать ключом, чуток ждет, переключается на дробовик
делается привязки средней кнопки мыши к плюсовому состоянию upgradeBuilding, пока кнопка нажата Инженер махает ключом, как только кнопка отпущена - выполняет минусовой скрипт.
Запомни, даже если минусовой скрипт не привязан к чему либо, в любом случае скрипт будет выполнен при отжатии кнопки. Этот процесс автоматический для минусовых/плюсовых алиасов.

Как создают циклические (составные) алиасы?
Составные алиасы - это алиасы, которые включают в себя другие алиасы и даже, при желании, способны создавать новые. Данный процесс тяжело объяснять, вернемся к примерам:
alias "duckToggle" "duck1"
alias "duck1" "+duck; alias duckToggle duck2"
alias "duck2" "-duck; alias duckToggle duck1"
создаем алиас под названием duckToggle и привязываем его к другому под названием duck1
описываем алиас duck1, который начинает исполнять команду duck, затем он переназначает алиас duckToggle алиасу duck2
описываем алиас duck2, который прекращает выполнение команды duck и переназначает алиас duckToggle обратно алиасу duck1
bind "c" "duckToggle"
По итогам: при нажатии на кнопку c игрок приседает и находится в таком положении пока ты не нажмешь повторно эту же кнопку.

ALIAS
Данная команда носит общий характер и применима повсеместно. Алиас буквально создает новую команду, состоящую из нескольких других, облегчает работу при создании сложных скриптов.
alias "<название_алиаса>" "<команда; команда2[; команда3 и т.д.]>"

BUILD
Команда применима при написании скриптов для Инженера и Шпиона: если Инженер имеет достаточное количество металла, он начинает создавать выбранную конструкцию; Шпион в свою очередь берет в руки подрывное устройство и готов устанавливать жучков на сооружения противника.
build <цифра>, где цифра это:
0 - зарядка (Инженер)
1 - входной телепорт (Инженер)
2 - выходной телепорт (Инженер)
3 - стационарная пушка (Инженер)
4 - подрывное устройство (Шпион)
В настоящий момент нельзя вызвать команду build повторно, необходимо переключиться в другой режим (взяв другое оружие) и потом использовать команду повторно.

DESTROY
Если ты построил в роли Инженера какое-либо устройство, с помощью этой команды ты можешь стать обладателем кучи металлолома.
destroy <цифра>, где цифра полностью повторяет постройки Инженера, перечисленные выше.

DISGUISE
Команда применима только, если ты делаешь скрипт для Шпиона, превращает его в кого-либо еще. Цифра1 отвечает за маскируемый персонаж, цифра2 - маскируемая команда (синие или красные, 1 или 2 соответственно).
disguise <цифра1> <цифра2>, где цифра1 может принимать следующие значения:
1 - Разведчик
2 - Снайпер
3 - Солдат
4 - Подрывник
5 - Доктор
6 - Пулеметчик
7 - Огнеметчик
8 - Шпион
9 - Инженер

LASTDISGUISE
С помощью этой команды Шпион маскируется под предыдущего текущей маскировке персонажа, даже после смерти запоминается последняя маскировка. Команда является аналогом нажатия клавиши b. В режиме random происходит случайная выборка из персонажей для маскировки (исключая Шпиона и Разведчика).
lastdisguise [random]

LASTINV
Одна из самых простых команд - заставляет переключиться на последнее используемое оружие (аналог кнопки q в игре, которую наверняка все уже оценили и попробовали).
lastinv

MENUSELECT
Команда позволяет выбрать определенный пункт меню. Необходимо отметить, что под словом меню в данном случае подразумевается только меню типа списка голосовых команд, но никак не меню выбора персонажа и т.п.
menuselect <любой_существующий_пункт_меню>

PLAY
Проигрывает играющему мелодию (звук), сохраненный в формате wav. Вам потребуется GCF редактор для извлечения звуков из файлов формата gcf. Также ты можешь заставить проигрываться свои собственные файлы формата wav, тебе необходимо добавить эти файлы в папку:
C:\Program Files\Steam\steamapps\_твое_имя_\team fortress 2\tf\sound\
Данная папка выступает корневый каталогом при указании относительного пути до файлов формата wav.

SLOT
Данная команда имеет более широкое применение, чем возможно тебе покажется вначале. Помимо того, что она используется для выбора оружия, также применяется и для меню голосовых команд. Например, если кнопка f привязана к slot1 и активирует voice_menu_1 (z), нажатие на f приведет к тому, что твой герой начнет звать Доктора. В части смены оружия команда работает по разному. Если у тебя включен режим быстрой смены оружия, ты моментально переключаешь по этой команде на другое оружие, иначе - происходит только подсветка нового оружия и игра ожидает утверждения. Для последнего случая, тебе придется применять скрипт: "slot1; wait 50; +attack; wait; -attack".
slot<_номер_слота_>, где номер_слота цифра от 1 до 9.

USE
Команда use буквально предназначена для использования выбранного оружия. Без каких-либо недоразумений, переключений, просто переключаешь на необходимое тебе оружие.
use <_наименование_оружия_>, где наименование_оружия можно посмотреть по таблице:Персонаж Значение наименование_оружия Тип оружия
Разведчик tf_weapon_scattergun автомат
tf_weapon_pistol_scout револьвер
tf_weapon_bat бита
Солдат tf_weapon_rocketlauncher ракетница
tf_weapon_shotgun_soldier дробовик
tf_weapon_shovel лопатка
Огнеметчик tf_weapon_flamethrower огнемет
tf_weapon_shotgun_pyro дробовик
tf_weapon_fireaxe топор
Подрывник tf_weapon_grenadelauncher гранатомет
tf_weapon_pipebomblauncher бомбомет
tf_weapon_bottle бутылка
Пулеметчик tf_weapon_minigun пулемет
tf_weapon_shotgun_hwg дробовик
tf_weapon_fists кулаки
Инженер tf_weapon_shotgun_primary дробовик
tf_weapon_pistol револьвер
tf_weapon_wrench разводной ключ
tf_weapon_pda_engineer_destroy разрушение конструкций
tf_weapon_pda_engineer_build постройка конструкций
Доктор tf_weapon_syringegun_medic шприцемет
tf_weapon_medigun лечебная пушка
tf_weapon_bonesaw пила
Снайпер tf_weapon_sniperrifle снайперская винтовка
tf_weapon_smg пистолет-пулемет
tf_weapon_club мачете
Шпион tf_weapon_revolver револьвер
tf_weapon_knife нож
tf_weapon_spy_pda жучки

VOICEMENU
Данная команда позволяет подавать голосовые сообщения напрямую (аналогично работе с кнопками z,x,c). По сути она позволяет Вам привязать голосовую команду к любой кнопке, в отличие от стандартной привязки (несколько нажатий на клавиши).
voicemenu <_номер_меню_> <_номер_фразы_>, значения можно посмотреть в таблице:номер_меню номер_фразы фраза
0 0 Medic
0 1 Thanks
0 2 Go
0 3 Move Up
0 4 Frank Left
0 5 Frank Right
0 6 Yes
0 7 No
1 0 Incoming
1 1 Cloaked Spy
1 2 Sentry Ahead
1 3 Teleporter Here
1 4 Dispenser Here
1 5 Sentry Here
1 6 Activate Udercharge
1 7 Ubercharge Ready (Медик)
2 0 Help
2 1 Battlecry
2 2 Cheers
2 3 Jeers
2 4 Positive
2 5 Negative
2 6 Nice Shot
2 7 Good Job

WAIT
Команда очень полезна при исполнении нескольких команд в одну строку. По сути, она приостанавливает выполнение текущих команд на X кадров, указанные в качестве необязательного параметра (по умолчанию значение равно 1). Значение подбираются методом проб и ошибок, 100 примерно равно 1 секунде. В качестве примера команда для модернизации постройки Инженера:
"use tf_weapon_wrench; wait; +duck; wait; +attack; wait 500; -attack; wait; -duck; lastinv"
Здесь происходит переключение на разводной ключ, начинает им размахивать в течение 5 секунд, останавливается, переключается на последнее используемое оружие. Без использования команды wait зрелище будет комичным.
Необходимо учесть, что данная команда никак не исключает повторный нажатие на клавиши, выступает только как таймер при выполнении скриптов.
wait [_задержка_], где задержка любое значение от 1 и больше.

Все управляющие клавиши клавиатуры, кнопки мыши и прокрутка средней кнопки мыши имеют определенные обозначения в скриптах. Предлагаю твоему вниманию полный список:
tab
enter
escape
space
backspace
uparrow
downarrow
leftarrow
rightarrow
alt
ctrl
shift
ins
del
pgdn
pgup
home
end
kp_home
kp_uparrow
kp_pgup
kp_leftarrow
kp_5
kp_rightarrow
kp_end
kp_downarrow
kp_pgdn
kp_enter
kp_ins
kp_del
kp_slash
kp_minus
kp_plus
kp_multiply
capslock
joy1-4
aux1-31
mwheeldown
mwheelup
mouse1-5
pause

Надеюсь у тебя не останется вопросов относительно соответствия написанного и расположению клавиш на клавиатуре. Отдельно остановлюсь только на клавишах мыши: mouse1 - левая кнопка мыши, mouse2 - правая, mouse3 - средняя (если есть); mwheeldown - прокрутка вниз, соответственно mwheelup - вверх.