Перейти к содержимому

Storage

Storage — обычная Lua-таблица для локальных данных текущего модуля. Она доступна только в клиентской Lua-части; в Reflex server.lua глобальный Storage равен nil.

Storage не имеет собственного интерфейса и не синхронизируется с сервером или другими игроками. Значения видит только код этого модуля на текущем клиенте; чтобы показать их пользователю, отрисуйте их через UI или ImGui.

Во время работы Storage является обычной таблицей в Lua-окружении модуля. При сохранении состояния клиентский менеджер модуля сериализует поддерживаемые значения, а при следующей загрузке восстанавливает их в новую таблицу. Неподдерживаемые значения не становятся постоянными.

Присваивание меняет только локальное состояние. Оно не отправляет событие, не обновляет Config и не уведомляет другой код автоматически.

if Storage.Settings == nil then
Storage.Settings = {
ShowHints = true,
Scale = 1
}
end
Storage.Settings.Scale = 1.25

Данные изолированы по модулям: другой модуль не получает эту таблицу.

Lua-значение Сохраняется
string
number
boolean, включая false
вложенная table
nil удаляет ключ
Vector2, Vector3, Color и другие userdata
function

Неподдерживаемые значения молча отбрасываются при сериализации.

Для структуры вроде Vector3 сохраните отдельные числа:

local position = Vector3.new(10, 2, 5)
Storage.Position = {
x = position.x,
y = position.y,
z = position.z
}
local saved = Storage.Position
local restored = Vector3.new(saved.x, saved.y, saved.z)

Игра сохраняет Storage при штатном выключении модуля и загружает его при следующем включении.

Присвойте ключу nil, затем штатно выключите модуль:

Storage.LegacyValue = nil
Storage.OldSettings = nil

После следующего включения удалённые ключи останутся nil.

Храните данные под одним версионируемым ключом. Так миграции проще контролировать:

if Storage.Data == nil or Storage.Data.Version ~= 1 then
Storage.Data = {
Version = 1,
Enabled = true,
Opacity = 0.8
}
end

Storage.Position = Vector3.one работает в текущей Lua-таблице, но значение исчезает при сериализации. Преобразуйте вектор в таблицу чисел.

Если false является допустимым сохранённым значением, отличайте его от отсутствующего ключа:

if Storage.Enabled == nil then
Storage.Enabled = true
end

Составные значения: Vector2, Vector3 и Color нужно сохранять как таблицы чисел.