Ваш первый 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.

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

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

Готово — можно приступать к написанию своего первого 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-скрипт!

Ещё немного дальше¶
Чтобы пойти чуть дальше того, что мы уже рассмотрели, и учитывая, что всё это время мы использовали команду 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 это не имеет значения.