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

Помощник применения конфига

@bs_config/shared/apply.lua делает так, что изменения из F1 доходят до вашего ресурса.

Последний общий скрипт, после ваших файлов конфигурации:

shared_scripts { 'config/config.lua' }
-- ...
shared_script '@bs_config/shared/apply.lua'
  • При запуске и при каждом изменении сервер отправляет нагрузку { _global = {...}, <resource> = { ['Path.To.key'] = value } } через bs_config:apply.
  • Помощник берёт часть для вашего ресурса и правит ваши глобальные таблицы на месте: MyRes.Settings.reward = 75.
  • Он трогает только ключи, которые уже существуют с тем же типом. Конфиг он не выдумывает.
  • Когда переопределение снимается, он возвращает исходное значение.
  • После каждого применения он вызывает bs_config:changed:<resource>, чтобы вы могли реагировать:
AddEventHandler('bs_config:changed:' .. GetCurrentResourceName(), function()
rebuildSomething()
end)
local mult = BSConfigGet('Global.xpMultiplier', 1.0) -- globals or your own paths, no export call
-- or from anywhere:
local size = exports.bs_config:Get('bs_factions:Factions.Squad.maxSize')

Экспорты: Get(key, default), GetPayload(), GetActiveProfile(), на обеих сторонах.

Правки таблицы достаточно, когда ваш код читает таблицу каждый раз:

-- live: sees the new value next call
local function reward() return RadioTower.Settings.reward end

Этого недостаточно, когда вы копируете её в локальную переменную при загрузке:

-- cached: F1 changes do nothing until restart
local REWARD = RadioTower.Settings.reward

bs_config распознаёт такой шаблон (верхнеуровневый local x = Cfg.key) и помечает настройку как «перезапуск». Лучше читать таблицу.

Добавьте строки в bs_config/shared/schema.lua. Id - это <resource>:<path>, с типом, min/max/step, категорией, описанием и флагом live. Значение по умолчанию читается из вашего файла во время работы, значение fb в схеме - только запасное. Добавляйте только ключи, которые действительно есть в вашем конфиге.