Ваш первый task-скрипт

Основы task-скрипта

Task-скрипт — это самостоятельный скрипт, который можно запустить либо игровой командой /ex, либо командой run в другом скрипте.

Task-скрипт выполнит все включённые в него команды Denizen. Он может быть простым, может быть сложным и даже может запускать другие task-скрипты. Это удобно для построения логических цепочек скриптов — например, вариантов диалогов или случайного контента.

Синтаксис task-скрипта

Вот пример простого task-скрипта.

example_task:
    type: task
    script:
    - narrate "This is a basic task script!"

Этот скрипт выведет игроку, привязанному к скрипту, текст: This is a basic task script! Если вы используете команду /ex для запуска этого скрипта — а именно, выполнив /ex run example_task в игре, — вы и будете тем самым привязанным игроком.

Обратите внимание, что этот пример скрипта подсвечен зелёным. Это значит, что он достаточно хорош, чтобы его можно было скопировать и вставить, и он заработает. Чуть ниже на этой странице встретится пример, подсвеченный синим — это хороший пример, но в нём нужно заполнить какие-то части. Позже вы увидите примеры, выделенные красным: они показывают, как делать не надо. Подробнее о системе подсветки читайте на странице Об этом руководстве — Примеры скриптов.

Собираем первый task-скрипт в VS Code

Ранее вы уже узнали, как настроить VS Code — редактор, который мы рекомендуем для написания скриптов Denizen.

Создание файла

Чтобы создать свой первый task-скрипт, начните с открытия папки скриптов в VS Code.

../../_images/fileopenfolder.png ../../_images/fileopenscriptsfolder.png

Оттуда кликните правой кнопкой по папке scripts в обозревателе и выберите пункт «New File».

../../_images/rightclicknewfile.png

Введите любое имя файла — главное, чтобы оно заканчивалось на .dsc, это обязательное расширение для файла скрипта Denizen.

../../_images/typefilenametest.png

Готово — можно приступать к написанию своего первого task-скрипта!

Пишем скрипт

Начнём с «костяка» скрипта:

my_first_task:
    type: task
    script:
    - narrate (sometext)

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

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

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

Имя скрипта здесь — my_first_task. Оно находится на самом верхнем уровне отступа (то есть в начале строки нет пробелов, тогда как у всех остальных строк в начале ровно 4 пробела — они сдвинуты глубже). Каждая запись на верхнем уровне отступа — это отдельный скрипт. Вот пример двух разных скриптов:

my_first_task:
    type: task
    script:
    - narrate "This is is task number one!"

my_second_task:
    type: task
    script:
    - narrate "This is task number two!"

Этот пример показывает, как выглядят два разных скрипта в одном файле. my_first_task и my_second_task — это два разных скрипта, и каждый из них полностью самостоятельный.

Кроме того, имейте в виду, что имена скриптов и имена файлов — это разные вещи. И my_first_task, и my_second_task могут лежать в одном файле с именем my_first_scripts.dsc. Значение имеет именно имя скрипта (то самое my_first_task), а имя файла (my_first_scripts.dsc) — целиком и полностью для вашего собственного удобства, и Denizen от него никак не зависит. Также вы свободно можете создавать подпапки внутри папки scripts, и любые лежащие там файлы скриптов будут загружаться точно так же.

Типы скриптов

Под именем скрипта — на втором уровне отступа — вы увидите ключ type.

Ключ type — это то место, где вы указываете, какой type (тип) Denizen-скрипта вы пишете. В данном случае мы пишем task-скрипт. Возможно, вы уже встречали world-скрипты, item-скрипты, inventory-скрипты и многие другие существующие типы. Пока мы сосредоточимся именно на task-скриптах. Остальные типы вы освоите по мере прочтения этого руководства, а описания всех типов можно найти в мета-документации на странице описания языка.

Обязательно напишите type: task в скрипте на втором уровне отступа (нажмите enter, чтобы начать новую строку, а затем tab, чтобы сделать отступ в один шаг. Это добавит в начале строки 4 пробела, и при каждом нажатии enter далее отступ в 4 пробела будет добавляться автоматически, пока вы не нажмёте backspace, чтобы убрать пробелы), — под именем скрипта, как здесь:

my_first_task:
    type: task

Команды скрипта

Под ключом type вы увидите ключ script. Для task-скрипта ключ script — это то место, где пишется само содержимое скрипта: набор инструкций, которые говорят Denizen, что делать. В других типах скриптов используются другие ключи — вы познакомитесь с ними по мере прохождения этого руководства. Основная часть вашей реальной работы в Denizen будет происходить под ключами вроде этого.

Посмотрим на ещё один пример скрипта:

my_first_task:
    type: task
    script:
    - narrate "This is a valid task script!"
    - narrate "Congratulations on writing your first script!"

Обратите внимание: текст, который мы хотим вывести через narrate, — This is a valid task script! — взят в кавычки "". Поскольку в нашем сообщении встречаются пробелы , мы берём его в кавычки, чтобы команда воспринимала его как один аргумент. В командах Denizen аргументы разделяются пробелами . Например, в run one two three аргументами будут one, two и three, а в run "one two three" аргумент всего один — one two three.

Готовый результат

На этом этапе у вас должен быть готовый к запуску task-скрипт! Попробуйте прямо сейчас — сначала наберите в игре /ex reload, чтобы загрузить новый скрипт, а затем выполните команду /ex run (YourTaskName), чтобы запустить его в игре. Например, для скрипта выше игровая команда будет такой: /ex run my_first_task.

Если вы видите в чате текст, который указали в команде narrate — поздравляю, вы успешно написали свой первый task-скрипт!

../../_images/runfirsttaskscript.png

Ещё немного дальше

Чтобы пойти чуть дальше того, что мы уже рассмотрели, и учитывая, что всё это время мы использовали команду run через /ex (на самом деле это обычная команда скрипта Denizen, а /ex — лишь игровой инструмент, чтобы быстро выполнить любую команду скрипта), давайте посмотрим на пример, который делает немного больше, чем предыдущие.

Кроме того, один task-скрипт может запускать другой task-скрипт. Выглядит это так:

my_first_task:
    type: task
    script:
    - narrate "This is a valid task script!"
    - narrate "Congratulations on writing your first script!"
    - run my_second_task

my_second_task:
    type: task
    script:
    - narrate "This is your second task script!"

Это лишь самый базовый пример — по мере изучения Denizen вы сможете создавать всё более сложные и мощные скрипты.

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