Так
называемый скриптинг, также его называют биндингом (от англ. bind -
связывать), имеет богатую предысторию. Те кто играл в другие игры от
Valve (и не только), скорее всего, уже встречались с этим и возможно
даже применяли, сами того не осозновая. В данном материале мы
постараемся пополнить, обобщить и структурировать имеющиеся знания
относительно скриптинга в игре Team Fortress 2. Что за зверьки такие, скрипты? Скрипты
в TF2 имеют множество синонимов, включая и бинды (binds, keybinds,
bindings). Скрипт, сам по себе, позволяет легко привязать к
определенной клавише указанный набор команд в консоле.
Где располагаются скрипты? Скрипты сохраняются игрой в файле, расположенному по адресу:
Команды
сохраненные в этом файле будут применяться при каждой загрузке игры.
Несмотря на то, что пользователь вправе вносить редакторские правки в
данный файл, для порядка рекомендуем все-таки хранить собственные
скрипты в отдельном файле. Как вариант, можно хранить такие настройки в
следующем файле:
Изначально
данный файл отсутствует, но ты можешь его создать в любом текстовом
редакторе. Также как и файл config.cfg, autoexec.cfg автоматически
будет прочтен игрой во время ее загрузки. При создании и сохранении
такого autoexec.cfg обрати внимание на расширение получившегося файла,
текстовые редакторы по умолчанию добавляют к вновь создаваемому
расширение .txt. В итоге выходит что-то вроде autoexec.cfg.txt, с таким
расширением файл не будет обрабатываться игрой, даже если в консоли его
запустить вручную! Чтобы избежать подобной ситуации рекомендую включить
отображение расширений файлов (см. иллюстрированную инструкцию для
различных версий Windows).
Легко ли написать скрипт? Простейший
скрипт имеет следующую форму: bind "_клавиша_" "_команда_". Например,
если ты хочешь, чтобы при нажатии на 1 в руках твоего героя оказывалось
основное оружие, скрипт будет выглядеть так: bind "1" "slot1" (команда slot1 заставляет сделать текущим основное оружие) Каждый
скрипт (бинд) должен быть располагаться на отдельной строке. В качестве
примера всегда можно посмотреть на config.cfg, полезные команды можно
посмотреть в материале Консольные команды Team Fortress 2 на нашем
сайте.
Как писать сложные скрипты? Сложный скрипт очень похож
на простой, разница лишь в количестве исполняемых команд при нажатии на
клавишу. Каждая команда разделяется знаком 'точка с запятой' (;). Как
примет, небольшой полезный скрипт для играющих в роли инженеров: 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