Config
config.json объявляет настройки, которые игра показывает пользователю. В Lua их актуальные значения находятся в глобальной таблице Config.
Config доступен в main.lua и Reflex server.lua. Если параметров нет, это пустая таблица.
Настройки из config.json появляются во встроенном экране настроек выбранного модуля; модулю не нужно рисовать контролы самостоятельно. Таблица Config содержит значения, но её изменение из Lua не является способом обновлять этот экран или сохранять новый пользовательский default. Для локальных данных времени выполнения используйте Storage.
Как проходит значение настройки
Заголовок раздела «Как проходит значение настройки»Игра читает config.json, проверяет типы и ограничения, создаёт встроенные контролы и заполняет таблицу Config сохранёнными значениями. Код модуля только читает получившуюся таблицу и сам решает, где применить параметр.
Изменение настройки в интерфейсе сохраняет значение и заново заполняет клиентскую таблицу Config. В Reflex server значения передаются при загрузке или перезагрузке серверной части модуля; Config не является отдельным сетевым каналом для команд времени выполнения.
Минимальный config.json
Заголовок раздела «Минимальный config.json»Файл лежит в корне модуля. Корень обязательно является 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 |
maskenum
Заголовок раздела «maskenum»{ "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
Заголовок раздела «Изменение Config из Lua»Config является обычной Lua-таблицей. Код может временно заменить значение, даже выйдя за min/max:
Config.PanelScale = 999Ограничения файла при таком присваивании не применяются. Но после изменения любой настройки через интерфейс игра заново заполняет всю клиентскую таблицу актуальными сохранёнными значениями.
Используйте Config как источник пользовательских настроек, а не как постоянное хранилище. Для собственных данных предназначен Storage.
Reflex server
Заголовок раздела «Reflex server»Объявленные параметры доступны в server.lua после загрузки скрипта. Есть важное отличие жизненного цикла:
- изменение настройки в UI сразу заново заполняет клиентский
Config; - уже запущенная таблица в
server.luaне обновилась; - после hot reload
server.luaсервер получил сохранённые значения.
Не ожидайте, что сервер увидит изменение настройки в тот же момент без перезагрузки серверного скрипта или явной передачи значения через Network.
Частые ошибки
Заголовок раздела «Частые ошибки»- корневой JSON-объект вместо массива;
- строковое значение для
enumвместо числового индекса; - ожидание таблицы строк от
maskenumвместо числовой маски; - использование
Configдля постоянных внутренних данных модуля.