Скрипты и мини-игры
Когда настроек мало: где в редакторе пишется код, как вставить одну из шести готовых мини-игр, что такое модули и скиллы и почему скрипт безопасен для читателя.
Когда нужны скрипты
Почти всё в новелле собирается без кода: реплики, выборы, шаги «Действий», условия, расширения. Скрипт нужен, когда хочется своего — мини-игры, необычного расчёта, механики, которой нет в настройках.
Скрипты пишутся на JavaScript. Всё, что умеет движок, доступно через объект engine: переменные, сцена, звук, уведомления. Например, две строки дают читателю золото и сообщают об этом:
engine.vars.gold += 10 — и следом engine.ui.notify('Золото +10'). Переменная gold должна быть заведена во вкладке «Перемен.».
Где пишется код
Шаг «Скрипт» во вкладке «Основные» блока «Действия» — код в своей точке ленты. Рядом с шагом выбирается, когда он выполняется: «В ленте», «При входе» в ноду, до реплик, или «При выходе» из неё.
Те же скрипты входа и выхода видны в «Параметрах» ноды, в разделе «Скрипты (JS)»: кнопки «onOpen - при входе» и «onClose - при выходе» правят те же шаги.
Нода «Custom JS» — отдельная нода-скрипт на графе. Её код открывает кнопка «Редактировать код» на карточке ноды.
Скрипт «init» лежит первой строкой во вкладке «Скрипты» с пометкой «при входе». Он выполняется каждый раз, когда читатель входит в новеллу: новая игра, продолжение, «Начать заново». Удалить и переименовать его нельзя.
- Выберите ноду и под лентой нажмите «Действие».
- Во вкладке «Основные» нажмите «Скрипт» — откроется редактор.
- Напишите код или вставьте его из палитры справа.
- Нажмите «Сыграть» и пройдите ноду.
Редактор и палитра
Справа от кода — палитра функций движка. Щелчок по строке вставляет готовый кусок кода туда, где стоит курсор. Группы — «Переменные», «Сцена и узлы», «Камера и эффекты», «Звук», «Сигналы», «События», «Мини-игры» и другие; установленные расширения добавляют свои. Сверху поиск по названию и описанию. Полный список того, что умеет движок, — это и есть палитра.
Рядом с кодом — живое превью 9:16: скрипт идёт в нём на том же движке, что у читателя, мини-игру можно сыграть прямо там, а фон, камера и музыка отмечаются в логе. «Запуск» перезапускает скрипт, галка «авто» перезапускает его на каждой правке, а внизу «Логи» — что происходило. Если в коде ошибка, она появится в полосе превью со значком ⛔.
«Импорт скрипта…» над палитрой подключает модуль из вкладки «Скрипты», а «Развернуть» открывает редактор на весь экран.
Готовые мини-игры
В группе «Мини-игры» палитры шесть игр, их вставляют целиком: «Поймай монетки», «Точный удар», «Найди пару», «Повтори узор», «Уворот» и «Кодовый замок». Каждая держит читателя, пока партия не кончится, и заканчивается сама — по времени, попыткам или проигрышу.
Итог игра пишет в переменную: очки у «Поймай монетки» — score, попадания у «Точного удара» — hits, ходы у «Найди пару» — moves. Заведите во вкладке «Перемен.» переменную с таким же ID, и по ней можно ветвить историю обычной нодой «Условие».
- Выберите экран, где будет игра, и откройте его «Параметры».
- В разделе «Скрипты (JS)» нажмите «onOpen - при входе».
- В палитре раскройте «Мини-игры» и щёлкните по игре — код встанет целиком.
- Сыграйте партию в превью рядом, потом пройдите сцену в «Сыграть».
Модули и скиллы
Вкладка «Скрипты» — папки с кодом новеллы. Кнопка «Скрипт» создаёт модуль: общий код, который подключается в любой скрипт строкой import "Папка/имя". В те же папки можно положить картинки и звуки для мини-игр — в «Библиотеке» они не мешаются среди фонов. Переименовали папку или модуль — путь в import изменится, его надо поправить.
«Скилл» — папка-рецепт для ИИ-агента: «Название», «Когда применять», «Инструкция для агента» и теги, а внутри скрипты, картинки и звуки. По описанию агент сам находит нужный скилл.
«Скиллы платформы» в начале вкладки доступны агенту всегда, ставить их не нужно. Они только для чтения; чтобы переделать такой скилл под себя, есть «Скопировать для правки».
Безопасно ли это
Скрипт выполняется у читателя, но в закрытой песочнице. Из неё не добраться ни до страницы вокруг, ни до аккаунта читателя: движок даёт скрипту только свои ручки — переменные, сцену, звук, интерфейс.
Картинки из кода грузятся только с адресов платформы и из вашей библиотеки, чужой адрес просто не загрузится. Так через картинку не отправить данные читателя на сторонний сайт.
Частые вопросы
Нужно ли уметь программировать? Для готовых мини-игр — нет: они вставляются целиком из палитры. Для своей механики можно попросить агента.
Скрипт не работает — где посмотреть ошибку? В превью рядом с кодом: ошибка появится в его полосе со значком ⛔, а «Логи» покажут, что успело выполниться.
Читатель застрял на мини-игре — почему? Игра держит экран, пока не закончится. Готовые игры отпускают читателя сами; своя игра должна сделать то же — вызвать engine.flow.unlock().
Где найти все функции движка? В палитре справа от кода: щелчок вставляет пример, а поиск ищет по названию и описанию.
Можно удалить init? Нет, он есть в каждой новелле. Не нужен — оставьте пустым.





