как это исправить?

$Mr.R1ch$

Активный
Автор темы
262
40
Версия MoonLoader
Другое
Приветствую, столкнулся с очень интересной проблемой. Есть у меня INI таблица в которой содержатся индексы, которые равны булевым значениям (true/false), и есть кнопка mimgui которая переключает состояние этих переменных.
Проблема: так как индексы у меня идут не по порядку (не 18, 19, 20 с 18, 22, 23 и ТД) то соответственно переменные переключаются неправильно, а эти индексы приравниваются к id оружию, поэтому поменять индексы не вариант.

Lua:
local guncfg = inicfg.load({
weapon_state = {
       [1] = true,
       [2] = false,
       [3] = true,
       [4] = false,
       [5] = true,
       [6] = false,
       [7] = false,
       [8] = false,
       [9] = false,
       [10] = false,
       [11] = false,
       [12] = false,
       [13] = false,
       [14] = true,
       [15] = true,
       [16] = false,
       [17] = true,
       [18] = false,
       [22] = false,
       [23] = true,
       [24] = true,
       [25] = true,
       [26] = false,
       [27] = false,
       [28] = false,
       [29] = true,
       [30] = true,
       [31] = true,
       [32] = false,
       [33] = true,
       [34] = true,
       [35] = false,
       [36] = false,
       [37] = false,
       [38] = false,
       [39] = false,
       [41] = false,
       [42] = false,
       [43] = true,
       [46] = true
    }
}, "Example/test.ini")
inicfg.save(guncfg, "Example/test.ini")

if imgui.Button(guncfg.weapon_state[index] and u8'Отключить' or u8'Включить', imgui.ImVec2(990, 40)) then
   guncfg.weapon_state[index] = not           guncfg.weapon_state[index]
 
 inicfg.save(guncfg, "Example/test.ini")
                 end
 
  • Клоун
Реакции: Vespan, XRLM и Corenale

Vintik

Через тернии к звёздам
Проверенный
1,546
1,018
поэтому поменять индексы не вариант.
Вариант. Две таблицы (в одной будет ID оружия, во второй в том же порядке true/false).
Вот такое:
Lua:
weapon_state =
{
    ...
    [18] = true,
    [22] = false,
    [23] = false,
    ...
}
Перейдёт в вот такое:
Lua:
weapon_state =
{
    ...
    true, -- индекс 18
    false, -- индекс 19
    false, -- индекс 20
    ...
}

weapon_id =
{
    ...
    18, -- индекс 18
    22, -- индекс 19
    23, -- индекс 20
    ...
}
И получать свой true/false будешь вот так:
Lua:
-- пытаемся найти состояние оружия GUN_ID (для примера)

local ind = -1
for i = 1, #weapon_id do
    if weapon_id == GUN_ID then -- находим поле с нашим оружием
        ind = i -- записываем его индекс
        break
    end
end

print(weapon_state[ind])
 
  • Нравится
Реакции: Vespan и stach

wojciech?

Известный
Проверенный
351
231
Lua:
local guncfg = inicfg.load({
   weapon_state = {
      [1] = true,
      [2] = false,
      [3] = true,
      [4] = false,
      [5] = true,
      [6] = false,
      [7] = false,
      [8] = false,
      [9] = false,
      [10] = false,
      [11] = false,
      [12] = false,
      [13] = false,
      [14] = true,
      [15] = true,
      [16] = false,
      [17] = true,
      [18] = false,
      [22] = false,
      [23] = true,
      [24] = true,
      [25] = true,
      [26] = false,
      [27] = false,
      [28] = false,
      [29] = true,
      [30] = true,
      [31] = true,
      [32] = false,
      [33] = true,
      [34] = true,
      [35] = false,
      [36] = false,
      [37] = false,
      [38] = false,
      [39] = false,
      [41] = false,
      [42] = false,
      [43] = true,
      [46] = true
   }
}, "Example/test.ini")
inicfg.save(guncfg, "Example/test.ini")


for index = 1, 46 do
   if type(guncfg.weapon_state[index]) == "boolean" then
      if imgui.Button(guncfg.weapon_state[index] and u8'Отключить' or u8'Включить', imgui.ImVec2(990, 40)) then
         guncfg.weapon_state[index] = not guncfg.weapon_state[index]
         inicfg.save(guncfg, "Example/test.ini")
      end
   end
end

хватит страдать и пора перейти на json
и перестань смотреть в ютуб
и как это тут поможет?
 

Vintik

Через тернии к звёздам
Проверенный
1,546
1,018
Lua:
for index = 1, 46 do
    if type(guncfg.weapon_state[index]) == "boolean" then
Вспоминается цитата из романа Ильфа и Петрова: «Свет не видывал еще такого голубого воришки, как Александр Яковлевич».
Так вот, свет не видовал такого костыльного решения. Ведь ID оружия могли быть ID моделей, и там надо перебирать до сотен тысяч ради 10, условно, разных моделей. Однако, для этой задачи оно подходит (до того момента, пока он не решит портировать это на Аризону, где у новых оружий ID достигают десятков тысяч).
и как это тут поможет?
хватит страдать и пора перейти на json
Гениальные мысли его преследовали, но...
JSON выдаст тебе такую же таблицу, а ID-шники перебирать ты как будешь?
Ничем совет не поможет...
 

wojciech?

Известный
Проверенный
351
231
Вспоминается цитата из романа Ильфа и Петрова: «Свет не видывал еще такого голубого воришки, как Александр Яковлевич».
Так вот, свет не видовал такого костыльного решения. Ведь ID оружия могли быть ID моделей, и там надо перебирать до сотен тысяч ради 10, условно, разных моделей. Однако, для этой задачи оно подходит (до того момента, пока он не решит портировать это на Аризону, где у новых оружий ID достигают десятков тысяч).
какой вопрос, такой и ответ)
в указанных условиях, вполне себе решение
 
  • Нравится
Реакции: Vintik

$Mr.R1ch$

Активный
Автор темы
262
40
Lua:
local guncfg = inicfg.load({
   weapon_state = {
      [1] = true,
      [2] = false,
      [3] = true,
      [4] = false,
      [5] = true,
      [6] = false,
      [7] = false,
      [8] = false,
      [9] = false,
      [10] = false,
      [11] = false,
      [12] = false,
      [13] = false,
      [14] = true,
      [15] = true,
      [16] = false,
      [17] = true,
      [18] = false,
      [22] = false,
      [23] = true,
      [24] = true,
      [25] = true,
      [26] = false,
      [27] = false,
      [28] = false,
      [29] = true,
      [30] = true,
      [31] = true,
      [32] = false,
      [33] = true,
      [34] = true,
      [35] = false,
      [36] = false,
      [37] = false,
      [38] = false,
      [39] = false,
      [41] = false,
      [42] = false,
      [43] = true,
      [46] = true
   }
}, "Example/test.ini")
inicfg.save(guncfg, "Example/test.ini")


for index = 1, 46 do
   if type(guncfg.weapon_state[index]) == "boolean" then
      if imgui.Button(guncfg.weapon_state[index] and u8'Отключить' or u8'Включить', imgui.ImVec2(990, 40)) then
         guncfg.weapon_state[index] = not guncfg.weapon_state[index]
         inicfg.save(guncfg, "Example/test.ini")
      end
   end
end


и как это тут поможет?
не работает к сожалению... мало того что кнопок стало столько же, сколько индексов в таблице, так ещё и переключает неправильно.
 

imring

Ride the Lightning
Всефорумный модератор
2,362
2,546
дай уникальные названия кнопкам
Lua:
local name = guncfg.weapon_state[index] and u8'Отключить' or u8'Включить'
imgui.Button(name..'##'..index, imgui.ImVec2(990, 40))

 

$Mr.R1ch$

Активный
Автор темы
262
40
дай уникальные названия кнопкам
Lua:
local name = guncfg.weapon_state[index] and u8'Отключить' or u8'Включить'
imgui.Button(name..'##'..index, imgui.ImVec2(990, 40))

теперь переключает нормально, но как убрать множество кнопок? надо чтобы одна была
 
  • Эм
Реакции: Corenale