Lua-скрипты
Стандартного набора действий и условий достаточно для
подавляющего большинства историй: выдать предмет, изменить отношение, показать текст по условию. Но движок игры
(модуль core, на Kotlin, с использованием LuaJ) умеет исполнять и произвольный Lua-код — это «люк» для
случаев, когда декларативного языка условий/действий не хватает.
Как это подключается
В actions стадии, точки или отряда можно указать команду script (синхронно) или asyncScript (асинхронно,
не блокируя интерфейс):
"actions": {
"script": ["print(\"LUA IS AWESOME\")"]
}
В редакторе сюжетов для этой команды открывается полноценный редактор кода (CodeMirror) вместо простого текстового поля — сигнал, что это осознанно более «программистский» инструмент, чем остальные действия.
Что доступно внутри скрипта
Из кода игры видно, что в Lua-контекст движок прокидывает как минимум объекты controller и soundManager,
то есть скрипт может управлять частью игровых систем напрямую. Однако полный список доступных объектов и
методов, а также их сигнатуры, не задокументированы в открытых источниках на момент написания этой страницы.
- Проверьте, нельзя ли добиться результата стандартными действиями — это надёжнее и понятнее для других авторов, которые будут читать/менять вашу историю.
- Если скрипт всё же нужен — согласуйте его с разработчиками игры (
pda), чтобы не полагаться на недокументированное поведение, которое может измениться в следующей версии движка. - Держите скрипты короткими и предсказуемыми: ошибка в Lua-коде на стадии — не то же самое, что ошибка в JSON-действии, и её сложнее диагностировать через редактор.
См. также «Открытые вопросы» — там собраны все места, где документация опирается на признаки в коде, а не на явное описание API.