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

Настройки, ввод и данные

Три механизма решают разные задачи:

Механизм Для чего используется
Config Настройки, которые пользователь меняет в интерфейсе модуля.
InputActions Кнопки и другие действия управления.
Storage Внутренние локальные данные между включениями модуля.

config.json содержит JSON-массив настроек:

[
{
"label": "Show status",
"key": "ShowStatus",
"type": "bool",
"value": true
},
{
"label": "Text size",
"key": "TextSize",
"type": "number",
"value": 18,
"min": 12,
"max": 32
}
]
if Config.ShowStatus then
ImGui:DrawText(
"Active",
Rect.new(20, 20, 180, 40),
Config.TextSize,
Color.new(1, 1, 1),
TextAnchor.MiddleLeft
)
end

Не используйте Config как хранилище: игра заново заполняет таблицу сохранёнными настройками после изменения UI.

inputs.json:

{
"Actions": [
{
"Name": "ToggleStatus",
"Type": "Button",
"Binding": {
"Path": "<Keyboard>/f8"
}
}
]
}

main.lua:

local action = InputActions:FindAction("ToggleStatus")
local visible = true
if action ~= nil then
action:OnPerformed(function()
visible = not visible
end)
end

Проверяйте nil: действие с другим именем или неверным описанием не будет найдено.

if Storage.StatusVisible == nil then
Storage.StatusVisible = true
end
local visible = Storage.StatusVisible
local function Toggle()
visible = not visible
Storage.StatusVisible = visible
end

false является допустимым значением, поэтому начальное состояние проверяется через == nil, а не if not ....

Config, InputActions и Storage относятся к клиенту. Серверная часть получает собственный Config при загрузке, но не видит клиентский ввод и Storage.

Если серверу нужно актуальное клиентское состояние, отправьте небольшую проверенную таблицу через Network.

Подробности форматов: Config, InputAction и Storage.