voxelcore/doc/ru/scripting/filesystem.md
2026-07-24 00:19:32 +03:00

4.4 KiB
Raw Permalink Blame History

Файловая система и сериализация

Библиотека file

См. библиотека file

Библиотека json

Библиотека содержит функции для сериализации и десериализации таблиц:

json.tostring(object: table, human_readable: bool=false) -> str

Сериализует объект в JSON строку. При значении второго параметра true будет использовано многострочное форматирование, удобное для чтения человеком, а не компактное, использующееся по-умолчанию.

json.parse(code: str) -> table

Парсит JSON строку в таблицу.

Библиотека toml

Библиотека содержит функции для сериализации и десериализации таблиц:

toml.tostring(object: table) -> str

Сериализует объект в TOML строку.

toml.parse(code: str) -> table

Парсит TOML строку в таблицу.

Библиотека yaml

Библиотека содержит функции для сериализации и десериализации таблиц:

yaml.tostring(object: table) -> str

Сериализует объект в YAML строку.

yaml.parse(code: str) -> table

Парсит YAML строку в таблицу.

Библиотека xml

Библиотека содержит функции для сериализации и десериализации XML:

Далее XML как тип данных обозначает Lua-таблицу со следующей структурой:

  • Тег элемента доступен по ключу #
  • XML-аттрибуты доступны как пары ключ = значение
  • Вложенные элементы доступны по индексу

Таблица используется как словарь, так и массив.

Пример:

<panel size='400' color='0' interval='1' context='menu'>
    <button onclick='menu.page="worlds"'>@Worlds</button>
</panel>

Эквивалентная Lua-таблица:

{
    ['#'] = "panel",
    size = "400",
    color = "0",
    interval = "1",
    context = "menu",
    {
        ['#'] = "button",
        onclick = 'menu.page="worlds"',
        {
            "@Worlds"
        }
    }
}

Соответственно, элемент button доступен как элемент_panel[1].

-- Сериализует дерево в формате XML
-- multiline - использовать ли многострочное форматирование
xml.tostring(data: XML, multiline: bool = true) -> str

-- Парсит XML
xml.parse(code: str) -> XML

-- Парсит формат VCD (VoxelCore Declaration), используемый форматами VCM и VCA.
-- root_tag - будет неявно создан корневой элемент с указанным тегом,
-- содержащий все корневые элементы
xml.parse_vcd(code: str, root_tag: str | nil = nil) -> XML

Библиотека bjson

Библиотека содержит функции для работы с двоичным форматом обмена данными vcbjson.

-- Кодирует таблицу в массив байт
bjson.tobytes(
    -- кодируемая таблица
    value: table, 
    -- сжатие
    [опционально] compression: bool=true
) -> Bytearray

-- Декодирует массив байт в таблицу
bjson.frombytes(bytes: table | Bytearray) -> table

Сохранение данных в мире

При сохранении данных пака в мире следует использовать функцию

pack.data_file(id_пака: str, имя_файла: str) -> str

Функция возвращает путь к файлу данных по типу: world:data/id_пака/имя_файла и создает недостающие директории в пути.

При использовании путей не соответствующим data/{packid}/... возможна потеря данных при перезаписи мира.