Skip to content

Lua: LuaMarshal

ggGhosTt edited this page Mar 19, 2024 · 1 revision

Утилита сохранения/загрузки, использующая 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) не поддерживаются.

Clone this wiki locally