Как создавать скрипты для программ. Создание скриптов. Продумай выход на ЛПР

Часть 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.
  • Отдельная благодарность:

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

    От автора: сам по себе сайт на чистом 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, потому что здесь для вас приготовлено еще много интересного о сайтостроении.

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

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

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

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

    Простые примеры

    Итак, не разглагольствуя понапрасну, сразу перейдем к примерам:

    $ curl ifconfig.co

    Эта простая команда покажет тебе внешний IP - идеальный вариант, если в Сеть ты ходишь через роутер. Все, что она делает, - просто обращается к серверу ifconfig.co, который возвращает обратно IP-шник одной строкой вместо полноценной веб-страницы.

    И да, это вовсе не скрипт, это просто команда, но, чтобы превратить команду в скрипт, достаточно поместить ее в текстовый файл и первой строкой добавить так называемый шебанг, то есть символы #!, за которыми следует имя командного интерпретатора:

    $ chmod +x ~/bin/myip.sh

    Теперь его можно вызывать из командной строки командой myip.sh.

    #!/bin/sh curl -4 wttr.in/Moscow

    Этот скрипт позволяет получить сводку погоды на четыре дня. Принцип тут такой же, как в случае с ifconfig.co.

    Сводка погоды в консоли #!/bin/sh dig +short txt $1.wp.dg.cx

    А так можно получить краткое описание чего-либо в Википедии, причем с помощью DNS-запроса вместо обращения к веб-серверу. Кстати, веб-сервер через командную строку тоже очень легко создать:

    #!/bin/sh while (nc -l 80 < file.html > :) ; do: ; done

    Данный скрипт основан на утилите netcat (nc), которую называют швейцарским армейским ножом для сетевых операций. Скрипт запускает цикл, выполняющий команду nc, которая слушает 80-й порт и в ответ на запрос отдает file.html , отправляя переданный запрос в никуда (символ означает noop, то есть пустую операцию).

    С помощью простых скриптов и команд можно запросто слушать интернет-радио:

    #!/bin/sh mpv --volume=50 -playlist ~/16bit.fm_128.m3u

    Естественно, плей-лист в формате M3U необходимо заранее скачать с сайта радиостанции. Кстати, если запустить MPlayer с аргументом --input-ipc-server=/tmp/mpvsocket , им можно будет управлять, записывая команды в файл. Например, настроить громкость:

    Echo "volume +10" | socat - /tmp/mpvsocket

    Создай два скрипта: один для запуска, другой для остановки радио (со строкой killall mpv), повесь их на рабочий стол и настрой горячие клавиши DE на управление воспроизведением. Вуаля, у тебя готов плеер для интернет-радио, запустить который можно, просто кликнув по иконке на рабочем столе. И он почти не будет расходовать память или занимать трей.

    Но отвлечемся от сетевых операций и вернемся к локальным делам.

    #!/bin/sh tar -czf "../${PWD##*/}.tar.gz" .

    Это один из моих любимых скриптов. Он создает архив tar.gz текущего каталога. Особого внимания здесь заслуживает конструкция ${PWD##*/} , которая берет полный путь до текущего каталога (переменная $PWD) и удаляет из него первую часть вплоть до последнего слеша, оставляя, таким образом, только имя самого каталога. Далее к нему добавляется расширение tar.gz. Более подробно о таких конструкциях ты можешь прочитать в man bash.

    #!/bin/sh while true; do inotifywait -r -e MODIFY КАТАЛОГ && ТВОЯ_КОМАНДА done

    А это уже скрипт, который запускает команду в ответ на изменение файлов в каталоге. Ее можно использовать для множества разных целей, например для автоматического включения плеера при сохранении MP3-файла. Или просто выводить уведомление на десктоп, используя в качестве команды notify-send:

    Notify-send "Файл изменен"

    Десктоп

    Раз уж мы заговорили о десктопе, то продолжим. Как и консоль, его тоже можно заскриптовать. Вот, например, скрипт, загружающий случайные обои, опубликованные на reddit-канале wallpaper:

    Продолжение доступно только участникам

    Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

    Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

    (учебный курс для начинающих)

    ВВЕДЕНИЕ

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

    То, чем сказано выше подкрепляется результатами проделанной работы на страницах сайта:
    150 скриптов , Ноу-Нау , изучением учебных дисциплин с тест-картами контроля и обучения.

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

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

    С чего начинать писать скрипты?

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

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

    Как создавать скрипты?

    Существует множество программ, с помощью которых можно писать скрипты, причем они с одним общим свойством - они пишутся для Интернета. Работа же с Интернетом (просмотр Web-страниц и т.д) осуществляется броузером - программой, пригодной для просмотра HTML-файлов. Таких программ много, но самая распространенная Microsoft Internet Explorer - она стоит на каждом компьютере и поэтому о других начинающему знать не надо. Другое важное свойство броузеров, что они могут не только просмотреть HTML-файлы, но и производить их отладку, причем не в Интернете, а локально за компьютером, не подключенном к Интернет.

    Самая простая страница (считай самый простой скрипт) создается помощью система HTML, которая есть не что иное, как основанная на тексте, кодовая система, используемая для того, чтобы сообщить броузеру (в нашем случае Internet Explorer) каким образом следует отображать информацию. Есть много готовых систем, позволяющих создавать HTML-файлы, в которые пользователю, в принципе, не надо и влезать. Однако, чтобы работать с JavaSсript - где без написание сценариев уже не обойтись - умение работать с текстом, созданием таблиц, размещением в них других таблиц, входных и выходных переменных, формирование кнопок "Выполнить", "Изобразить" и т.д. - знание элементарных кодов HTML и элементарное умение работать с ними необходимо. При изучение для этого, в принципе, достаточно одного урока – потом используйте Help .

    Однако для написания же полноценных скриптов, требуется что-то еще.
    И этим «что-то» еще является полноценная программа написания скриптов JavaScript , без которой невозможно создать скрипт (считай- и Web-страницу). Здесь уже необходимы знаниям и умения по всей программе. Написано огромное множество скриптов, к сожалению все они для Web -страниц в чистом виде, и почти нет для инженерных, художественно-творческих и тем более бытовых.
    Правда, готовые скрипты можно использовать и в качестве шаблонов, или какой-то части вашего скрипта, но все это требует корректировки, на которую уйдет больше времени, чем на написание нового скрипта.
    Изучение JavaSript является не сложным делом и даже начинающие программисты смогут объединить вместе несколько сценариев, способных поразить не только друзей, но и вас самих.

    Графика

    Можно было бы не ставить вопрос о том, как научиться писать скрипты. В Интернете
    и на прилавках магазинов представлено огромное количество книг, пособий и программ, CD-дисков - если бы не их слабое место - там нет (или почти нет) возможности работать с векторной графикой!
    Причина в том, что векторная графика с одной стороны еще не под силу Интернету, а с другой - прикладные программы с векторной графикой ориентированы на профессиональные задачи проектирования и изготовления, еще не решают задачи, которые ставит Интернет и, в частности, скрипт-программирования.
    Продолжение следует…