Userscripts. углубляемся

Введение¶

До Godot 3.0, единственным выбором для написания скриптов игры был . В настоящее время Godot официально поддерживает четыре (да, четыре!) языка и имеет возможность динамически добавлять дополнительные скриптовые языки!

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

«Основные» языки в Godot — это GDScript и VisualScript. Основной причиной такого выбора является их уровень интеграции с Godot. Это делает процесс овладения Godot более плавным; они оба имеют полную интеграцию с редактором, в то время как для С# и С++ необходимо использовать отдельную IDE. Если вы большой поклонник статически типизированных языков, то используйте C# и С++.

GDScript

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

  • Он прост, элегантен и разработан, чтобы быть понятным для пользователей, знающих другие языки программирования, таких как Lua, Python, Squirrel и т. д.
  • Загружает и компилирует невероятно быстро.
  • Интеграция с редактором позволяет с удовольствием работать, с написанием кода для узлов, сигналов и многих других элементов, относящихся к редактируемой сцене.
  • Имеет встроенные векторные типы (например, Vectors, transforms и т. д.), что делает использование линейной алгебры эффективным.
  • Поддерживает несколько потоков так же эффективно, как статически типизированные языки — это одно из ограничений, которое заставило нас избегать виртуальных машин, таких как Lua, Squirrel и т. д.
  • Не использует сборщик мусора, поэтому он располагает небольшой автоматизацией (в любом случае большинство объектов подсчитываются ссылками), детерминизмом.
  • Его динамическая природа упрощает оптимизацию разделов кода на C++ (через GDNative), если требуется большая производительность, без перекомпиляции движка.

Если вы не определились с выбором языка, но имеете опыт программирования, особенно на динамически типизированных языках, попробуйте GDScript!

Визуальный Скриптинг

Начиная с версии 3.0, Godot предлагает . Это типичная реализация языка «блоков и соединений», но адаптированная к тому, как работает Godot.

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

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

.NET / C#

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

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

Поскольку Godot использует среду выполнения Mono.NET, теоретически любая сторонняя библиотека .NET или программная платформа может использоваться для написания скриптов в Godot, так же как любой CLR-совместимый язык программирования, такой как F#, Boo или ClojureCLR. Однако, на практике C# является единственным официально поддерживаемым .NET вариантом.

Поддержка в Opera

OperaUJS ManagerUserJS ManagerУстановка:Настройки -> Общие настройки -> Расширенные -> Содержимое -> Настроить JavaScriptне должна содержать пробеловУправление:Особенности:

  • Юзерскрипты запускаются «как есть», не оборачиваясь в замыкание, тем самым засоряя глобальную область видимости window.
  • Доступны объекты родного окна, к примеру window.page_defined_var.
  • Доступные специфические события браузера Opera, к примеру BeforeScript.
  • Не доступны кроссдоменные запросы (Обходится использованием специальных событий)
  • unsafeWindow недоступен.
  • Скрипты запускаются в алфавитном порядке.

Основы скриптов

Скрипт или как его еще называют — сценарий, это последовательность команд, которые по очереди считывает и выполняет программа-интерпретатор, в нашем случае это программа командной строки — bash.

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

Простейший пример скрипта для командной оболочки Bash:

Утилита echo выводит строку, переданную ей в параметре на экран. Первая строка особая, она задает программу, которая будет выполнять команды. Вообще говоря, мы можем создать скрипт на любом другом языке программирования и указать нужный интерпретатор, например, на python:

Или на PHP:

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

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

Чтобы сделать файл исполняемым в linux выполните:

Теперь выполняем нашу небольшую первую программу:

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

Роль скриптов в СЕО

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

Дело в том, что каждый скрипт — это определенная нагрузка на сервер (если он выполняется в браузере — на браузер). Чрезмерное их количество может привести к тому, что сайт будет зависать и тормозить. Это негативно скажется на поведении посетителей. А, как известно, поведенческие факторы играют одну из главных ролей при ранжировании страниц в поисковой выдаче. Чтобы не портить поведенческие факторы своей площадки, необходимо убрать все лишние скрипты. Оставлять стоит только самые «нужные». Именно поэтому все специалисты в области СЕО рекомендуют не использовать совсем или использовать по минимуму анимационные и динамические элементы. Да, это красиво, но неэффективно с точки зрения производительности.

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

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

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

  • общая производительность сайта;

  • скорость загрузки страниц.

СЕО — это многогранный процесс, состоящий из множества «мелких» деталей. Поэтому каждой из них нужно уделять достаточно внимания, в том числе и скриптам сайта.

Объекты, коллекции, свойства и методы

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

Главным из них является Application, соответствующий самой программе Excel. Затем следуют Workbooks, Worksheets, а также Range. Например, для обращения к ячейке A1 на конкретном листе следует указать путь с учетом иерархии.

Что касается понятия «коллекция», то это группа объектов того же класса, которая в записи имеет вид ChartObjects. Ее отдельные элементы также являются объектами.

Следующее понятие — свойства. Они являются необходимой характеристикой любого объекта. Например, для Range — это Value или Formula.

Методы — это команды, показывающие, что требуется сделать. При написании кода в VBA их необходимо отделять от объекта точкой. Например, как будет показано в дальнейшем, очень часто при программировании в «Эксель» используют команду Cells(1,1).Select. Она означает, что необходимо выбрать ячейку с координатами (1,1) т.е. A1.

Вместе с ней нередко используется Selection.ClearContents. Ее выполнение означает очистку содержимого выбранной ячейки.

Начало работы

В качестве гейммастера/ведущего и разработчика игр мне часто приходится писать небольшие утилиты и скрипты, которые помогают мне при руководстве играми, а также при планировании игр и при непосредственном участии в них. Иногда мне необходима быстрая подсказка. В другой раз мне может потребоваться большое количество имен для NPC-персонажей (Non-Player Character – персонаж, не управляемый игроком). Время от времени мне приходится работать с числами, подсчитывать некоторые шансы или интегрировать в игру те или иные головоломки. Реализация многих из этих задач существенно упрощается, если заблаговременно приложить определенные усилия к написанию соответствующего скрипта.

В этой статье анализируется 10 фундаментальных скриптов, которые могут применяться в играх различного типа. Прилагаемый к данной статье архив программного кода (далее – Архив) содержит полный исходный текст для каждого описываемого в ней скрипта. Кроме того, вы можете увидеть все эти скрипты «в действии» на Web-сайте: chaoticneutral.

Мы «пробежимся» по этим скриптам достаточно быстро. Такие темы как поиск хостинга или настройка сервера в данной статье рассматриваться не будут. Сегодня существует множество Web-хостов, которые предлагают PHP-дистрибутивы; в частности, инсталлятор XAMPP удобен в том случае, если вы хотите сформировать свою собственную среду. Мы не будем тратить много времени на разговоры о наилучших методиках PHP-разработки или о принципах проектирования игр. При создании рассматриваемых скриптов к ним предъявлялись несколько иные требования – эти скрипты должны были быть простыми для понимания, легкими в использовании и быстрыми в усвоении.

Базовый «кидатель кубика» (die roller)

Для многих игр и игровых систем необходима игральная кость (так называемый «кубик»). Давайте начнем с самого простого варианта: с кидания одного шестигранного кубика. По существу, между киданием шестигранного кубика и выбором случайного числа в промежутке от 1 до 6 нет никаких различий. В PHP эта операция реализуется достаточно просто: .

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

Листинг 1. Использование функции с генератором случайных чисел
function roll () {
    return mt_rand(1,6);
}

echo roll();

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

Листинг 2. Передача типа кубика как параметра
function roll ($sides) {
    return mt_rand(1,$sides);
}

echo roll(6);   // roll a six-sided die
echo roll(10);  // roll a ten-sided die
echo roll(20);  // roll a twenty-sided die

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

Механизм для игры Mad Libs

Mad Libs – это игра в слова, в которой игрок берет короткий рассказ и заменяет ключевые типы слов другими словами того же типа, чтобы создать новую, более глупую версию той же истории. Возьмем следующий текст: «I was walking in the park when I found a lake (Я шел по парку и нашел озеро). I jumped in and swallowed too much water (Я нырнул в озеро и проглотил слишком много воды). I had to go to the hospital (Мне пришлось пойти в больницу)». Начните заменять типы слов различными токенами. Начинайте и завершайте каждый токен подчеркиванием, чтобы предотвратить случайные совпадения строк (листинг 20).

Листинг 20. Замена типов слов символами слов
$text = "I was _VERB_ing in the _PLACE_ when I found a _NOUN_.  
I _VERB_ed in, and _VERB_ed too much _NOUN_.  I had to go to the _PLACE_.";

После этого создайте несколько списков базовых слов. В этом примере мы не будем давать большую волю своей фантазии (листинг 21).

Листинг 21. Создание нескольких списков базовых слов
$verbs = array('pump', 'jump', 'walk', 'swallow', 'crawl', 'wail', 'roll');
$places = array('park', 'hospital', 'arctic', 'ocean', 'grocery', 'basement', 
    'attic', 'sewer');
$nouns = array('water', 'lake', 'spit', 'foot', 'worm', 
    'dirt', 'river', 'wankel rotary engine');

Теперь мы можем многократно оценивать текст на предмет возможной замены токенов по мере необходимости (листинг 22).

Листинг 22. Оценка текста
while (preg_match("/(_VERB_)|(_PLACE_)|(_NOUN_)/", $text, $matches)) {
    switch ($matches) {
        case '_VERB_' :
            shuffle($verbs);
            $text = preg_replace($matches, current($verbs), $text, 1);
            break;
        case '_PLACE_' :
            shuffle($places);
            $text = preg_replace($matches, current($places), $text, 1);
             break;
        case '_NOUN_' :
            shuffle($nouns);
            $text = preg_replace($matches, current($nouns), $text, 1);
            break;
    }
}

echo $text;

Вполне очевидно, что это простой и достаточно сырой пример. Чем точнее будут наши списки слов и чем больше времени мы потратим на создание нашего базового текста, тем лучше будут наши результаты. Мы уже использовали текстовые файлы для создания списков имен и списков базовых слов. Используя тот же самый принцип, мы можем создавать списки слов, разбитые по типам, и использовать их для создания более разнообразных игр типа Mad Libs.

Как сделать скриншот экрана

Иногда нужно сделать скрин (screen, скриншот) для наглядного изображения за происходящим на вашем компьютере. Например, показать как устанавливать программу или как настраивать главное меню.

Сделать такой снимок очень просто без специальных программ.

Для начала определите, что вы хотите «сфотографировать». Рассмотрим на примере обычного меню «Пуск». Для того чтобы сделать скрин «Пуска», нужно для начала нажать на клавиатуре клавишу «Windows» или кликнуть левой кнопкой мыши по кнопке «Пуск».

Теперь, пока меню «Пуск» раскрыто, нужно нажать на клавиатуре клавишу «Prt Sc»:

Таким образом мы «сфотографируем» весь экран в буфер обмена.

Чтобы сохранить наш снимок откроем программу «Paint», она есть на каждом компьютере:

Пуск => Программы => Стандартные => Paint

В рабочем окне программы Paint нажмите закладку Правка, затем Вставить или просто нажмите сочетание клавиш Ctrl + V (вставить).

Теперь выбираем инструмент Выделение (штриховая рамка) и выделяем область, которую нам нужно (окно Пуск).

Копируем выделенный фрагмент в Буфер обмена Правка => Копировать или сочетанием клавиш Ctrl + C

Создаём новый документ Файл => Создать или Ctrl + N. Старый документ можно закрыть.

Вставляем из Буфера скопированный рисунок Правка => Вставить или Ctrl + V

Рисунок вставлен. Если нужно на нём что-то подчеркнуть или подписать, то можно воспользоваться Карандашом или Кистью из панели инструментов.

Осталось сохранить рисунок Файл => Сохранить как…

Введите имя для вашего рисунка и выберите Тип файла JPEG, не забудьте указать Папку в которую вы хотите сохранить рисунок, теперь можно нажимать кнопку Сохранить

Вот результат работы:

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

Как быстро сделать скриншот рабочего стола с помощью программы Screen Shoot-It

Excel VBA Macro script

Макросы в экселе пишут на VBA (Visual Basic Advance) — слегка переработанный под нужды офисного пакета старый добрый  Бейсик, со всеми своими достоинствами и недостатоками.  Сами программы по умолчанию являются частью эксель файла. И убедится в этом можно с помощью соответствующей консоли (Microsoft Visual Basic for Application)

Добраться до них можно в любое время нажав сочетание клавишь Alt+F11

Но сначала надо включить вкладку Developers в стандартной ленте экселя.

Для этого:

  1. Ннаводим курсор на ленту и нажимаем Правую Клавишу Мыши (ПКМ)
  2. В открывшемся списке выбираем — Customize the Ribbon (Настройка Ленты)
  3. Ищем как показано на скриншоте пункт Developer (Разработка) и нажимаем чтобы появилась галочка
  4. Ок.

Путем этих не хитрых манипуляций мы получили доступ к панели разработчика в Excel — не будем особо заострять на ней внимание. Нам там понадобится буквально несколько кнопок. — Visual Basic — собственно уже обусжденная выше консоль для работы со скриптами

— Visual Basic — собственно уже обусжденная выше консоль для работы со скриптами.

— Macos — список доступных макросов для использования.

— Record Macro — эта кнопка позволяет включить запись ваших  действий с табличным редактором.

Ну и дальше порядок работы довольно простой — запускаете запись макроса, производите необходимые манипуляции с данными, останавливаете запись (той же кнопкой что и включили), идете в редактор, правите если необходимо. Потом с помощью списка макросов вызываете вновь созданный макрос в любое удобное время.

Однако есть нюанс. Созданный макроскрипт будет по умолчанию доступен только в одном эксель файле. Скопировать его в другой — конечно можно, но довольно заморочно. Есть ли выход из этой ситуации? Конечно!

Циклы в скриптах

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

Первым рассмотрим цикл for. Вот его синтаксис:

for переменная in списокdoкомандаdone

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

Например, переберем пять цифр:

for index in 1 2 3 4 5
do
echo $index
done

Или вы можете перечислить все файлы из текущей директории:

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

Второй цикл, который мы рассмотрим — это цикл while, он выполняется пока команда условия возвращает код 0, успех. Рассмотрим синтаксис:

while команда условиеdoкомандаdone

Рассмотрим пример:

Как видите, все выполняется, команда let просто выполняет указанную математическую операцию, в нашем случае увеличивает значение переменной на единицу.

Хотелось бы отметить еще кое-что. Такие конструкции, как while, for, if рассчитаны на запись в несколько строк, и если вы попытаетесь их записать в одну строку, то получите ошибку. Но тем не менее это возможно, для этого там, где должен быть перевод строки ставьте точку с запятой «;». Например, предыдущий цикл можно было выполнить в виде одной строки:

Все очень просто я пытался не усложнять статью дополнительными терминами и возможностями bash, только самое основное. В некоторых случаях, возможно, вам понадобиться сделать gui для bash скрипта, тогда вы можете использовать такие программы как zenity или kdialog, с помощью них очень удобно выводить сообщения пользователю и даже запрашивать у него информацию.

Поддержка в IE

IE7, IE8, IE9TrixieIE7ProбесВажно:Расширения:TrixieIE7ProУстановка:(C:/Program Files/Bhelpuri/Trixie/Scripts)(C:/Program Files/IEPro/userscripts)Управление:Особенности:

  • Юзерскрипты запускаются «как есть», не оборачиваясь в замыкание, тем самым засоряя глобальную область видимости window.
  • Доступны объекты родного окна, к примеру window.page_defined_var.
  • Не доступны кроссдоменные запросы (Обойти можно способами, аналогичными тем, что используются при разработке на javascript: JSONP, easyXDM xdr и т.д.)
  • unsafeWindow недоступен.
  • И Trixie, и IEPro имеют модель загрузки скриптов, отличную от модели GreaseMonkey. Скрипты не перезапускаются при обновлении страницы через Ctrl+R или Ctrl+F5. К тому же, скрипты подгружаются по window.onLoad.
  • Для того, чтобы Trixie увидел скрипт, скрипт должен иметь метаданные и обязательно иметь директиву @namespace (см. предыдущую статью).
  • Для того, чтобы IE7Pro увидел скрипт, скрипт должен иметь расширение .ieuser.js.
  • Оба плагина имеют проблемы с запуском в IE9 под Windows 7×64.
    Сообщения о незапускаемом IE7Pro я встречал чаще.

Важно:Важно:Trixie

Как начать

Прежде всего требуется создать файл и сохранить его, присвоив имя и выбрав тип «Книга Excel с поддержкой макросов».

Затем необходимо перейти в приложение VB, для чего достаточно воспользоваться комбинацией клавиш «Alt» и «F11». Далее:

  • в строке меню, расположенном в верхней части окна, нажимают на иконку рядом с иконкой Excel;
  • выбирают команду Mudule;
  • сохраняют, нажав на иконку с изображением floppy disk;
  • пишут, скажем так, набросок кода.

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

Sub program ()

‘Наш код

End Sub

Обратите внимание, что строка «’Наш код» будет выделена другим цветом (зеленым). Причина в апострофе, поставленном в начале строки, который обозначает, что далее следует комментарий

Теперь вы можете написать любой код и создать для себя новый инструмент в VBA Excel (примеры программ см. далее). Конечно, тем, кто знаком с азами Visual Basic, будет намного проще. Однако даже те, кто их не имеет, при желании смогут освоиться достаточно быстро.

Управляющие конструкции в скриптах

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

В Bash для проверки условий есть команда Синтаксис ее такой:

if команда_условие thenкомандаelse командаfi

Эта команда проверяет код завершения команды условия, и если 0 (успех) то выполняет команду или несколько команд после слова then, если код завершения 1 выполняется блок else, fi означает завершение блока команд.

Но поскольку нам чаще всего нас интересует не код возврата команды, а сравнение строк и чисел, то была введена команда [[, которая позволяет выполнять различные сравнения и выдавать код возврата зависящий от результата сравнения. Ее синтаксис:

]

Для сравнения используются уже привычные нам операторы <,>,=,!= и т д. Если выражение верно, команда вернет 0, если нет — 1. Вы можете немного протестировать ее поведение в терминале. Код возврата последней команды хранится в переменной $?:

Теперь объединением все это и получим скрипт с условным выражением:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector