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

Config

config.json объявляет настройки, которые игра показывает пользователю. В Lua их актуальные значения находятся в глобальной таблице Config.

Config доступен в main.lua и Reflex server.lua. Если параметров нет, это пустая таблица.

Настройки из config.json появляются во встроенном экране настроек выбранного модуля; модулю не нужно рисовать контролы самостоятельно. Таблица Config содержит значения, но её изменение из Lua не является способом обновлять этот экран или сохранять новый пользовательский default. Для локальных данных времени выполнения используйте Storage.

Игра читает config.json, проверяет типы и ограничения, создаёт встроенные контролы и заполняет таблицу Config сохранёнными значениями. Код модуля только читает получившуюся таблицу и сам решает, где применить параметр.

Изменение настройки в интерфейсе сохраняет значение и заново заполняет клиентскую таблицу Config. В Reflex server значения передаются при загрузке или перезагрузке серверной части модуля; Config не является отдельным сетевым каналом для команд времени выполнения.

Файл лежит в корне модуля. Корень обязательно является JSON-массивом:

[
{
"label": "Show panel",
"key": "ShowPanel",
"type": "bool",
"value": true
},
{
"label": "Panel scale",
"key": "PanelScale",
"type": "number",
"value": 1,
"min": 0.5,
"max": 2
}
]

Использование в Lua:

if Config.ShowPanel then
local scale = Config.PanelScale
-- Отрисовать панель
end
Поле Тип Описание
label string Подпись настройки в интерфейсе.
key string Ключ значения в таблице Config.
type string Тип настройки.
value зависит от типа Начальное значение.
min number Необязательный минимум для number.
max number Необязательный максимум для number.
options string[] Варианты для enum и maskenum.

Имена полей пишутся в нижнем регистре, как в примерах.

{
"label": "Show panel",
"key": "ShowPanel",
"type": "bool",
"value": true
}

В Lua возвращается boolean.

{
"label": "Panel scale",
"key": "PanelScale",
"type": "number",
"value": 1,
"min": 0.5,
"max": 2
}

В Lua возвращается number. При загрузке значение ограничивается диапазоном min…max. Значение 999 с max = 20 стало 20, а -999 с min = 0 стало 0.

{
"label": "Panel color",
"key": "PanelColor",
"type": "color",
"value": [0.1, 0.7, 1, 0.8]
}

В Lua возвращается Color. JSON-массив задаёт r, g, b, a. Каждый компонент при загрузке ограничивается диапазоном 0…1.

{
"label": "Panel side",
"key": "PanelSide",
"type": "enum",
"value": 1,
"options": ["Left", "Center", "Right"]
}

В value и Lua используется индекс с нуля:

Option Значение
Left 0
Center 1
Right 2
{
"label": "Visible sections",
"key": "VisibleSections",
"type": "maskenum",
"value": ["Health", "Ammo"],
"options": ["Health", "Armor", "Ammo"]
}

В Lua возвращается числовая битовая маска. Для первого и третьего options результат равен 5 (1 + 4).

Option Бит
первый 1
второй 2
третий 4

Config является обычной Lua-таблицей. Код может временно заменить значение, даже выйдя за min/max:

Config.PanelScale = 999

Ограничения файла при таком присваивании не применяются. Но после изменения любой настройки через интерфейс игра заново заполняет всю клиентскую таблицу актуальными сохранёнными значениями.

Используйте Config как источник пользовательских настроек, а не как постоянное хранилище. Для собственных данных предназначен Storage.

Объявленные параметры доступны в server.lua после загрузки скрипта. Есть важное отличие жизненного цикла:

  • изменение настройки в UI сразу заново заполняет клиентский Config;
  • уже запущенная таблица в server.lua не обновилась;
  • после hot reload server.lua сервер получил сохранённые значения.

Не ожидайте, что сервер увидит изменение настройки в тот же момент без перезагрузки серверного скрипта или явной передачи значения через Network.

  • корневой JSON-объект вместо массива;
  • строковое значение для enum вместо числового индекса;
  • ожидание таблицы строк от maskenum вместо числовой маски;
  • использование Config для постоянных внутренних данных модуля.