===Вводная чать===
Собственно под влиянием поста от @LaCTuK решил написать этот мануал.
Мануал разделю на два логических раздела теория и практика. Теоретическая часть также будет поделена на два раздела Основы и Описание команд. в обще примеры я буду писать по ходу, но главный пример использования команд будет в практической части. Для начала не много вводной информации, а также моих мыслей по этому поводу.
Скрипт – это автоматизация и упрощения действий. Давайте сразу договоримся и не будем разводить споров, хотя мне это будет и выгодно :) скрипты это не читерство. Если вас удивляет, что в обще об этом начал разговор, то вот
Моё мнение мысли, если разработчики дали возможность автоматизации и не ограничивают сие действие при игре по сети значит это не плохо и не читерство(слово не подходит) это скорее преимущество, но если ваш противник не использует это не значит, что и вы не должны это использовать.
Обозначения
Так как в тексте будет море команд и кодов я решил ввести не большие обозначения. каждая новая сточка в кодах будет начинаться с знака | также будут вести нумерацию для облегчения понимания. На пример код из первого примера в разделе практики:
1| alias recdemo "recon"
2| alias recon "record tf2demo; developer 1; echo Recording Demo!; developer 0; alias recdemo recoff"
3| alias recoff "stop; developer 1; echo Demo Complete!; developer 0; alias recdemo recon"
4| bind "j" "recdemo"
то есть писать их в скрипте не нужно просто для понимания текста тут решил писать так.
===Теоретическая часть===
==Основы==
Скрипты в Team Fortress 2 это набор команд (консольных команд) понятых движку игры чаще всего их пишут в конфиг файлах. Список консольных команд можно посмотреть
Для Клиента корневым каталогом для скриптов будет:
Steam\steamapps\*логин в стиме*\team fortress 2\tf\cfg
В папке по дефолту будут следующие файлы:
*config.cfg - основной конфиг файл игры
*config_arena.cfg - конфиг для карт arena при создании сервера в игре.
*demoman.cfg - конфиг для подрывника
*engineer.cfg - конфиг для инженера
*heavyweapons.cfg- конфиг для пулеметчика
*medic.cfg- конфиг для медика
*pyro.cfg- конфиг для поджигателя
*scout.cfg- конфиг для скаута
*sniper.cfg- конфиг для снайпера
*soldier.cfg- конфиг для солдата
*spy.cfg- конфиг для шпиона
Как вы можете заметить заполнены только файлы config и config_arena все остальные пустые. Все эти файлы автоматически загружаются с игрой, но работают не сразу все, а лишь config в котором прописаны основные настройки. Все остальные при условии для классовых файлов это выбор этого класса при игре, для config_arena.cfg - это создание в игре сервера с картами arena. Это я для повтора усвоенного.
Все файлы форматов .cfg .rc открываются простым Блокнотом, но я буду все файл открывать через WoedPad как-то мне он больше нравиться ж)
Также игра загружает файлы vavle.rc его мы тут не видим, но спокойно можем создать через выше указанные приложения и написать в нём exec autoexec.cfg, что будет вызывать файл (который к слову тоже стоит создать) autoexec.cfg также при запуске игры.
Разберём файл vavle.rc
в нём мы написали exec autoexec.cfg
Важно каждая новая команда новая сточка!
Это означает выполнить прочесть кому как удобнее файл autoexec.cfg мы могли бы написать exec XXXX.cfg и тогда бы запустился файл XXXX.cfg. Почему autoexec.cfg это дефолт название файла для загрузки скриптов пользователей и лучше использовать его. А уже в нём(в файле autoexec.cfg) прописываем нужные нам при запуске скрипты. То есть получается такая система игра запускает vavle.rc который запускает autoexec.cfg который в свою очередь уже запускает все остальные ваши скрепты для всей игры в целом.
На пример у вас есть скрипт только для солдата.
Тогда для его запуска нужно в файле soldier.cfg прописать exec имя файла скрипта.cfg.
Хочу заметить Source не понимает русских символов в названии файлов.
Разберём не много файл config.cfg
в самом начале стоит unbindall - команда убирает все назначены клавиши, а дальше в файле идёт:
bind "0" "slot10"
bind "1" "slot1"
bind "2" "slot2"
и т.д.
Это идёт назначение клавиш bind "клавиша" "команда", где клавиша - это любая кнопка на клавиатуре спец клавиши типа пробела расписаны ниже, Команда - тут может быть любая команда на пример чит в Half-Life impulse 101, что давал все оружия я его биндил на букву q вот так bind "q" "impulse 101" очень нужная штука как раз основа всех скриптов.
Бывает, что нам нужно чтоб что-то(какая-то команда) исполнялась пока мы сами не скажем остановиться. Для этого используются знаки + и - на пример для вечной атаки +attack и что её остановить нужно -attack.
также во многих скриптах встречаются комментарии которые можно оставлять в файлах скриптах. Комментарии располагаются через // и после них в строчке движком игры игнорируются слова не обозначающие команды игнорируються. Очень полезно подписывать, что делает та или иная команда или делать файл скрипта на блоки. комментарий оставляется также на новой строчки. Я буду писать комментарии для команды перед её исполнением.
Русский в комментариях разрешён.
==Описание команд==
В этой части распишем основные команды, которые вам будут необходимы. Все что "упаковано" в квадратные скобки опционально, то что в угловых - необходимо.
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. Вам потребуется
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 <_наименование_оружия_>, где наименование_оружия можно посмотреть по таблице:
VOICEMENU
Данная команда позволяет подавать голосовые сообщения напрямую (аналогично работе с кнопками z,x,c). По сути она позволяет Вам привязать голосовую команду к любой кнопке, в отличие от стандартной привязки (несколько нажатий на клавиши).
voicemenu <_номер_меню_> <_номер_фразы_>, значения можно посмотреть в таблице:
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 - вверх.
===Практическая часть===
Теория конечно хорошо, но практика лучше. Собственно на просторах интернета я уже нашел пару интересных скриптов которые мы разберём.
Мотор!
Первый и более менее понятный скрипт для записи демо файлов по нажатию клавиши.
Как написано тут в Часто Задаваемых вопросах для записи демки необходимо ввести record имя файла для демки.
1) В Папке cfg создаём motor.cfg
2) в файле autoexec.cfg пишем на новой сточки exec motor.cfg
3) Правим motor.cfg:
1|//создаём команду которая будет запускать другую команду рекон
2|alias recdemo "recon"
3|//создаём команду рекон которая будет включать запись демо файла
4|alias recon "record tf2demo; developer 1; echo Recording Demo!; developer 0; alias recdemo recoff"
5|//создаём команду рекон которая будет выключать запись демо файла
6|alias recoff "stop; developer 1; echo Demo Complete!; developer 0; alias recdemo recon"
7|// назначаем на кнопку джей команду рекдемо
8|bind "j" "recdemo"
Суть: По нажатию кнопки "j" будет проводиться запись демо файла с именем tf2demo по повторному нажатию будет запись остановлена также при остановке будет написано "Demo Complete!" команда developer 1(0-off|1-on) включает режим разработчика в частности при записи будет записаны действия в меню.
ещё больше информации про запись демо файлов, есть в офф вики
Rocket Jump
Второй пример будет для солдата и важный элемент их деятельности это быстрое перемещении, а также достижения высших точек на карте с помощью Rocket Jump'а в подборке видео от @LaCTuK на эту тему уже был написан этот скрипт, но я его разберу чуть по подробнее.
1) создаём файл autorocketjump.cfg
2) Собственно Скрипт предназначен для солдат значит в файле soldier.cfg пишем exec autorocketjump.cfg
3) Правим autorocketjump.cfg:
1|//создаём команду рокетджам плюс в которой мы прыгаем приседаем ждёи стреляем
2|alias +rocketjump "+jump;+duck;wait;+attack"
3|//создаём команду рокетджам минус в которой мы заканчиваем прыгать заканчиваем атаковать ждём и заканчиваем приседать
4|alias -rocketjump "-jump;-attack;wait;wait;wait;-duck"
5|//биндим команду рокетджам плюс на вторую кнопку мыши та что правая
6|bind mouse2 "+rocketjump"
Суть: смотрим в пол и жмём правую кнопку мыши и скрипт за вас выполнит рокетджам и вы взлетите как птица.
Boom, headshot!
Собственно как вы уже наверное догадались скрипт для снайпера. Задача сделать скриншот после выстрела снайпера из снайперской винтовки. Так сказать запечатлеть момент вот такой:
Прежде всего качество изображений по дефолту установлены на отметки 90 я же советую поставить 100 для этого в конце config.cfg дописываем jpeg_quality "100"
1) создаём файл скрипта headshot.cfg
2) снова у нас классовый конфиг так что вписываем в файл sniper.cfg "exec headshot.cfg"
3) Правим headshot.cfg:
//создаём команду в которой происходит начало атаки ждём снимает скриншот заканчиваем атаку
1|alias boomheadshot "+attack;wait 30;jpeg;-attack;"
2|bind mouse3 "boomheadshot"
Опытным путём я выяснил, что wait 30 это оптимально, но можете по экспериментировать сделать на 10 больше или меньше.
Суть: по нажатию колёсика мышки происходит выстрел и через доли секунды скриншот если вы попали то у вас получился уже очень не плохой скриншот как вот этот:
Послесловие
Собственно писал я довольно долго, но вроде давольно много и рассказал. Надеюсь разобраны примеры помогут вам до понять как пишутся скрипты. Конечно в статье написано далеко не всё, но для начала должно хватать. Будет спрос распишу ещё пару скриптов.
©® выносим мозг продакшин™ & ссым кипятком солюшинс.™
спешил фор ю Gamer.ru