12 KiB
Скриптинг
В качестве языка сценариев используется LuaJIT
Подразделы:
- События движка
- Пользовательский ввод
- Файловая система и сериализация
- Свойства и методы UI элементов
- Сущности и компоненты
- Библиотеки
- Модуль core:bit_converter
- Модуль core:data_buffer
- Модули core:vector2, core:vector3
Аннотации типов данных
В документации к Lua библиотекам используются аннотации типов, не являющиеся частью синтаксиса Lua.
- vector - массив из трех или четырех чисел
- vec2 - массив из двух чисел
- vec3 - массив из трех чисел
- vec4 - массив из четырех чисел
- quat - массив из четырех чисел - кватернион
- matrix - массив из 16 чисел - матрица
require "контентпак:имя_модуля" -- загружает lua модуль из папки modules (расширение не указывается)
Библиотека pack
pack.is_installed(packid: str) -> bool
Проверяет наличие установленного пака в мире
pack.data_file(packid: str, filename: str) -> str
-- и
pack.shared_file(packid: str, filename: str) -> str
Возвращает путь к файлу данных и создает недостающие директории в пути.
- Первый вариант возвращает:
world:data/packid/filename - Второй вариант возвращает:
config:packid/filename
Примеры:
file.write(pack.data_file(PACK_ID, "example.txt"), text)
Для пака containermod запишет текст в файл world:data/containermod/example.txt.
Используйте для хранения данных в мире.
file.write(pack.shared_file(PACK_ID, "example.txt"), text)
Для пака containermod запишет текст в файл config:containermod/example.txt
Используйте для хранения данныхm общих для всех миров.
pack.get_folder(packid: str) -> str
Возвращает путь к папке установленного контент-пака.
pack.is_installed(packid: str) -> bool
Проверяет наличие контент-пака в мире
pack.get_installed() -> массив строк
Возращает id всех установленных в мире контент-паков.
pack.get_available() -> массив строк
Возвращает id всех доступных, но не установленных в мире контент-паков.
pack.get_base_packs() -> массив строк
Возвращает id всех базовых паков (неудаляемых)
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
world.get_list() -> массив таблиц {
name: str,
icon: str
}
Возвращает информацию о мирах: название и предпросмотр (автоматически загружаемая текстура).
world.get_day_time() -> number
Возвращает текущее игровое время от 0.0 до 1.0, где 0.0 и 1.0 - полночь, 0.5 - полдень.
world.set_day_time(time: number)
Устанавливает указанное игровое время.
world.set_day_time_speed(value: number)
Устанавливает указанную скорость для игрового времени.
world.get_day_time_speed() -> number
Возвращает скорость для игрового времени.
world.get_total_time() -> number
Возвращает общее суммарное время, прошедшее в мире
world.get_seed() -> int
Возвращает зерно мира.
world.exists() -> bool
Проверяет существование мира по имени.
world.is_day() -> bool
Проверяет является ли текущее время днём. От 0.2(8 утра) до 0.8(8 вечера)
world.is_night() -> bool
Проверяет является ли текущее время ночью. От 0.8(8 вечера) до 0.2(8 утра)
Библиотека gui
Библиотека содержит функции для доступа к свойствам UI элементов. Вместо gui следует использовать объектную обертку, предоставляющую доступ к свойствам через мета-методы __index, __newindex:
print(document.some_button.text) -- где 'some_button' - id элемета
document.some_button.text = "новый текст"
В скрипте макета layouts/файл_макета.xml - layouts/файл_макета.xml.lua уже доступна переменная document содержащая объект класса Document
gui.str(text: str, context: str) -> str
Возращает переведенный текст.
gui.get_viewport() -> {int, int}
Возвращает размер главного контейнера (окна).
gui.get_env(document: str) -> table
Возвращает окружение (таблица глобальных переменных) указанного документа.
get_locales_info() -> таблица таблиц где
ключ - id локали в формате isolangcode_ISOCOUNTRYCODE
значение - таблица {
name: str # название локали на её языке
}
Возвращает информацию о всех загруженных локалях (res/texts/*).
Библиотека inventory
Библиотека функций для работы с инвентарем.
inventory.get(invid: int, slot: int) -> int, int
Принимает id инвентаря и индекс слота. Возвращает id предмета и его количество. id = 0 (core:empty) обозначает, что слот пуст.
inventory.set(invid: int, slot: int, itemid: int, count: int)
Устанавливает содержимое слота.
inventory.size(invid: int) -> int
Возращает размер инвентаря (число слотов). Если указанного инвентаря не существует, бросает исключение.
inventory.add(invid: int, itemid: int, count: int) -> int
Добавляет предмет в инвентарь. Если не удалось вместить все количество, возвращает остаток.
inventory.get_block(x: int, y: int, z: int) -> int
Функция возвращает id инвентаря указанного блока. Если блок не может иметь инвентарь - возвращает 0.
inventory.bind_block(invid: int, x: int, y: int, z: int)
Привязывает указанный инвентарь к блоку.
inventory.unbind_block(x: int, y: int, z: int)
Отвязывает инвентарь от блока.
Warning
Инвентари, не привязанные ни к одному из блоков, удаляются при выходе из мира.
inventory.clone(invid: int) -> int
Создает копию инвентаря и возвращает id копии. Если копируемого инвентаря не существует, возвращает 0.
inventory.move(invA: int, slotA: int, invB: int, slotB: int)
Перемещает предмет из slotA инвентаря invA в slotB инвентаря invB. invA и invB могут указывать на один инвентарь. slotB будет выбран автоматически, если не указывать явно.
Библиотека hud
hud.open_inventory()
Открывает инвентарь
hud.close_inventory()
Закрывает инвентарь
hud.open_block(x: int, y: int, z: int) -> int, str
Открывает инвентарь и UI блока. Если блок не имеет макета UI - бросается исключение.
Возвращает id инвентаря блока (при "inventory-size"=0 создаётся виртуальный инвентарь, который удаляется после закрытия), и id макета UI.
hud.show_overlay(layoutid: str, playerinv: bool)
Показывает элемент в режиме оверлея. Также показывает инвентарь игрока, если playerinv - true
Note
Одновременно может быть открыт только один блок
hud.open_permanent(layoutid: str)
Добавляет постоянный элемент на экран. Элемент не удаляется при закрытии инвентаря. Чтобы не перекрывать затенение в режиме инвентаря нужно установить z-index элемента меньшим чем -1. В случае тега inventory, произойдет привязка слотов к инвентарю игрока.
hud.close(layoutid: str)
Удаляет элемент с экрана.
hud.get_block_inventory() -> int
Дает ID инвентаря открытого блока или 0.
hud.get_player() -> int
Дает ID игрока, к которому привязан пользовательский интерфейс.
hud.pause()
Открывает меню паузы.
hud.resume()
Закрывает меню паузы.
hud.is_paused() -> bool
Возвращает true если открыто меню паузы.
hud.is_inventory_open() -> bool
Возвращает true если открыт инвентарь или оверлей.
Библиотека time
time.uptime() -> float
Возвращает время с момента запуска движка в секундах.
time.delta() -> float
Возвращает дельту времени (время прошедшее с предыдущего кадра)