Сохранение и загрузка данных
Хранение данных в сохранённых играх может понадобиться как системным скриптам, так и обычным. ЕРМ-память сохраняется и загружается автоматически.
Lua-данные для сохранения рекомендуется хранить в одной таблице. Нужно подписаться на события сохранения и загрузки, в которых вызвать функции, сохраняющие таблицу под уникальным именем или загружающие таблицу по уникальному имени.
Для примера создадим таблицу с данными, которые нужно хранить в сохранённых играх:
Code:
local save = {
mithril = 100 -- количество нового ресурса
}
После чего подпишемся на два события, в которых будем сохранять/загружать таблицу
save:
Code:
era.on('OnLuaSavegameWrite', function ()
era.writeSavegame(save, 'ErmToLua.Manual')
end)
era.on('OnLuaSavegameRead', function ()
save = era.readSavegame('ErmToLua.Manual') or {}
if not save.mithril then
save.mithril = 0
end
end)
OnLuaSavegameWrite возникает, когда нужно записывать таблицу в сохранёнку. Для этого используется функция
era.writeSavegame(таблица, уникальное имя).
При загрузке игры (событие
OnLuaSavegameRead) мы получаем таблицу по уникальному имени. Конструкция "or {}" возвращает пустую таблицу, если
era.readSavegame вернула nil (данные не найдены). Такой подход позволяет загружать сохранённую игру, для которой скрипт ранее не использовался. Соответственно, далее идёт проверка на существование поля в таблице. Если поле отсутствует (старая версия скрипта или сохранение без скрипта), то ему присваивается значение по умолчанию.
Теперь можно работать с save.mithril как обычной переменной: выводить количество мифрила, увеличивать/уменьшать и т.д.
Примечание: в реальном примере мифрил лучше хранить для каждого игрока: local mithril = {0, 0, 0, 0, 0, 0, 0, 0}