Current time: 18.11.2018, 00:38 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERM => Lua FAQ
» Вопросы - Ответы
Author Message
Berserker Offline
Administrators

Posts: 10642
Post: #4

Сохранение и загрузка данных

Хранение данных в сохранённых играх может понадобиться как системным скриптам, так и обычным. ЕРМ-память сохраняется и загружается автоматически.

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}


Скачать Герои 3 Эра и всё, что с ней связано
06.01.2018 03:43
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Messages In This Thread
ERM => Lua FAQ - Berserker - 05.01.2018, 15:46
RE: ERM => Lua FAQ - Berserker - 05.01.2018, 16:11
RE: ERM => Lua FAQ - Berserker - 05.01.2018, 17:04
RE: ERM => Lua FAQ - Berserker - 06.01.2018 03:43

Forum Jump:

Powered by MyBB Copyright © 2002-2018 MyBB Group