Lua: LuaMarshal - ixray-team/ixray-1.6-stcop GitHub Wiki

Обзор

[!IMPORTANT]
Статус: Поддерживается Минимальная версия: 1.0

Утилита сохранения/загрузки, использующая Lua Marshal предоставляет служебные функции для сохранения и загрузки состояния игры. Она абстрагирует процессы сериализации и десериализации, позволяя легко сохранять состояние игры между сеансами.

Функции

  • saveToMarshalFile(stateTable): сериализует заданную таблицу Lua (stateTable) и сохраняет её в файл. Полезно для сохранения состояний игры, конфигураций или сохранения любых других табличных данных.

  • loadFromMarshalFile(): считывает сериализованную таблицу Lua из файла, десериализует её и возвращает таблицу Lua. Полезно для загрузки сохраненных состояний игры, конфигураций или загрузки любых других ранее сохраненных табличных данных.

Использование

Аналогично исходным функциям save(f), load(r) мы можем использовать функции save_state(), load_state() для записи в .dat файлы информации. Для этого необходимо зарегистрировать эти функции в биндерах аналогично save(f), load(r), после чего мы можем их использовать следующим образом:

function save_state()
    local gameState = {
        score = 1000,
        level = 5,
        player = {
            name = "Player",
            items = {"x", "y", "z"}
        }
    }
    save_manager.saveToMarshalFile(gameState)
end

Для загрузки

function load_state()
    local gameState = save_manager.loadFromMarshalFile()

    if gameState then
        score = gameState.score
        level = gameState.level

        if gameState.player then
            player.name = gameState.player.name
            player.items = gameState.player.items
        end
    end
end

Преимущества

Данный метод абстрагирует данные в отдельный .dat файл, изолируя их от .scop файла сохранения; запись данных не имеет верхнего ограничения, данный метод более стабилен и не провоцирует ситуации с "битыми" файлами сохранений.

Недостатки

Данный метод принимает только допустимые типы Lua, такие как числа, строки, логические значения, таблицы (которые содержат эти допустимые типы) или функции. Пользовательские данные (userdata) не поддерживаются.