# Скриптинг В качестве языка сценариев используется LuaJIT Подразделы: - [События движка](scripting/events.md) - [Пользовательский ввод](scripting/user-input.md) - [Файловая система и сериализация](scripting/filesystem.md) - [Свойства и методы UI элементов](scripting/ui.md) - [Сущности и компоненты](scripting/ecs.md) - [Библиотеки](#) - [block](scripting/builtins/libblock.md) - [entities](scripting/builtins/libentities.md) - [cameras](scripting/builtins/libcameras.md) - [mat4](scripting/builtins/libmat4.md) - [player](scripting/builtins/libplayer.md) - [quat](scripting/builtins/libquat.md) - [vec2, vec3, vec4](scripting/builtins/libvecn.md) - [Модуль core:bit_converter](scripting/modules/core_bit_converter.md) - [Модуль core:data_buffer](scripting/modules/core_data_buffer.md) - [Модули core:vector2, core:vector3](scripting/modules/core_vector2_vector3.md) ## Аннотации типов данных В документации к Lua библиотекам используются аннотации типов, не являющиеся частью синтаксиса Lua. - vector - массив из трех или четырех чисел - vec2 - массив из двух чисел - vec3 - массив из трех чисел - vec4 - массив из четырех чисел - quat - массив из четырех чисел - кватернион - matrix - массив из 16 чисел - матрица ```lua require "контентпак:имя_модуля" -- загружает lua модуль из папки modules (расширение не указывается) ``` ## Библиотека *pack* ```python pack.is_installed(packid: str) -> bool ``` Проверяет наличие установленного пака в мире ```lua pack.data_file(packid: str, filename: str) -> str -- и pack.shared_file(packid: str, filename: str) -> str ``` Возвращает путь к файлу данных и создает недостающие директории в пути. - Первый вариант возвращает: `world:data/packid/filename` - Второй вариант возвращает: `config:packid/filename` Примеры: ```lua file.write(pack.data_file(PACK_ID, "example.txt"), text) ``` Для пака *containermod* запишет текст в файл `world:data/containermod/example.txt`. Используйте для хранения данных в мире. ```lua file.write(pack.shared_file(PACK_ID, "example.txt"), text) ``` Для пака *containermod* запишет текст в файл `config:containermod/example.txt` Используйте для хранения данныхm общих для всех миров. ```python pack.get_folder(packid: str) -> str ``` Возвращает путь к папке установленного контент-пака. ```python pack.is_installed(packid: str) -> bool ``` Проверяет наличие контент-пака в мире ```python pack.get_installed() -> массив строк ``` Возращает id всех установленных в мире контент-паков. ```python pack.get_available() -> массив строк ``` Возвращает id всех доступных, но не установленных в мире контент-паков. ```python pack.get_base_packs() -> массив строк ``` Возвращает id всех базовых паков (неудаляемых) ```python pack.get_info(packid: str) -> { id: str, title: str, creator: str, description: str, version: str, icon: str, dependencies: опциональный массив строк } ``` Возвращает информацию о паке (не обязательно установленном). - icon - название текстуры предпросмотра (загружается автоматически) - dependencies - строки в формате `{lvl}{id}`, где lvl: - `!` - required - `?` - optional - `~` - weak например `!teal` ## Библиотека *world* ```python world.get_list() -> массив таблиц { name: str, icon: str } ``` Возвращает информацию о мирах: название и предпросмотр (автоматически загружаемая текстура). ```python world.get_day_time() -> number ``` Возвращает текущее игровое время от 0.0 до 1.0, где 0.0 и 1.0 - полночь, 0.5 - полдень. ```python world.set_day_time(time: number) ``` Устанавливает указанное игровое время. ```python world.set_day_time_speed(value: number) ``` Устанавливает указанную скорость для игрового времени. ```python world.get_day_time_speed() -> number ``` Возвращает скорость для игрового времени. ```python world.get_total_time() -> number ``` Возвращает общее суммарное время, прошедшее в мире ```python world.get_seed() -> int ``` Возвращает зерно мира. ```python world.exists() -> bool ``` Проверяет существование мира по имени. ```python world.is_day() -> bool ``` Проверяет является ли текущее время днём. От 0.2(8 утра) до 0.8(8 вечера) ```python world.is_night() -> bool ``` Проверяет является ли текущее время ночью. От 0.8(8 вечера) до 0.2(8 утра) ## Библиотека *gui* Библиотека содержит функции для доступа к свойствам UI элементов. Вместо gui следует использовать объектную обертку, предоставляющую доступ к свойствам через мета-методы __index, __newindex: ```lua print(document.some_button.text) -- где 'some_button' - id элемета document.some_button.text = "новый текст" ``` В скрипте макета `layouts/файл_макета.xml` - `layouts/файл_макета.xml.lua` уже доступна переменная **document** содержащая объект класса Document ```python gui.str(text: str, context: str) -> str ``` Возращает переведенный текст. ```python gui.get_viewport() -> {int, int} ``` Возвращает размер главного контейнера (окна). ```python gui.get_env(document: str) -> table ``` Возвращает окружение (таблица глобальных переменных) указанного документа. ```python get_locales_info() -> таблица таблиц где ключ - id локали в формате isolangcode_ISOCOUNTRYCODE значение - таблица { name: str # название локали на её языке } ``` Возвращает информацию о всех загруженных локалях (res/texts/\*). ## Библиотека *inventory* Библиотека функций для работы с инвентарем. ```python inventory.get(invid: int, slot: int) -> int, int ``` Принимает id инвентаря и индекс слота. Возвращает id предмета и его количество. id = 0 (core:empty) обозначает, что слот пуст. ```python inventory.set(invid: int, slot: int, itemid: int, count: int) ``` Устанавливает содержимое слота. ```python inventory.size(invid: int) -> int ``` Возращает размер инвентаря (число слотов). Если указанного инвентаря не существует, бросает исключение. ```python inventory.add(invid: int, itemid: int, count: int) -> int ``` Добавляет предмет в инвентарь. Если не удалось вместить все количество, возвращает остаток. ```python inventory.get_block(x: int, y: int, z: int) -> int ``` Функция возвращает id инвентаря указанного блока. Если блок не может иметь инвентарь - возвращает 0. ```python inventory.bind_block(invid: int, x: int, y: int, z: int) ``` Привязывает указанный инвентарь к блоку. ```python inventory.unbind_block(x: int, y: int, z: int) ``` Отвязывает инвентарь от блока. > [!WARNING] > Инвентари, не привязанные ни к одному из блоков, удаляются при выходе из мира. ```python inventory.clone(invid: int) -> int ``` Создает копию инвентаря и возвращает id копии. Если копируемого инвентаря не существует, возвращает 0. ```python inventory.move(invA: int, slotA: int, invB: int, slotB: int) ``` Перемещает предмет из slotA инвентаря invA в slotB инвентаря invB. invA и invB могут указывать на один инвентарь. slotB будет выбран автоматически, если не указывать явно. ## Библиотека item ```python item.name(itemid: int) -> str ``` Возвращает строковый id предмета по его числовому id (как block.name) ```python item.index(name: str) -> int ``` Возвращает числовой id предмета по строковому id (как block_index) ```python item.stack_size(itemid: int) -> int ``` Возвращает максимальный размер стопки для предмета. ```python item.defs_count() -> int ``` Возвращает общее число доступных предметов (включая сгенерированные) ```python item.icon(itemid: int) -> str ``` Возвращает имя иконки предмета для использования в свойстве 'src' элемента image ## Библиотека hud ```python hud.open_inventory() ``` Открывает инвентарь ```python hud.close_inventory() ``` Закрывает инвентарь ```python hud.open_block(x: int, y: int, z: int) -> int, str ``` Открывает инвентарь и UI блока. Если блок не имеет макета UI - бросается исключение. Возвращает id инвентаря блока (при *"inventory-size"=0* создаётся виртуальный инвентарь, который удаляется после закрытия), и id макета UI. ```python hud.show_overlay(layoutid: str, playerinv: bool) ``` Показывает элемент в режиме оверлея. Также показывает инвентарь игрока, если playerinv - **true** > [!NOTE] > Одновременно может быть открыт только один блок ```python hud.open_permanent(layoutid: str) ``` Добавляет постоянный элемент на экран. Элемент не удаляется при закрытии инвентаря. Чтобы не перекрывать затенение в режиме инвентаря нужно установить z-index элемента меньшим чем -1. В случае тега inventory, произойдет привязка слотов к инвентарю игрока. ```python hud.close(layoutid: str) ``` Удаляет элемент с экрана. ```python hud.get_block_inventory() -> int ``` Дает ID инвентаря открытого блока или 0. ```python hud.get_player() -> int ``` Дает ID игрока, к которому привязан пользовательский интерфейс. ```python hud.pause() ``` Открывает меню паузы. ```python hud.resume() ``` Закрывает меню паузы. ```python hud.is_paused() -> bool ``` Возвращает true если открыто меню паузы. ```python hud.is_inventory_open() -> bool ``` Возвращает true если открыт инвентарь или оверлей. ## Библиотека time ```python time.uptime() -> float ``` Возвращает время с момента запуска движка в секундах. ```python time.delta() -> float ``` Возвращает дельту времени (время прошедшее с предыдущего кадра)