Сохранение состояния
Задача: модуль должен помнить, был ли его HUD скрыт при прошлом штатном выключении.
if Storage.Layout == nil then Storage.Layout = { version = 1, visible = true }end
local Visible = Storage.Layout.visiblelocal ToggleAction = InputActions:FindAction("TogglePanel")
if ToggleAction ~= nil then ToggleAction:OnPerformed(function() Visible = not Visible Storage.Layout.visible = Visible end)end
Scheduler:OnFrame(function() if Visible then ImGui:DrawDebugText("Persistent panel") endend)false не считается отсутствующим значением. Инициализируется вся таблица только при Storage.Layout == nil.
Версия структуры
Заголовок раздела «Версия структуры»При изменении формата выполните простую миграцию:
if Storage.Layout == nil or Storage.Layout.version ~= 2 then local oldVisible = true
if Storage.Layout ~= nil and Storage.Layout.visible ~= nil then oldVisible = Storage.Layout.visible end
Storage.Layout = { version = 2, visible = oldVisible, compact = false }endОграничения
Заголовок раздела «Ограничения»- сохраняются string, number, boolean и вложенные таблицы;
- userdata вроде
Vector3нужно разложить на числа; - присваивание
nilудаляет ключ после сохранения; - hot reload не сериализует текущее состояние;
- для проверки выключите модуль штатно и включите снова.
Справочник: Storage, InputAction и Vector3 для сериализации составных значений.