Перейти к основному содержимому

Lua-скрипты

Стандартного набора действий и условий достаточно для подавляющего большинства историй: выдать предмет, изменить отношение, показать текст по условию. Но движок игры (модуль core, на Kotlin, с использованием LuaJ) умеет исполнять и произвольный Lua-код — это «люк» для случаев, когда декларативного языка условий/действий не хватает.

Как это подключается

В actions стадии, точки или отряда можно указать команду script (синхронно) или asyncScript (асинхронно, не блокируя интерфейс):

"actions": {
"script": ["print(\"LUA IS AWESOME\")"]
}

В редакторе сюжетов для этой команды открывается полноценный редактор кода (CodeMirror) вместо простого текстового поля — сигнал, что это осознанно более «программистский» инструмент, чем остальные действия.

Что доступно внутри скрипта

Из кода игры видно, что в Lua-контекст движок прокидывает как минимум объекты controller и soundManager, то есть скрипт может управлять частью игровых систем напрямую. Однако полный список доступных объектов и методов, а также их сигнатуры, не задокументированы в открытых источниках на момент написания этой страницы.

Прежде чем писать Lua-скрипт
  1. Проверьте, нельзя ли добиться результата стандартными действиями — это надёжнее и понятнее для других авторов, которые будут читать/менять вашу историю.
  2. Если скрипт всё же нужен — согласуйте его с разработчиками игры (pda), чтобы не полагаться на недокументированное поведение, которое может измениться в следующей версии движка.
  3. Держите скрипты короткими и предсказуемыми: ошибка в Lua-коде на стадии — не то же самое, что ошибка в JSON-действии, и её сложнее диагностировать через редактор.

См. также «Открытые вопросы» — там собраны все места, где документация опирается на признаки в коде, а не на явное описание API.