» »

Как создать свой скрипт. Как писать скрипты для Windows? Есть более интересная модификация данного скрипта

27.10.2020

От автора: сам по себе сайт на чистом html очень сильно ограничен по своей функциональности. Чтобы добавить на него какие-то привычные всем возможности, нужно использовать другие технологии. Скрипты для сайта html сделают ресурс гораздо более функциональным. О них давайте и поговорим.

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

Чаще всего под скриптом понимают файл или несколько файлов, которые написанные на языке javascript и каким-то образом дополняют функциональность сайта. Но сценарии можно создавать на любом языке программирования: PHP, Perl, Python и т.д. Больше всего скриптов существует на PHP и JavaScript, так как это самые популярные сегодня технологии.

Где скачать готовые скрипты для сайта html

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

Например, hotscripts.com. Огромный зарубежный портал, на котором представлено более десяти тысяч сценариев и программ на самых разных языках программирования. В том числе там есть различные полезные вещи на HTML5. Только все на английском, поэтому как-то вам придется разбираться, если очень надо будет.

Как создать сайт самому?

Рис. 1. Крупнейший в интернете портал скриптов. К сожалению, только для тех, кто дружит с английским.

Пример установки скрипта

Ну а теперь давайте установим какой-нибудь скрипт. Методом случайного тыка я выбрал этот — ссылка . Это графические часы. Сначала давайте распакуем скачанный архив и посмотрим, что там.

Мне сразу не понравилось, что там целых 14 изображений, которые нужны для работы. Ну да ладно, не будем сейчас оценивать качество скрипта, а просто установим его.

Для этого нужно открыть файл index.html. Там нас должен интересовать тег script и все его содержимое. Собственно, вариантов установки веб-сценария два:

Просто скопировать все содержимое тега script и вставить на свою страничку в тег head.

Скопировать код в отдельный файл (например, script.js), а потом подключить этот файл к html-страничке. Так мы поступим правильно с точки зрения стандартов, разделив разметку страницы и ее поведение.

Дальнейший процесс установки заключается в том, что тегу body нужно дописать атрибут onload = «show3()». Это означает, что после загрузки тела страницы должна быть выполнена функция show3(), которая и приводит в действие наши часы.

Теперь нам остается только вставить в тело страницы строчку кода, которая будет создавать необходимые элементы для показа часов. В скрипте по умолчанию прописано так:

< a href = "http://www.woweb.ru" > < Img Src = "cb.gif" Name = "a" border = 0 > < Img Src = "cb.gif" Name = "b" border = 0 > < Img Src = "colon.gif" Name = "c" border = 0 > < Img Src = "cb.gif" Name = "d" border = 0 > < Img Src = "cb.gif" Name = "e" border = 0 > < Img Src = "colon.gif" Name = "f" border = 0 > < Img Src = "cb.gif" Name = "g" border = 0 > < Img Src = "cb.gif" Name = "h" border = 0 > < Img Src = "cam.gif" Name = "j" border = 0 > < / a >

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

Вот собственно и все. Так же можно установить скрипт слайдера для сайта html, поиск по сайту, календарь и многое-многое другое. Иногда такие вещи устанавливаются в виде jQuery-плагинов. Если вы используете популярную CMS, то для нее тоже есть множество плагинов, реализующих нужный функционал.

В общем, главное уметь искать эти самые скрипты, а их установка может очень отличаться в разных случаях. Итак, устанавливайте действительно полезные скрипты для своего сайта и продолжайте заходить на webformyself, потому что здесь для вас приготовлено еще много интересного о сайтостроении.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Часть 1. Вступление

И так, что же такое скрипт? Это набор команд, которые будут последовательно выполняться движком игры. Хотя, фактически, таковыми являются и файлы, содержащие настройки, но впредь скриптами будем называть только те наборы команд, которые используют логические команды, а не просто набор команд, которые никак между собой не взаимосвязаны. У движка Source, на котором работают игры Valve, набор таких команд достаточно ограничен, дабы не давать игрокам возможности получать нечестное преимущество путём использования скриптов. Скрипты, описаные в этом руководстве, были написаны для Team Fortress 2, однако почти все приёмы их написания так же применимы и для других многопользовательских игр на движке Source - CS:GO, HL2:DM, CS:S и так далее.
В Source есть отдельный формат файлов, в которые записываться скрипты - .cfg. Данный формат не является специальным для движка Source, его можно найти и в множестве других программ. Скриптовые команды так же могут вводится напрямую через внутриигровую консоль. В дальнейшем мы будем иметь дело именно с такими файлами, тут и далее будем называть конфигами. Консоль же лучше использовать исключительно для коротких команд и настройки игры, но не для написания объёмных скриптов.
В этом руководстве вы сможете пройтись по всем уровням скриптов, от самых простых до весьма сложных. Но не думайте, что нужны какие-то особые навыки для их написания, всего лишь немного логики и блокнот. И так, начнём же наше изучение!

Часть 2. Готовимся писать скрипты

Что же нужно для написания скрипта? Во-первых, хороший и удобный текстовый редактор. Стандартный блокнот Windows не подойдёт, так как он имеет весьма ограниченный функционал. Поэтому я рекомендую использовать блокнот Notepad++. Скачать его можно .
Далее стоит включить функцию отображения расширений файлов в Windows. Это позволяет быстро изменять расширение файлов и превращать текстовые файлы в конфиги прямо в проводнике Windows, что может значительно упростить данную операцию. Как это сделать:
Теперь нам нужно научиться создавать сами конфиги. Для начала найдите папку Steam. Если вы не изменяли её местоположение, то она должна быть в C:\Program Files (x86). После того, как её найдете, пройдите по следующему пути:
Steam/steamapps/common/Team Fortress 2
На этом этапе настоятельно рекомендую сделать ярлык папки tf на рабочем столе для быстрого доступа к ней. Кроме неё, тут есть папки bin и hl, но нам они не нужны, так как там находятся файлы движка. Файлы самой игры как раз в папке tf. Внутри тоже много разнообразных файлов и папок, но нас интересует только одна - cfg. Тут находятся все игровые конфиги. В итоге, мы оказались в

C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\tf\cfg
Все конфиги, которые вы будете делать, загружаются из этой папки. Так же их можно загружать из /tf/custom/%названиепапки%/cfg, но этот способ есть смысл использовать только в том случае, если вы делаете свой мод, либо используете дополнительные возможности TF2, как субтитры (о них ниже). И так, теперь давайте сделаем первый конфиг. Для этого создайте текстовый документ и переименуйте его в autoexec.cfg. Этот файл очень часто используется при написании скриптов, поскольку, как видно из его названия (auto + execute, автозагрузка), он загружается автоматически при запуске игры. Но работать будет любой cfg файл с латинским названием без пробелов. При этом внутри cfg можно делать собственные папки, дабы делать большие скрипты более структурированными и опрятными. Autoexec - не единственный файл, который загружается автоматически. Кроме него ещё есть config.cfg, однако в нём содержатся назначения клавиш в игре и изменять его не стоит. Так же можно создать конфиги для каждого отдельного игрового класса. Это стоит сделать сразу же, вместе с autoexec"ом. Эти конфиги будут загружены при выборе соответствующего класса. Названия файлов следующие:
scout.cfg - Разведчик
soldier.cfg - Солдат
pyro.cfg - Поджигатель
demoman.cfg - Подрывник
heavyweapons.cfg - Пулемётчик
engineer.cfg - Инженер
medic.cfg - Медик
sniper.cfg - Снайпер
spy.cfg – Шпион
Кроме того, можно загружать конфиги вручную с помощью команды exec:

exec [название конфига]

Тут и далее команды для скриптов и готовые скрипты будем выносить в такие же рамки с кодом
При этом если он находится в папке внутри tf/cfg, скажем, tf/cfg/myusefulscript/script.cfg, то его можно загрузить с помощью

exec myusefulscript/script

Часть 3. Консольные команды, консоль и с чем их едят

Консоль – текстовое окно с логом действий движка игры, ошибок, результатов ввода команд и прочего. Кроме того, в ней содержится строка для ввода команд, полоса прокрутки и кнопка ввода команды. Консоль всех игр на движке Source выглядит так:
Для того, чтоб открыть консоль в игре, зайдите в дополнительные настройки клавиатуры и поставьте галочку «Включить консоль разработчика». После этого достаточно нажать кнопку «~» (или «ё» в русской раскладке). Но что же мы можем вводить в консоль?
Как мы уже знаем, все скрипты состоят из консольных команд. В Team Fortress 2 есть несколько видов команд, которые можно вводить через консоль. Среди них:
Обычные команды без каких-либо аргументов. Они выполняются один раз при вводе и отвечают за одно определённое действие. Например:

retry // переподключиться к серверу disconnect // отключиться от сервера exit // выйти из игры

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

ent_fire game_timer “addtime 100” // добавить 100 секунд к времени текущего раунда ent_create obj_sentrygun // создать турель первого уровня под прицелом addcond 40 // дать игроку критические удары

Переменные, которые имеют определённое числовое значение в качестве аргумента. Однако, в отличии от команд с аргументами, эти аргументы остаются неизменными и выполняются всё время, до тех пор, пока их не изменят. Обычно переменные – это различные настройки. Чаще всего они имеют только два значения – 0 и 1, но бывают и другие. Переменные делятся на два типа – со стороны сервера и клиента. Первые могут изменятся только администратором сервера посредством прямого доступа к серверной консоли или командой rcon. Клиентские команды могут быть изменены игроками на их усмотрение, однако некоторые также могут быть фиксированы сервером. Например:

sv_cheats 1 // включить чит-команды на сервере fov_desired 90 // установить угол обзора на 90 градусов sensitivity 4 // установить чувствительность мыши на 4

Команды со знаком «+» или «-». Их выполнение происходит зациклено, то есть от момента, когда мы начали выполнение команды со знаком «+», до того момента, когда мы дали команду остановить данное действие, то есть выполнили команду со знаком «-». Обычно они используются при назначении клавиш и работают пока мы держим соответствующую клавишу нажатой. Например:

Attack // стрелять из выбранного оружия основной атакой -attack // прекратить стрелять +forward // идти вперёд -forward // перестать двигаться вперёд

Команды в консоль можно вводить как последовательно, по одной строчке, так и в одну строку с использованием точки с запятой:

sv_cheats 1; addcond 40; sv_cheats 0 // включить читы, дать игроку криты и выключить читы

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

sv_cheats "1" // тут кавычки использовать можно, но они неуместны alias cheats "sv_cheats 1" // а вот тут скобки необходимы, иначе переменная будет введена без аргумента echo "Warning, something has gone wrong!" // тут кавычки тоже нужны, иначе сообщение не отправится полностью

Ну и напоследок, как вы уже могли заметить, в скриптах можно делать комментарии с помощью двух знаков «/» (слэш). Всё, что написано на той же строчке после них, выполняться движком не будет. Например:

sv_cheats 0 // sv_cheats 1 – первая команда будет выполнена, вторая – нет

Теперь, когда мы ознакомились с основами, можем приступать к написанию первого скрипта. И да, на будущее, я буду заменять аргументы на слова в квадратных скобках для большей ясности того, какой аргумент за что отвечает. Вот так:

ent_create [предмет]

Часть 4. Команды bind и alias

Перед тем, как писать скрипты, нужно понять, что представляют собой две важнейшие логические команды - bind и alias.
Команда bind позволяет нам назначать определённой кнопке определённую команду. Используется она следующим образом:

bind [кнопка] "[команда]"

Например:

bind k "echo Hello, World!" // выведет "Hello, World!" в консоль bind l "voicemenu 2 6" // заставит вашего персонажа использовать голосовую команду "Хороший выстрел!", полный список голосовых команд можете найти bind p "disguise 1 1" // замаскирует шпиона под вражеского разведчика, список аргументов смотрите

При работе с биндами есть еще пара полезных команд:

key_listboundkeys // вывести список всех текущих назначений клавиш key_findbinding [клавиша] // найти команду определенной клавиши unbind [клавиша] // команда-противоположность bind, снимает назначение с ненужной кнопки

Кстати, вот несколько команд для вывода какого-либо текста во время игрового процесса:

echo [текст] - выводит текст в консоль say [текст] - выводит текст в общий чат (его увидят обе команды) say_team [текст] - выводит текст в чат команды (его увидит только ваша команда)


Ну а теперь, важнейшая команда, из которой, по сути, состоит 95% всех скриптов:

alias [название алиаса] "[последовательность команд]" // позволяет соединить несколько команд в одну, и дать ей собственное название.

Однако стоит заметить, что сама команда alias всего лишь объединяет несколько команд в одну, для выполнения их последовательности нужно выполнить сам алиас по его названию.Названия алиасов также чувствительны к регистру, которым они написаны, то есть алиасы yourStuff, YourStuff, и yourstuff могут иметь разные действия. Название алиаса должно отображать его функцию, это поможет вам в будущем, когда захотите изменить свой скрипт. Если вы собираетесь создать много алиасов с похожими функциями, то дайте им одно название, но присвойте каждому свой числовой индекс, например line1; line2; line3; line4 и т. д.
При этом последовательность может содержать ещё больше команд alias, либо выполнять саму себя, например:

alias cheat “sv_cheats 1; addcond 40” cheat // при выполнении данный алиас включит читы на сервере и даст нам криты alias aliases "alias 1 "echo One"; alias 2 "echo Two"; alias 3 "echo Three"; 1; 2; 3" aliases // этот алиас сначала сократит несколько команд с помощью других алиасов, а потом последовательно их выполнит, в данном случае выведет 1, 2 и 3 в консоль alias loop "echo "Spam"; wait 300; loop" // этот алиас представляет собой замкнутый цикл, который выполняет сам себя, циклически посылая сообщение в консоль, но для циклов желательно использовать более сложные конструкции, о них расскажем позже

Другая интересная особенность команды alias – её можно использовать как переменную со знаком «+» или «-». При этом так же, как и в случае с такой переменной, при нажатии на кнопку, к которой привязан данный алиас, выполняется команда «+», а при отпускании – «-». Пример:

alias +logkey "echo "You pressed K"" alias -logkey "echo "You released K"" bind k +logkey // теперь при нажатии на клавишу K в консоль будет выведено первое сообщение, а при отпускании – второе

Большинство скриптов состоит из двух частей - первая содержит логику с использованием alias либо других логических команд, а вторая назначает заданные действия кнопкам, используя команду bind. Ну а теперь давайте познакомимся с остальными логическими командами, которые можно также использовать в написании ваших скриптов.

Часть 5. Команды toggle, bindtoggle, incrementvar и wait

Команды, о которых мы будем говорить ниже, не так часто используются в скриптах, они по большей части являются упрощением сложных конструкций с использованием alias (кроме команды wait).
Команды toggle и bindtoggle очень схожи между собой. По сути, они выполняют одно и то же действие – переключают заданную переменную между её определёнными значениями. Отличие между ними в том, что bindtoggle сразу же задаёт такому переключателю соответствующую кнопку, но при этом не работает с аргументами, то есть всегда переключает переменную между 0 и 1. Использование данных команд:

toggle [переменная] [стандартное значение] [конечное значение] // если значение не задано, то команда будет переключать их между 0 и 1 toggle r_drawviewmodel 0 1 // при вводе будет переключать видимость модели оружия игрока на экране, будет работать и без последних двух аргументов bindtoggle [кнопка] “[переменная] [стандартное значение] [конечное значение]” bindtoggle k r_drawviewmodel // будет изменяться видимость оружия в руках

Применение toggle и bindtoggle весьма полезно при работе с переменными, однако если нужно переключить другие нечисловые аргументы, то тут уже возникают проблемы. Как это делать мы рассмотрим в следующих частях
Команда incrementvar может сэкономить уйму времени, так как конструкция из команд alias, которая заменила бы её, поистине огромна. Данная команда позволяет менять переменную не между двумя заданными значениями, а добавлять некоторое значение к текущему при каждом вызове команды. При этом можно выставить границы, в которых эту команду можно изменять. Использование данной команды:
incrementvar [команда] [минимальное значение] [максимальное значение] [сумма] // в данном примере сумма – число, которое мы будем добавлять при каждом вызове команды, оно может быть отрицательным

bind k “incrementvar viewmodel_fov 90 120 1“ // при нажатии k отдаление оружия будет увеличиваться от 90 до 120, а потом опять сбросится до 90 bind k “incrementvar viewmodel_fov 90 120 -1” // при нажатии k отдаление оружия будет уменьшаться от 120 до 90, а потом опять сбросится до 120

Данная команда используется крайне редко из-за узкого круга применения, но может быть крайне полезной в некоторых случаях.
Последняя логическая команда – wait. Её потенциал поистине огромный, поэтому Valve добавили специальную серверную переменную (sv_allow_wait_command), которая, к сожалению, выключена на большинстве серверов сообщества, соревновательном режиме и киберспортивных лигах TF2. Однако wait по-прежнему работает в свободном режиме игры (Casual) и на некоторых серверах сообщества.
Что же она представляет собой? Она банально даёт вам возможность вставлять задержки между выполнением некоторых действий. Однако вводятся они не в секундах, а в тиках. Количество таких тиков у каждого сервера может быть разным, но почти у всех оно равно 66 тикам в секунду. Использование команды wait:

wait [кол-во тиков] // задержка в заданное количество тиков перед вызовом следующего элемента последовательности alias song "say "This was a triumph"; wait 300; say "I"m making a note here."; wait 300; say "HUGE SUCCESS.""; song // всего лишь один пример применения – обход спам-фильтра в чате, работающего на большинстве серверов

Для проверки того, включён ли wait на сервере, существует вот такой скрипт:

alias waitTester "alias waitTest waitPositive; wait; waitTest" alias wait "alias waitTest waitNegative" alias waitPositive "echo Wait is enabled on this server." // сюда можно добавить алиасы, которые будут запущены в том случае, если wait включён, либо вставить exec ссылку на конфиг с таким скриптом alias waitNegative "echo Wait is DISABLED on this server." waitTester

В нём использована особенность движка – если команда wait выключена, то можно создать алиас с именем wait, а если включена, то нельзя, так как такой алиас будет конфликтовать с самой командой.
Wait можно использовать для множества разных скриптов – таймеров, чат-спаммеров, автоматического передвижения, последовательного выполнения действий и так далее. Однако не стоит использовать его слишком часто – помните, что он выключен на большинстве серверов.
На этом заканчивается знакомство с основными скриптовыми командами движка Source, теперь давайте научимся использовать их на практике.

Часть 6. Практическое применение скриптовых команд

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

// тут мы делаем алиасы с настройками под каждый слот оружия // slot1/2/3 - выбор самого оружия // r_drawviewmodel 0/1 - будете ли вы видеть оружие в руках // viewmodel_fov - отдаление оружия от экрана // cl_crosshair_file - вид прицела, аргументы можно посмотреть в дополнительных настройках alias primary "slot1; r_drawviewmodel 0; viewmodel_fov 0; cl_crosshair_file crosshair1" alias secondary "slot2; r_drawviewmodel 0; viewmodel_fov 0; cl_crosshair_file crosshair2" alias melee "slot3; r_drawviewmodel 1; viewmodel_fov 90; cl_crosshair_file crosshair3" // задаём кнопкам соответствующие функции-алиасы bind 1 primary bind 2 secondary bind 3 melee

Проблемой данного скрипта является то, что при смене оружия с помощью колёсика мышки или кнопки Q, он работает некорректно. Как это разрешить, смотрите в следующей части.
Еще один интересный и полезный скрипт - скрипт на быструю постройку для инженера. Он сначала сносит постройку, а потом тут же берет её чертёж в руки:

// алиасы для собственно быстрой постройки // используются команды build и destroy alias sentry "destroy 2 0; build 2 0" // построить турель alias dispenser "destroy 0 0; build 0 0" // построить раздатчик alias teleentr "destroy 1 0; build 1 0" // построить вход телепорта alias teleexit "destroy 1 1; build 1 1" // построить выход телепорта // назначение алиасов к кнопкам f1-f4 bind f1 sentry bind f2 dispenser bind f3 teleentr build f4 teleexit

Еще один полезный скрипт для инженера, использующего Озарение. Он позволяет мгновенно телепортироваться на базу или к выходу телепорта, не открывая специальное меню:

// задаём функциональные алиасы // тут используем команду eureka_telepport, отвечающую за телепортацию Озарения alias gotobase "eureka_teleport 0" alias gotoexit "eureka_teleport 1" // назначаем их к кнопкам bind f10 gotobase bind f11 gotoexit

Очень полезный скрипт для быстрой смены наборов снаряжения с помощью клавиш:

// делаем алиасы для смены снаряжения // используется команда load_itempreset, переключающая наборы А-Г, которые можно поменять в снаряжении текущего класса (клавиша M в игре) alias loadoutA "load_itempreset 0" alias loadoutB "load_itempreset 1" alias loadoutC "load_itempreset 2" alias loadoutD "load_itempreset 3" // задаём кнопкам num1-num4 функции алиасов bind kp_end loadoutA bind kp_downarrow loadoutB bind kp_pgdn loadoutC bind kp_rightarrow loadoutD

Для быстрого доступа к насмешкам без вызова их меню, можно использовать команду taunt с аргументом, либо команду taunt_by_name:

alias laugh "taunt 1" // сработает насмешка Злорадство, но только в том случае, если она выставлена в первый слот в меню насмешек, номера слотов можете посмотреть ниже alias relax "taunt_by_name "Taunt: Rancho Relaxo"" // сработает насмешка Ранчо Релаксо, но только в том случае, если она у вас есть, экипирована в меню насмешек и вы играете за инженера // а теперь назначим данные алиасы к кнопкам: bind l laugh bind p relax

Скрипт для быстрого включения убер-заряда медика по нажатию на кнопку. Если в руках не лечебная пушка, то быстрое нажатие заставит медика взять её, а удержание - включить убер-заряд. Тут использованы команды переключения оружия (slotX) и альтернативной атаки (+attack2), активирующей убер-заряд. Удерживать кнопку надо потому, что смена оружия на лечебную пушку занимает пол секунды. Сам скрипт:

alias +quickuber "slot2; +attack2;voicemenu 0 0; autocall_initial" alias -quickuber "-attack2" bind mouse2 +quickuber

Скрипт, очень похожий на предыдущий, он работает по такому же принципу. Этот скрипт для пулемётчика, при удержании кнопки он выбросит на землю свой бутерброд, если он экипирован:

alias +quicksandwich "slot2; +attack2" alias -quicksandwich "-attack2" bind k "+quicksandwich"

Часть 7. Основные скриптовые конструкции

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

// ради примера, давайте сделаем переключатель, который при срабатывании будет последовательно выводить 1, 2 и 3 в консоль, а потом начинать цикл заново alias state1 "echo 1; alias togglestate state2" // первое состояние переключателя, он выполняет свою функцию и переназначает контрольный алиас на второе состояние alias state2 "echo 2; alias togglestate state3" // по аналогии с первым alias state3 "echo 3; alias togglestate state1" // последний алиас замыкает цикл и назначает следующим первый alias togglestate state1 // теперь осталось назначить тот самый контрольный алиас, при вызове которого будут производится переключения между тремя его состояниями bind k togglestate

Вот такая вот незамысловатая конструкция, очень похожая на команду toggle. Однако эта конструкция-переключатель позволяет работать не только с переменными, а и с аргументами, или даже переключаться между разными, а также может содержать неограниченное количество элементов.
С помощью команды alias также можно создавать бинды не для одной клавиши, а для их сочетания. Работает это следующим так: при нажатии определённой кнопки другая кнопка получает новую функцию, а при отпускании - возвращается к старой. В скрипте задействованы +/- алиасы. При нажатии на K в консоль будет выведено сообщение "Hello!", а при использовании сочетания клавиш Shift+K - "Hello, World!"

alias msg msg1 alias msg1 "echo Hello!" alias msg2 "echo Hello, World!" alias +togglemsg "alias msg msg2" alias -togglemsg "alias msg msg1" bind k msg bind shift +togglemsg

Следующая важная конструкция - замкнутый цикл, использующий wait. В отличии от первого цикла-переключателя, этот цикл не требует постоянного вызова алиаса, он работает сам по себе от запуска до отмены. Вот как он работает:

// для начала зададим все элементы последовательности этого цикла alias loop1 "echo 1" alias loop2 "echo 2" alias loop3 "echo 3" alias loop "loop1; wait 66; loop 2; wait 66; loop3; wait 66; reloop" // теперь объединяем их в один алиас, вставляя между ними wait, а в конце - перенаправление в начало цикла alias startloop "alias reloop loop" // алиас, позволяющий нам начать цикл alias breakloop "alias reloop " "" // алиас для прерывания цикла, который перенаправит его конец на пустую команду bind l "startloop; loop" // а теперь задаём необходимые бинды для начала и прерывания цикла bind k

Хотя данная конструкция может быть очень полезной, как уже упоминалось ранее, wait отключён на большинстве серверов. А использование замкнутого цикла с wait на сервере, где он отключён, может спровоцировать зависание и краш игры. Будьте осторожны с такими циклами при смене серверов - они продолжают работать даже после отключения от сервера со включённым wait, а если подключится к серверу, где он выключен, ваша игра зависнет, поэтому цикл нужно каждый раз вручную обрывать.
Полезный скрипт, решающий одну из проблем движка - при одновременном нажатии A и D ваш персонаж останавливается. С использованием множества +/- алиасов получается вот такой скрипт с двумя буфферными алиасами, отменяющими текущее боковое передвижение и начинающие новые:

bind w +mfwd bind s +mback bind a +mleft bind d +mright alias +mfwd "-back;+forward;alias checkfwd +forward" alias +mback "-forward;+back;alias checkback +back" alias +mleft "-moveright;+moveleft;alias checkleft +moveleft" alias +mright "-moveleft;+moveright;alias checkright +moveright" alias -mfwd "-forward;checkback;alias checkfwd none" alias -mback "-back;checkfwd;alias checkback none" alias -mleft "-moveleft;checkright;alias checkleft none" alias -mright "-moveright;checkleft;alias checkright none" alias checkfwd none alias checkback none alias checkleft none alias checkright none alias none ""

Часть 8. Примеры готовых скриптов

А теперь примеры готовых скриптов. Советую завести для их просмотра отдельный файл, скажем, test.cfg и вставлять туда нужные скрипты по очереди, если хотите увидеть, как они работают. Делать это лучше всего на локальном сервере, который можно создать через главное меню, я для этого предпочитаю карту itemtest, поскольку она совсем небольшая и быстро загружется.
Весьма полезный пример применения переключателя - скрипт для переключения голосового чата в игре.Он позволяет нажимать кнопку V для включения и выключения голосового чата, а не держать её пока говорите. Скрипт основан на том принципе, что команды с «+» или «-» изменяют своё значение при отпускании клавиши, если назначены напрямую. А если ввести команду вручную, скажем, +forward, то для её отмены потребуется так же точно ввести -fowrard. Сам скрипт:

alias enablevoice "+voicereocrd; alias togglevoice disablevoice" alias disablevoice "-voicerecord; alias togglevoice enablevoice" alias togglevoice enablevoice bind v togglevoice

А теперь давайте рассмотрим интересное практическое применение wait цикла - генератор случайных чисел, в данном случае - виртуальная игральная кость:

alias dice1 "alias dice "echo "" alias dice2 "alias dice "echo "" alias dice3 "alias dice "echo "" alias dice4 "alias dice "echo "" alias dice5 "alias dice "echo "" alias dice6 "alias dice "echo "" alias diceloop "dice1; wait 5; dice2; wait 5; dice3; wait 5; dice4; wait 5; dice6; wait 5; dicereloop" alias dicereloop diceloop diceloop bind k dice // далее следует проверка того, включён ли wait на сервере, прежде чем запускать цикл alias waitTester "alias waitTest waitPositive; wait; waitTest" alias wait "alias waitTest waitNegative" alias waitPositive "echo Dice script loaded!; diceloop; bind k dice" // если wait работает, то тут начинаем цикл и выставляем сам бинд alias waitNegative "Unable to load dice script - wait is disabled on this server!" waitTester alias stopdiceloop "alias dicereloop " "; unbind k" // этот алиас позволяет остановить цикл, но чтоб начать его опять, нужно перезагрузить конфиг, содержащий скрипт

В результате по нажатию K мы будем получать разные значения от 1 до 6, как и на игральной кости. Однако такой скрипт нельзя назвать полноценным генератором случайных чисел, поскольку результат его работы хоть и сложно, но можно предугадать. Такую же конструкцию можно использовать и для отправки случайного сообщения в чат по нажатию кнопки

Скрипт для постоянного приседания в прыжке, может быть полезен для запрыгивания на некоторые предметы, а также делает попадание в вас немного сложнее и облегчает жизнь при простых прыжках на взрывчатке для подрывника и солдата. Однако если вы собрались прыгать с использованием двух или более ракет или липучек, то советую удалить этот скрипт, поскольку тогда нужно держать приседание на весь прыжок, а не только при отрыве от земли. Скрипт объединяет команды для прыжка и приседания (+jump и +duck) в один алиас, и при этом не даст скрипту поломаться, если нажать на пробел слишком быстро:

alias +rj "spec_mode; -duck; +cr; alias checkrj +cr" alias -rj "-cr; checkduck; alias checkrj none" alias +crouch "-cr; +duck; alias checkduck +duck" alias -crouch "-duck; checkrj; alias checkduck none" alias checkduck none alias checkrj none alias +cr "+jump; +duck" alias -cr "-duck; -jump" alias none "" bind space +rj bind ctrl +crouch bind shift +jump

Скрипт, похожий на предыдущий, и в этот раз сделан специально для прыжков на ракетах солдата. Для подрывника он не подойдёт, поскольку липучку нужно заранее кинуть на землю и подождать её активации. Работает по тому же принципу, но в этот раз мы добавляем +attack:

alias +rocketjump "+jump; +duck; +attack" alias -rocketjump "-jump; -attack; -duck" bind mouse2 "+rocketjump"

Другой полезный скрипт - быстрая запись игрового процесса в.dem файл, который потом можно просмотреть. Запись будет начата по нажатию на заданную кнопку и закончится при нажатии на неё же. Готовую запись можно найти в папке tf/demos, а просмотреть в игре с помощью команды demoui, вызывающей управление записью. Больше о записи.dem файлов можете прочитать . Скрипт является простейшим переключателем, с работой которого мы ознакомились в начале этой части:

alias tgrecord_on "ds_record; alias tgrecord tgrecord_off" alias tgrecord_off "ds_stop; alias tgrecord tgrecord_on" alias tgrecord tgrecord_on bind f10 tgrecord

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

// для начала задаём настройки для каждого слота alias cross1 "r_drawviewmodel 0;viewmodel_fov 0;cl_crosshair_red 0;cl_crosshair_green 255;cl_crosshair_blue 0;cl_crosshair_scale 30;cl_crosshair_file crosshair2" alias cross2 "r_drawviewmodel 0;viewmodel_fov 0;cl_crosshair_red 0;cl_crosshair_green 255;cl_crosshair_blue 0;cl_crosshair_scale 10;cl_crosshair_file crosshair3" alias cross3 "r_drawviewmodel 1;viewmodel_fov 90;cl_crosshair_red 0;cl_crosshair_green 255;cl_crosshair_blue 0;cl_crosshair_scale 10;cl_crosshair_file crosshair5" // alias wep1 "primary" alias wep2 "second" alias wep3 "melee" // логика для каждого слота, запоминающая предыдущее оружие при переключении // в вызове предыдущего оружия задействован особый цикл с ответвлениями, где у нас есть вариант выбора следующего элемента // а прокрутка колёсиком - обычный замкнутый alias-переключатель, о котором мы говорили в предыдущей части // всё это вместе с заданными выше настройками собрано в 3 алиаса, которые потом можно использовать alias primary "slot1;alias wep2 switch3;alias wep3 switch5;alias downbind switch3;alias upbind switch5;cross1" alias second "slot2;alias wep1 switch1;alias wep3 switch6;alias downbind switch6;alias upbind switch1;cross2" alias melee "slot3;alias wep1 switch2;alias wep2 switch4;alias downbind switch2;alias upbind switch4;cross3" // задача этой части скрипта - переключение на предыдущее оружие // поскольку слотов для оружия 3, с каждого можно переключиться на два других, имеем 6 возможных переключателей (1->2, 1->3, 2->1, 2->3, 3->1, 3->2) alias qswitch "switch3" alias switch1 "primary;alias qswitch switch3" alias switch2 "primary;alias qswitch switch5" alias switch3 "second;alias qswitch switch1" alias switch4 "second;alias qswitch switch6" alias switch5 "melee;alias qswitch switch2" alias switch6 "melee;alias qswitch switch4" // ну и последняя часть - забиндить это всё на кнопки - bind 1 "wep1" bind 2 "wep2" bind 3 "wep3" bind q "qswitch" bind mwheeldown "downbind" bind mwheelup "upbind"

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

Часть 9. Использование звуков, субтитров и работа с HUD

Посредством консольных команд можно взаимодействовать не только с консолью и чатом игры.
В первую очередь, существует команда для проигрывания звуков (.wav или.mp3):

play [путь к звуку] // использование очень похоже на команду exec, нужно указать путь к звуку из папки sound, указание расширения файла не обязательно

Пример:

play buttons/button14.wav

Узнать путь к звуковому файлу можно с использованием программы путём открытия файла tf2_sound_misc_dir.vpk в корне папки /tf. Там вы найдёте почти все.wav звуки
Другой интересный способ их применения - использование в скриптах субтитров. Система субтитров всё время существовала в движке для дублирования фраз персонажей и других звуков. Однако благодаря команде для отладки субтитров мы имеем возможность вызывать их тогда, когда нам нужно:

closecaption 1 // включение субтитров в игре cc_emit [звук или название] // принудительно вызывает определённый субтитр на экран по его названию

Однако прежде чем использовать субтитры в игре, их нужно создать и пропустить через специальный компилятор.
Для этого:
Ну и напоследок, несколько команд для работы с пользовательским интерфейсом (HUD):

hud_reloadscheme // перезапускает худ, полезно в случаях если какие-то его части перестают работать gamemenucommand [команда] // выполняет команды главного меню (открыть настройки, браузер серверов и т. д.), их можно найти в testhudanim [анимация] // выполнение анимации худа из /scrpts/hudanimations_tf.txt

Часть 10. Текстовый интерфейс с использованием developer 1

Текстовый интерфейс с использованием developer 1
Движок Source содержит множество команд и инструментов для отладки, используемых разработчиками и создателями модов. Одной из таких команд является developer 1. Она включает режим разработчика, который добавляет дополнительную текстовую информацию, и, что самое главное, выводит последние несколько строчек из консоли на экран во время игры. При этом с помощью ещё нескольких переменных можно настраивать то, сколько строчек выводить на экран и сколько они там будут оставаться:
contimes - сколько строчек из консоли отображать на экране
con_notifytime - сколько секунд последняя команда будет оставаться наверху лога, перед тем, как будет показана следующая строка
В результате путём написания скрипта можно выводить любой текст на экран, а добавив этому тексту кнопки для взаимодействия с ним, можно создать простейший текстовый интерфейс в виде меню с выбором различных опций. Поскольку на клавиатуре есть удобный numpad блок, на котором нет жизненно важных игровых биндов, именно его удобнее всего использовать для ввода и взаимодействия с текстовым меню. Но это далеко не всё - можно сделать меню не просто в виде статического текста, а сделать несколько страниц с разными опциями, либо даже анимировать некоторые его пункты при взаимодействии с ними. Единственный недостаток такого меню в том, что его нельзя вызвать в главном меню игры. Впечатлены, на что способен скриптовый язык движка Source? Теперь давайте поймём, как это работает. Создадим отдельную папку в tf/cfg для нашего меню, скажем, menu. В ней делаем несколько файлов, - menu.cfg, numbinds.cfg, cheats.cfg.
Их функции будут описаны далее. Содержание menu.cfg:

// в начале помещаем логику для загрузки и закрытия меню alias btn "play buttons/button14.wav" // звук нажатия на кнопку alias launchmenu "exec menu/menu; play buttons/button17.wav" // загрузка самого меню alias unbindnumpad "unbind KP_INS; unbind KP_END; unbind KP_DOWNARROW; unbind KP_PGDN; unbind KP_LEFTARROW; unbind KP_5; unbind "KP_RIGHTARROW"; unbind "KP_HOME"; unbind "KP_UPARROW"; unbind "KP_PGUP"; unbind KP_ENTER" // снятие биндов с нумпада при закрытии меню alias resetnumbinds "exec menu/numbinds" // загрузка биндов для нумпада по умолчанию после закрытия, их нужно поместить в menu/numbinds.cfg alias setlaunchkey "bind KP_DEL launchmenu" // выставляем кнопку для повторного открытия меню после того, как мы его закрыли alias exitmenu "clear; unbindnumpad; setlaunchkey; resetnumbinds; developer 0; play buttons/button19.wav" // собираем всю процедуру выхода из меню в один алиас // теперь можем приступить к созданию логической части самого меню alias animatemenu "exec menu/vismenu" // этот алиас загружает видимую часть меню, он пригодится нам при создании анимированного пункта меню // анимированные пункты вовсе не обязательны, но я добавлю сюда один ради примера // главная составляющая таких анимаций - логические переключатели, которые мы научились делать ранее // давайте же сделаем первый пункт анимированным, для этого сначала сделаем алиасы с функцией для каждого возможного состояния, пускай их будет 3 alias netgraphmode1_func "net_graph 0" alias netgraphmode2_func "net_graph 1" alias netgraphmode3_func" net_graph 4" // теперь делаем по строке для отображения в меню для каждого состояния alias netgraphmode1_echo "echo - Disable net_graph" alias netgraphmode2_echo "echo - Enable net_graph" alias netgraphmode3_echo "echo - Enable advanced net_graph" // теперь начинаем делать зацикленный переключатель, меняющий значение нужного пункта, при этом пункт меню должен отображать не текущее значение переменной, а следующее, которое мы получим при нажатии // каждый алиас должен вызвать свою _func команду, поменять визуальный пункт меню на следующий, обновить меню, и передать управление следующему в списке алиасу, а последний - вернуться к первому alias netgraphmode1 "netgraphmode1_func; alias netgraphmode_echo netgraphmode2_echo; animatemenu; alias netgraphmode netgraphmode2" alias netgraphmode2 "netgraphmode2_func; alias netgraphmode_echo netgraphmode3_echo; animatemenu; alias netgraphmode netgraphmode3" alias netgraphmode3 "netgraphmode3_func; alias netgraphmode_echo netgraphmode1_echo; animatemenu; alias netgraphmode netgraphmode1" // из-за следующих двух строчек нам пришлось вынести часть меню, которую мы будем видеть, в отдельный файл, поскольку иначе бы при перезагрузке этого файла значения цикла выставлялись бы на стандартные alias netgraphmode_echo netgraphmode1_echo alias netgraphmode netgraphmode1 // на этом логическая часть анимации закончена, можем приступать к остальным пунктам меню alias op1 "netgraphmode; btn" alias op2 "kill; btn" alias op3 "toggle sv_cheats 0 1; btn" alias op4 "toggle r_drawviewmodel 0 1; btn" alias op5 "hud_reloadscheme; record fix; stop; snd_restart; btn" alias op6 "exec autoexec; btn" alias op7 "exec menu/cheats; btn" // это - ссылка на подпункт меню alias op8 "demoui; btn" alias op9 "toggle cl_showfps 0 1; btn" // теперь осталось забиндить наш нумпад bind KP_END "op1" bind KP_DOWNARROW "op2" bind KP_PGDN "op3" bind KP_LEFTARROW "op4" bind KP_5 "op5" bind KP_RIGHTARROW "op6" bind KP_HOME "op7" bind KP_UPARROW "op8" bind KP_PGUP "op9" bind KP_DEL "exitmenu" // запускаем видимую часть меню exec menu/vismenu

Теперь переходим к файлу vismenu.cfg, отвечающему за отображение самого интерфейса меню на экране:

// данный набор команд жизненно важен для отображения нашего меню // launching visual part clear contimes 600 con_notifytime 600 developer 1 con_filter_enable 0 // после этого уже следует именно то, что мы будем видеть: echo "" // перед и после самого меню нужно добавить пустые строки echo "" // перед - для того, чтоб меню было не в самом верху, а где-то посредине экрана echo "" // после - чтоб лог из консоли, следующий после загрузки меню, не попадал на экран echo "" // однако это всё-таки иногда будет происходить, в таком случае нужно перезапустить меню echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" // само меню нужно писать латинскими буквами, так как консоль не поддерживает кириллицу echo ____________________________________ echo "" echo ============M=E=N=U================ echo ____________________________________ echo "" netgraphmode_echo // этот пункт меню анимированный, поэтому заменяем его соответствующим алиасом echo - Suicide echo - Toggle sv_cheats echo - Toggle viewmodel echo - Fix game glitches echo - Reload autoexec echo - Cheats echo - Open demo playback echo - Toggle FPS meter echo - Exit echo ____________________________________ echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo "" echo ""


Часть 11. Создание и использование сторонних генераторов скриптов

Методы создания скриптов, описанные в этой части, не приведут к VAC блокировке, хотя и дают игрокам использовать более широкие скриптовые возможности, чем те, которые заложены движком игры. Речь пойдёт о сторонних генераторах скриптов. Файлы конфигов движка Source можно изменять во время работы игры. Это позволяет создать программы-редакторы этих файлов, а так же различные преобразователи текста в скрипты. Одной из самых популярных таких программ является SRC Repair, содержащий пак конфигов с настройками графики и позволяющий их менять и редактировать.
Однако можно не ограничиваться готовыми программами и написать собственную. Поскольку скриптовый язык Source очень прост, даже новичку не составит труда сделать какое-либо приложение, работающее со скриптами. То, как именно их создавать, в этом руководстве описано не будет, поскольку существует бесчисленное множество языков программирования, позволяющих это делать, но ниже будут приведены простейшие примеры того, что можно сделать.
В первую очередь, мы можем создавать различные показатели в реальном времени, например вывод системного времени в консоль по команде. Стоит отметить, что такие программы будут лишены возможности обратной связи с пользователем, поскольку скриптовые команды выполняются в движке игры, а результат их выполнения скрыт от сторонних программ.
Пример программы для выведения времени в консоль:

Другим интересным способом расширить возможности движка - написание скриптов с помощью скриптового языка AutoHotKey, сокращенно AHK. AHK включает в себя компилятор, программу для получения информации о положении курсора и справку. Этот достаточно простой (но при этом более сложный чем скриптинг Source) скриптовый язык позволяет имитировать нажатия клавиш и выполнение различных действий пользователем. Это позволяет, к примеру, создать скрипт для быстрого крафта вещей в TF2 или же обхода команды wait на серверах, где она выключена. Пример работы скрипта для быстрого крафта вещей:
Думаю, каждый, будь то новичок или человек, отлично разобравшийся в написании скриптов смог почерпнуть кое-что для себя. - официальная англоязычная вики о движке Source и множестве вещей, связанных с ним.

  • - моя собственная разработка, сборник скриптов для медика с текстовым интерфейсом.
  • Множество других маленьких, но полезных скриптов с пояснением принципа их работы можете найти в моём руководстве, большинство - в части номер 8.
  • Отдельная благодарность:

    Поддержка и редактирование руководства.
    - помощь с некоторой информацией и разработка внутриигрового текстового интерфейса.
    - пара полезных скриптов.

    Опытные пользователи всегда пытаются упростить работу с ПК и наверняка захотят узнать, как сделать скрипт на компьютере и что это такое.

    Что такое пакетный файл

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

    Следовательно, это документ сценария, используемый для автоматизации задач в операционных системах DOS, Windows и OS / 2.

    Многим пользователям известен термин интерпретатор командной строки, известный как CMD или командная строка. Он принимает различные директивы в виде ввода с клавиатуры и обрабатывает их.

    Пакетный документ играет роль посредника между пользователями и командной строкой. Элементы с форматом bat, cmd и btm содержат команды CMD. Во время запуска такого документа, директивы, записанные в нем, выполняются в интерпретаторе в последовательном порядке. В противном случае их нужно будет вводить вручную, построчно.

    Зачем нужен скрипт

    Скрипт экономит время пользователя. В противном случае нужно будет вводить одни и те же директивы снова и снова.

    Например, можно запланировать выключение операционной системы через определенное время с помощью CMD. Когда будет создан нужный документ, достаточно будет лишь дважды щелкнуть по нему. Он запустится, и система выключится по истечении установленного времени.

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

    При создании пакетного элемента также можно включить циклы (for), условные операторы (if), управляющие операторы (go to) и т. д. Кроме того, есть возможность запустить один документ из другого с помощью функции call.

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

    Полезно будет знать некоторые bat директивы, которые помогут создать базовые пакетные файлы:

    • Title используетсядляизменениятекстазаголовка, отображаемого в верхней части окна CMD.
    • Echo – отображает входной ряд как вывод. Желательно использовать опцию ON или OFF для ECHO, чтобы включить или выключить echo. Эта функция позволяет выводить на экране те директивы, которые выполняются.
    • Pause используется для остановки выполнения скрипта.
    • Exit – функция для выхода из интерпретатора.
    • Cls применяется для очистки экрана от всех команд.
    • :: – добавить комментарий. Командная строка игнорирует любой текст, написанный как комментарий.

    Выше перечислено внутренние директивы, которые поставляются с ОС. Пакетный скрипт также может поддерживать внешние команды. Они добавляются при установке нового программного обеспечения в системе. Например, если на компьютере установлен Google Chrome, можно воспользоваться функцией «chrome» в окне CMD.

    Все эти команды могут помочь создать простой bat-файл. Есть возможность улучшить свой скрипт, изучив больше функций из списка CMD.

    Создание bat-скрипта в Windows

    В Windows можно создать командный файл, используя шаги ниже или шаги, упомянутые в разделе командной строки MS-DOS. Если удобно использовать стандартные программы, можно воспользоваться любым текстовым редактором (например, Блокнот или WordPad) для создания пакетных документов.

    Для того чтобы создать скрипт с расширением bat в блокноте, стоит выполнить следующие действия:

    1. Щелкнуть Пуск.
    2. Ввести Блокнот в поле «Выполнить» и нажмите Enter. Также можно использовать любой аналогичный редактор текстовых элементов, например Notepad ++.
    3. Когда Блокнот откроется, ввести следующие строчки или скопировать и вставить их.
    4. Щелкнуть «Файл», затем «Сохранить» и перейти в папку, в которой нужно сохранить. В качестве имени можно ввести test.bat. Если в версии операционной системы есть параметр «Сохранить как», выбрать «Все файлы», в противном случае он сохраняется как текстовый. Выполнив эти шаги, нажать кнопку «Сохранить» и выйти из блокнота.
    5. Чтобы запустить документ, следует дважды щелкнуть на него. Окно CMD откроется автоматически с желаемым выходом. После завершения выполнения, окно автоматически закрывается.
    6. Можно попробовать добавить функцию echo on в шаг 2, чтобы посмотреть, что происходит на каждой строчке.

    Шаги для создания скриптов практически одинаковы, независимо от того, установлена версия Windows 10, 8.1, 7 или даже XP.

    Стоит обратить внимание, что можно использовать расширение cmd вместо расширения bat.

    Создание bat-файла в MS-DOS

    Чтобы создать пакетный элемент в MS-DOS или командной строке Windows, важно выполнить следующие действия:


    Полезно обратить внимание: если есть необходимость добавить больше строчек в пакетный элемент, достаточно ввести edit test.bat, чтобы открыть его для редактирования. Некоторые версии MS-DOS и загрузочных дискет могут не иметь директивы редактирования.

    Если это так, нужно либо ввести edit.com, либо использовать функцию copy con.

    toggle - простейший скрипт-выключатель.

    toggle - это команда, с помощью которой можно создать самый простой скрипт-выключатель в игре.

    Она работает только с переменными, имеющими диапазон значений 0 и 1 , т.е. с теми переменными, которые можно либо включить, либо выключить.
    Также она работает с командами. Например, по умолчанию она используется для команд menu и console , это выглядит следующим образом:


    • bind ESCAPE "toggle menu " и bind ` "toggle console ".
    Создается такой скрипт очень просто: перед любой переменной, имеющей диапазон значений 0 и 1 необходимо добавить toggle .

    Например, если Вы хотите забиндить на клавишу включение/выключение вида оружия (cg_drawGun ), то это будет выглядеть так:

    И, в зависимости от установленного значения cg_drawGun в Вашем конфиге, вид оружия при каждом нажатии клавиши X будет либо включаться/выключаться, либо выключаться/включаться.

    Главный недостаток команды toggle состоит в том, что сфера ее применения очень узкая, и с ее помощью нельзя создать сложные скрипты. Для этого существуют другие команды, речь о которых пойдет ниже.

    cycle - простейший скрипт для циклического переключения.

    cycle - это команда, с помощью которой можно создать простой скрипт-переключатель в игре.

    Эта команда работает с переменными, имеющими обширный диапазон значений, например, cg_FOV - изменение угла обзора, в котором значения могут варьироваться от 90 до 120 .

    Создается такой скрипт сложнее, чем toggle , но все-таки тоже очень просто:

    • В начале, к выбранной Вами переменной (например, cg_FOV ) добавляется команда cycle .
      Получается так: "cycle cg_FOV "
    • Затем, после переменной добавляется диапазон значений, в пределах которых будет производиться переключение.
      В нашем примере будет выбран диапазон от 90 до 120 .
      Получается так: "cycle cg_FOV 90 120 ".
    • После этого добавляется значение, обозначающее шаг , с которым будет делаться переключение.
      В нашем примере будет выбрано значение 10 .
      Получается так: "cycle cg_FOV 90 120 10 ".

      Т.е. при каждом нажатии бинда с таким скриптом буде выполняться переключение cycle cg_FOV
      между значениями 90 120 с шагом 10 . Соответственно, будут циклично переключаться значения 90 , 100 , 110 , 120 .


    Тем не менее, команда cycle , также как и toggle , не позволяет создавать сложные скрипты.
    Для этого существует команда vstr , которая иногда работает в паре с командой wait .

    +vstr - более сложный скрипт-переключатель, по принципу нажал/отжал .

    Vstr - это команда, с помощью которой можно создать как простой скрипт (наподобие скриптов с командами toggle и cycle ), так и сложный скрипт, в котором будут выполняться сразу два действия.

    Особенность этой команды в том, что скрипт с ее использованием будет работать по принципу нажал/отжал .

    Т.е., пока Вы держите клавишу зажатой - выполняется команда 1 , когда Вы ее отпускаете - выполняется команда 2 .

    Например, с помощью этой команды можно создать скрипт для изменения угла обзора - cg_FOV , чувствительности мыши - sensitivity и размера прицела - cg_crosshairSize .
    Такой скрипт позволит менять в игре дистанцию для стрельбы на близкую и дальнюю (close и long).


    • Далее, мы напишем выполнение этих команд, поставив перед ними команду set - "выполнить".
      Получается так:

      set close
      set long


    • Далее, мы должны сделать так, что бы после выполнения команды close очередь переключалась бы на команду long и, соответственно, после выполнения команды long очередь переключалась бы на команду close .
      Т.е., чтобы команды выполнялись циклично.

      Делается это, как раз, с помощью команды +vstr .
      Получается так:

      "+vstr close long "

    • set close "cg_FOV 90 ; sensitivity 5 ; cg_crosshairSize 35 "
      set long "cg_FOV 120 ; sensitivity 3 ; cg_crosshairSize 45 "
      "+vstr close long "


    Также Вы можете создать два отдельных файла, указать в них свои настройки и прописать их выполнение в скрипте.

    Такой вариант является более предпочтительным, если в Вашем скрипте содержится много переменных и команд.

    В данном примере будут созданы файлы close.cfg и long.cfg .
    В них мы поместим переменные, значения которых будут изменяться.


    • В файл close.cfg мы поместим следующие значения переменных:
      cg_FOV 90
      sensitivity 5
      cg_crosshairSize 35

    • А в файл long.cfg , соотвественно, мы поместим другие значения переменных:
      cg_FOV 120
      sensitivity 3
      cg_crosshairSize 45
    Теперь, в свою очередь, файлы close.cfg и long.cfg мы поместим в папку etmain или в любую другую, созданную Вами подпапку.

    Примечание: подробнее об этом смотрите в разделе Создание конфига -> autoexec.cfg .

    А в скрипте пропишем выполнение этих файлов, выглядит это так:

    vstr - более сложный скрипт-переключатель, по принципу нажал/нажал еще раз .

    vstr - это команда, с помощью которой можно создать как простой скрипт (наподобие скриптов с командами toggle и cycle ), так и сложный скрипт, в котором будут выполняться сразу несколько действий.

    Также, в скрипте с использованием команды vstr можно прописать выполнения более чем двух команд, чего нельзя сделать при помощи команды +vstr .

    В отличии от команды +vstr , скрипт с ее использованием будет работать не по принципу нажал/отжал , а по принципу нажал/нажал еще раз .

    Т.е. при первом нажатии клавиши будет выполняться команда 1 , при втором - команда 2 , при третьем - 3 и т.д., в зависимости от количества команд в скрипте.

    Например, можно сделать скрипт изменения угла обзора для трех дистанций: close ,middle и long .

    Создается такой скрипт следующим образом:


    • Далее, также как и в примере с +vstr , мы напишем выполнение этих команд, поставив перед ними команду set - "выполнить".
      Получается так:

      set close
      set middle
      set long


    • Далее, мы должны задать цикличность выполнения команд при помощи команды vstr .

      Для начала, необходимо придумать название для команды, которая будет запускать этот цикл.
      В нашем примере - это будет range .

      Теперь пропишем выполнение этой команды после выполнения каждой из команд close , middle и long .
      Выглядит это так:

      set close "cg_FOV 90 ; sensitivity 5 ; cg_crosshairSize 35 ; set range "
      set middle "cg_FOV 105 ; sensitivity 4 ; cg_crosshairSize 40 ; set range "
      set long "cg_FOV 120 ; sensitivity 3 ; cg_crosshairSize 45 ; set range "

    • Теперь добавим команду vstr и названия команд, которые будут чередоваться при помощи команды vstr .
      Получается так:


    • Теперь пропишем: с какой команды должна начинать выполнять чередование переключений команда range при помощи команды vstr .

      Выглядит это так:

      set range "vstr close "

      Т.е. чередование команд будет начинаться с команды close .

      В итоге, скрипт выглядит так:

      set close "cg_FOV 90 ; sensitivity 5 ; cg_crosshairSize 35 ; set range vstr middle "
      set middle "cg_FOV 105 ; sensitivity 4 ; cg_crosshairSize 40 ; set range vstr long "
      set long "cg_FOV 120 ; sensitivity 3 ; cg_crosshairSize 45 ; set range vstr close "
      set range "vstr close "

    • Теперь осталось только привязать команду range к бинду и наш скрипт готов.

      Выглядит он следующим образом:

      set close "cg_FOV 90 ; sensitivity 5 ; cg_crosshairSize 35 ; set range vstr middle "
      set middle "cg_FOV 105 ; sensitivity 4 ; cg_crosshairSize 40 ; set range vstr long "
      set long "cg_FOV 120 ; sensitivity 3 ; cg_crosshairSize 45 ; set range vstr close "
      set range "vstr close "
      bind X "vstr range "

      wait - задержка выполнения скрипта.

      wait - это команда, приостанавливающая выполнение скрипта.

      Некоторые скрипты требуют промежутков времени между выполнениями своих команд. Команда wait устанавливает такой промежуток времени.

      Единицей значения wait является FPS/2 . Т.е. задержка, устанавливаемая этой командой исчисляется в FPS , поделенных на 2 .

      Другими словами, команда "wait 76 " приостановит выполнение скрипта на 38 кадров.

      Примечание: 20 FPS примерно равно 1 секунде.

      Использование этой команды, например, необходимо для создания скрипта автоматического бросания страйка при выборе weaponbank 5 (маркера), с последующим переключением на weaponbank 3 .

      Выглядит такой скрипт следующим образом:

      Поскольку между выбором маркера (weaponbank 5 ) и его выбрасыванием (+ attack ) в игре проходит определенный промежуток времени, то его необходимо задать в скрипте, иначе команда "бросить" (+ attack ) выполнится раньше, чем она станет доступна для выполнения в игре и, соответственно, скрипт не сработает.

      Примечание: в каждом отдельном случае значение wait для скрипта необходимо подбирать опытным путем, пытаясь найти минимальное значение, при котором скрипт будет работать.

      echo - отображение на экране игрока информационных сообщений.

      echo - это команда, с помощью которой можно отображать в окне всплывающих сообщений (numpopap ) текст, написанный Вами.

      Эта команда используется в скриптах и биндах для того, чтобы можно было наглядно видеть какой скрипт или действие выполняются.

      Например, мы можем использовать эту команду в нашем скрипте для изменения угла обзора.
      Берем скрипт:



      • set long "exec long.cfg "
      Добавляем к командам close и long команду echo :

      • set close "exec close.cfg ; echo "
        set long "exec long.cfg ; echo "
        bind X "+vstr close long "
      Теперь добавляем текст, который будет сообщать о том, что угол обзора переключен либо на ближнюю, либо на дальнюю дистанцию:

      • set close "exec close.cfg ; echo cg_FOV 120 "
        set long "exec long.cfg ; echo cg_FOV 90 "
        bind X "+vstr close long "
      Далее можно раскрасить текст, используя индекс ^ и любой символ, обозначающий цвет:
      Получается так:

      • set close "exec close.cfg ; echo ^3cg ^0_ ^3FOV ^1120 "
        set long "exec long.cfg ; echo ^2cg ^0_ ^2FOV ^190 "
        bind X "+vstr close long "
      В итоге, когда мы переключаем команды скрипта, на экран выводятся сообщения об этом:

      say - сообщение информации другим игрокам.

      say - это команда, при помощи которой можно сказать что-либо другим игрокам.

      Эта команда имеет 3 вариации:

      В скриптах и биндах эта команда используется для того, чтобы сообщить другим игрокам (обычно из своей команды) важную информацию.

      Например: изменение места респауна, смену класса игрока, сообщение времени респавна соперника и т.д.

      Используется эта команда также как и команда echo :

      • В начале к выбранному Вами бинду, действию или команде добавляется команда say или ее вариации.
      • Затем добавляется и раскрашивается текст.
      • В итоге, когда мы переключаем команды скрипта, в чате отображаются указанные Вами сообщения, которые видят или все игроки, или только игроки Вашей команды, в зависимости от выбранного варианта команды say .

      play - звук переключения команд скрипта.

      play - это команда, при помощи которой можно проигрывать определенный звук.

      В скриптах и биндах эта команда используется для того, чтобы при переключении команд скрипта, проигрывался звук переключения (короткий щелчок).

      Есть несколько видов звуков, которые используются в скриптах:

      • sound/menu/select
      • sound/menu/filter
      • sound/misc/am_pkup
      Все эти звуки являются простыми, короткими звуками переключения, и соответсвенно, прописав проигрывание такого звука к Вашему действию, Вы будете слышать, когда оно происходит.

      Например, мы можем добавить такой звук в наш скрипт для изменения угла обзора.
      Берем скрипт:


      • set close "exec close.cfg "
        set long "exec long.cfg "
        bind X "+vstr close long "
      Добавляем команду play к бинду, на который "повешен" скрипт:

      • set close "exec close.cfg "
        set long "exec long.cfg "
        bind X "+vstr close long ; play "
      Добавляем звук, который будет проигрываться, например: sound/menu/select :
      Получается так:

      Теперь, при каждом нажатии бинда с Вашим скриптом, будет проигрываться звук переключения.

      Примечание:
      Cтоит заметить, что Вы можете проиграть таким образом любой звук, когда либо воспроизводимый в игре. Путь к этим звукам: <путь к игре>/etmain/pack0.pk3/ ~sounds
      (pack0.pk3 открывается архиватором (например Winrar"ом), ищется папка sounds)

      Только помните: любое изменение этого архива (косвенное и не косвенное) повлечет за собой нарушение MD5, в следствие чего Вы не сможете играть на серверах.
      Поэтому данная информация носит в себе чисто "информационный характер". Лучше разархивировать и изучать копию.

      Пример: bind MOUSE4 "kill; forcetapout; play sound/player/gib.wav"
      Теперь, киляясь, Вы будете слышать звук гибания.

      Зачем это надо и что это дает? Это дело вкуса и фантазии... Нужно для удобства и комфортабельности. И уверяю Вас, немного подумав, пользу из этого извлечь можно.

      (они же userscript , userJS , юзерскрипты ).

      В этой статье я хочу поведать о том, что такое юзерскрипты, c чем их едят и, главное, как их готовят !

      Что такое юзерскрипты?

      Кратко: юзерскрипт - это программа, написанная на языке JavaScript, хранящаяся на компьютере пользователя и подключаемая браузером на определенных страницах. Юзерскрипт представляет собой файл с расширением .user.js (именно по расширению браузеры понимают, что файл является юзерскриптом), содержащий метаданные и непосредственно javascript-код.

      При подключении к странице юзерскрипт выполняется так же, как и обычные javascript-сценарии.
      У юзерскрипта есть доступ к DOM-дереву страницы, в контексте которой он выполняется.
      В современных браузерах у юзерскрипта есть доступ к localStorage и прочим HTML5 API.

      Юзерскрипты поддерживаются всеми основными современными браузерами (и даже кое-как поддерживаются IE7 и выше ).

      Самый известный портал юзерскриптов - userscripts.org . Тут можно найти хранилище скриптов, инструменты управления своими скриптами на портале и, что не маловажно, отзывчивый форум (всё на английском).

      Немного общей теории

      Самыми распространенными являются скрипты под расширение GreaseMonkey для браузера Firefox .
      Подробную информацию по GreaseMonkey и написанию юзерскриптов под GreaseMonkey можно узнать на http://wiki.greasespot.net .
      Так сложилось исторически, что данный браузер был (и остаётся по сей день) первым, в котором поддержка юзерскриптов была выполнена на высоком уровне.

      Не все скрипты, написанные для GreaseMonkey, могут запускаться в других браузерах. Причина в криворукости том, что во многих скриптах используется GM API - набор javascript-функций, специфичных для GreaseMonkey.

      Однако, проще всего писать юзерскрипты под браузер Google Chrome .
      На это есть ряд причин:

      1. Простым скриптам не нужна поддержка GM API (библиотека, доступная в GreaseMonkey)
      2. Google Chrome, в отличие от Firefox+GreaseMonkey, имеет отличнейший дебаггер.
      3. Сообщения об ошибках юзерскрипта в Firefox ужасны! Если вы не обладаете даром телепатии твердыми знаниями GreaseMonkey и javascript, написание юзерскрипта может превратится в муки!
      4. Google Chrome не требует расширений для поддержки юзерскриптов. Интерфейс для удаления/отключения юзерскриптов доступен «из коробки».
      Очевидные минусы Google Chrome:
      1. Нет доступа к «родному» window.
      2. Не поддерживается директива @ include метаданных. Директива @ match глючит, можно сказать, что она тоже не поддерживается.

      Особенности юзерскриптов

      Код юзерскриптов может посмотреть любой желающий, вооруженный блокнотом.
      Базовые знания javascript позволяют отсечь угрозу установки шпионских и вредоносных скриптов простым анализом кода скрипта (придётся задействовать мозг).

      Все юзерскрипты запускаются после того, как загрузились все основные элементы страницы, но ещё не загрузились картинки. Можно сказать, что юзерскрипты грузятся по событию DOMContentLoaded .
      В любом случае, проверки на window.onload не нужны .

      Каждый браузер накладывает свои ограничения на исполнение юзерскриптов, но в целом юзерскрипты могут делать почти всё, что могут скрипты на странице.
      Чаще всего юзерскрипты используются для изменения интерфейса страницы или для добавления плюшек, блекджека и шлюх (юзерскрипты для социальных сетей).
      Бывают и продвинутые юзерскрипты, которые представляют собой самостоятельные программы (аукционные и игровые боты, плагины-помощники и т.д).

      Анатомия юзерскриптов

      Юзерскрипт - это текстовый файл с расширением user.js. В начале файла располагается блок метаданных - описание самого скрипта. После блока метаданных следует javascript-код, который и будет исполняться браузером.

      Рассмотрим тестовый скрипт, который показывает alert с текстом на определенной странице.
      // ==UserScript== // @name myUserJS // @description Мой самый первый юзерскрипт // @author Vasya Pupkin // @license MIT // @version 1.0 // @include http://userscripts.org/* // ==/UserScript== // Оборачиваем скрипт в замыкание, для кроссбраузерности (opera, ie) (function (window, undefined) { // нормализуем window var w; if (typeof unsafeWindow != undefined) { w = unsafeWindow } else { w = window; } // В юзерскрипты можно вставлять практически любые javascript-библиотеки. // Код библиотеки копируется прямо в юзерскрипт. // При подключении библиотеки нужно передать w в качестве параметра окна window // Пример: подключение jquery.min.js // (function(a,b){function ci(a) ... a.jQuery=a.$=d})(w); // не запускаем скрипт во фреймах // без этого условия скрипт будет запускаться несколько раз на странице с фреймами if (w.self != w.top) { return; } // дополнительная проверка наряду с @include if (/http:\/\/userscripts.org/.test(w.location.href)) { //Ниже идёт непосредственно код скрипта alert("Userscripts приветствует вас навязчивым окном."); } })(window);

      Важно: данный скрипт представляет собой оболочку для кроссбраузерных юзерскриптов. Этот же скрипт, но с английскими комментариями, можно стянуть с pastebin.com и использовать безнаказанно.

      В самом начале располагается блок метаданных (в виде комментария).
      // ==UserScript== // ... // ==/UserScript==
      Этот блок состоит из директив описания юзерскрипта. Ниже в таблице представлены основные директивы и их назначение.

      Важно: Все директивы, как и сам блок метаданных, могут отсутствовать.

      Директива Назначение
      @ name Название юзерскрипта.
      Это название будет отображаться в интерфейсе управления
      юзерскриптами. Если директива отсутствует, то название
      юзерскрипта будет таким же, как и название файла.
      @ description Описание юзерскрипта.
      Это описание будет отображаться в интерфейсе управления
      юзерскриптами.
      @ namespace Пространство имён.
      Определяет уникальность набора скриптов.
      Сюда можно вписать имя домена, принадлежащего вам. Или любую другую строку.
      Считайте, что это второе название скрипта. Обязательная директива для Trixie!
      @ author Имя автора.
      @ license Название лицензии, по которой распространяется юзерскрипт.
      @ version Номер версии юзерскрипта.
      К сожалению, механизма автообновления нету ни в одном браузере,
      поэтому номер версии - это просто цифры, которые отображаются в интерфейсе.
      @ include
      на которой нужно запускать юзерскрипт.
      Поддерживает вайлдкард * (применимо в GreaseMoneky, Opera, IE).
      Для каждого отдельного url нужно использовать отдельную директиву @ include.
      @ exclude Директива описания url страницы,
      на которой не нужно запускать юзерскрипт.
      Поддерживает вайлдкард * (применимо в GreaseMonkey, Opera, IE).
      Для каждого отдельного url нужно использовать отдельную директиву @ exclude.
      @ match Аналогично @ include, но с более жесткими ограничениями
      (применимо в GreaseMonkey старше 0.9.8, Google Chrome).
      Подробнее об ограничениях и формате директивы можно
      прочитать на этой странице .
      Для каждого отдельного url нужно использовать отдельную директиву @ match.

      Важно: Как показала практика, полагаться на директиву @ match в юзерскриптах не стоит.
      Google Chrome периодически отказывается учитывать @ match
      и запускает юзерскрипты на всех страницах.
      Для предотвращения такой ситуации в юзерскрипты,
      которые будут запускаться не только в Firefox,
      нужно добавлять код проверки адреса страницы (см. ссылку в коде юзерскрипта) .

      Важно: При отсутствии директив @ include или @ match, юзерскрипты будут запускаться на всех страницах .

      В нашем юзерскрипте использован ряд хитростей:

      1. Для того, чтобы юзерскрипты имели одинаковое поведение и не загрязняли глобальную область видимости, код оборачивается в замыкание (см. в коде скрипта) .
      2. Для правильного подключения библиотек внутри юзерскрипта и для обхода некоторых хитрых особеннойстей GreaseMonkey, необходимо «нормализовать» ссылку на глобальную область видимости window (см. в коде скрипта) .
      3. Для того, чтобы юзерскрипт не запускался несколько раз на одной и той же странице, необходимо останавливать работу при запуске юзерскрипта во фреймах (см. в коде скрипта) .
      4. Для того, чтобы юзерскрипт запускался только на нужных нам страницах, необходимо явно проверять url страницы (см. в коде скрипта) .
      5. Благодаря такой структуре, юзерскрипт может быть относительно просто преобразован в букмарклет .

      Результат

      Наш юзерскрипт готов к использованию!
      Нет, серьёзно, вы можете скопировать код юзерскрипта в файл, назвать его my.user.js, и закинуть полученный файл в браузер (используйте Chrome или Firefox с установленным GreaseMonkey).

      Конечно, наш юзерскрипт не обладает серьезными функциями, код выглядит страшным и малопривлекательным (для непосвященного человека). Но в итоге мы получили заготовку для кроссбраузерных юзерскриптов .
      Это значит, что юзерскрипт можно запустить практически в любом современном браузере!
      И это замечательно!

      Остаётся вопрос: как «раздать» наш скрипт пользователям (ведь мы писали скрипт не только для себя)?
      Варианты:

      • Зарегестрироваться на портале