Создание функции. Проблемка.

A S K I T

Активный
Автор темы
200
69
Версия MoonLoader
.026-beta
Приветикс.
Создаю функцию вот таким образом:
Lua:
function imgui.sInputInt(title, var, var_string, is1, is2)
    if imgui.InputInt(u8(title), var, is1, is1) then
        cfg.settings[var_string] = var.v
        inicfg.save(cfg, direct_cfg)
    end
end

Данный способ мне подсказали в одном из моих вопросов.
Но тут есть неудобная штука - мне приходится дважды писать одни и те-же символы, вот пример:
Lua:
imgui.sInputInt('Введите число', tutchislo, 'tutchislo', 0, 0)

Можно как-то сделать чтобы переменная (которая пишется без ковычек), сама превращалась в строку, или наоборот, чтобы я просто мог написать вот так:
Lua:
imgui.sInputInt('Введите число', tutchislo, 0, 0)

Это нужно потому-что var и var_string это по сути один и тот-же набор букв, и не хочется постоянно вводить их.
1639340687872.png
 
Решение
Единственный адекватный метод, который ты можешь использовать
Любыми другими способами скорее всего не сделать, так как это идет двумерная таблица и ты не можешь обращаться к ней через квадратные скобки (либо использовать json)
Lua:
function imgui.sInputInt(t, v, c)
    if imgui.InputInt(u8(t), v) then
        c = v.v
        inicfg.save(...)
    end
end

local cfg = { player = { age = 0 } }
local age = imgui.ImInt(cfg.player.age)
imgui.sInputInt("Title", age, cfg.player.age)

A S K I T

Активный
Автор темы
200
69
Lua:
cfg.settings[tostring(var.v)] = var.v
а как сделать чтобы вместо "settings" была другая переменная, которую я задам в аргументе?

Lua:
cfg.settings[tostring(var.v)] = var.v
Этот способ в конфиге создаёт новые переменные, если я пишу 123, то в конфиг сохранится:
1=1
12=12
123=123
А нужная переменная не изменит значение.
 
Последнее редактирование:

chapo

чопа сребдс // @moujeek
Модератор
8,934
11,700
а как сделать чтобы вместо "settings" была другая переменная, которую я задам в аргументе?


Этот способ в конфиге создаёт новые переменные, если я пишу 123, то в конфиг сохранится:
1=1
12=12
123=123
А нужная переменная не изменит значение.
я не оч понял, тебе нужно изменить значение в ключе, а самим ключом является var или как?
 

A S K I T

Активный
Автор темы
200
69
я не оч понял, тебе нужно изменить значение в ключе, а самим ключом является var или как?
Lua:
cfg = inicfg.load(inicfg.load({
    player = {
        age = 0,
    },
}, direct_cfg))


age = imgui.ImInt(cfg.player.age)


function imgui.OnDrawFrame()
    if window_main.v then
        imgui.SetNextWindowPos(imgui.ImVec2(resX/2, resY/2), 2, imgui.ImVec2(0.5, 0.5))
        imgui.Begin(script_name..' '..script_version, window_main, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize)
          
            imgui.sInputInt('Ваш возраст', player, age, 0, 0)

        imgui.End()
    end
end


function imgui.sInputInt(title, array, var, is1, is2)
    if imgui.InputInt(u8(title), array, var, is1, is2) then
        cfg.array.var = var.v
        inicfg.save(cfg, direct_cfg)
    end
end

Не знаю понятно или нет, нужно чтобы я написал:
Lua:
imgui.sInputInt('Введите ваш возраст', player, age, 0, 0)
И в конфиг оно сохранилось вот так:
[player]
age = 23

 

Вложения

  • 1639343813437.png
    1639343813437.png
    33.8 KB · Просмотры: 10

meowprd

Тот самый Котовский
Проверенный
1,278
720
Единственный адекватный метод, который ты можешь использовать
Любыми другими способами скорее всего не сделать, так как это идет двумерная таблица и ты не можешь обращаться к ней через квадратные скобки (либо использовать json)
Lua:
function imgui.sInputInt(t, v, c)
    if imgui.InputInt(u8(t), v) then
        c = v.v
        inicfg.save(...)
    end
end

local cfg = { player = { age = 0 } }
local age = imgui.ImInt(cfg.player.age)
imgui.sInputInt("Title", age, cfg.player.age)
 
Последнее редактирование: