проблема с сохранением inicfg

$Mr.R1ch$

Активный
Автор темы
297
43
Версия MoonLoader
Другое
приветствую, столкнулся с рядом проблем при написании скрипта, сейчас расскажу.

1. Ошибки в сохранении:

Скрипт будет использовать несколько файлов сохранения (ini) и читать оттуда информацию, в коде я сделал так:

Lua:
local ini = inicfg.load({
   main = { -- основные настройки
      f_name = "",
      rang = "",
      phone = 0,
      frak = "",
   },
  commands = { --настройки для команд
     delay = 1.200,
     cmd_id_1 = true,
     cmd_id_2 = true,
     cmd_id_3 = true,
     cmd_id_4 = true,
     cmd_id_5 = true,
     cmd_id_6 = true,
     cmd_id_7 = true,
     cmd_id_8 = true,
     cmd_id_9 = true,
     cmd_id_10 = true,
     cmd_id_11 = true,
     cmd_id_12 = true,
     cmd_id_13 = true,
     cmd_id_14 = true,
     cmd_id_15 = true,
     cmd_id_16 = true,
     cmd_id_17 = true,
     cmd_id_18 = true,
     cmd_id_19 = true,
     cmd_id_20 = true,
     cmd_id_21 = true,
     cmd_id_22 = true,
     cmd_id_23 = true,
     cmd_id_24 = true,
     cmd_id_25 = true
   },
}, "Example/setting.ini") -- тут хз в какой основной файл сохранять, поэтому использую пока один

local del = new.float(ini.commands.delay) -- слайдер для задержки рп отыгровок

local Nickname = new.bool[256](u8(ini.main.f_name)) -- инпут текст


if imgui.InputText("##player_name", Nickname, 256) then
          ini.main.f_name = u8:decode(ffi.string(Nickname))
          inicfg.save(ini, "Example/setting.ini") -- сохранение идёт в первый файл "setting.ini"
end

if imgui.SliderFloat("##delay_cmd", del, 1.000, 5.000) then
              ini.commands.delay = del[0]
              inicfg.save(ini, "MVDHelp/commands.ini") -- сохранение слайдера идёт уже в другой файл "commands.ini"
           end
теперь сама суть проблемы в том, что во второй файл значения сохраняются, но не читается в дальнейшем, а выгядет это так :
setting.ini файл:
[main]
frak =
f_name = Test
rang =
phone = 0

[commands]
cmd_id_2 = true
cmd_id_3 = true
cmd_id_4 = true
cmd_id_5 = true
cmd_id_6 = true
cmd_id_7 = true
cmd_id_8 = true
cmd_id_9 = true
cmd_id_10 = true
cmd_id_11 = true
cmd_id_12 = true
cmd_id_13 = true
cmd_id_14 = true
cmd_id_15 = true
cmd_id_16 = true
cmd_id_17 = true
cmd_id_18 = true
cmd_id_19 = true
cmd_id_20 = true
cmd_id_21 = true
cmd_id_22 = true
cmd_id_23 = true
cmd_id_24 = true
cmd_id_25 = true
delay = 1.2
cmd_id_1 = true

commands.ini файл:
[commands]
cmd_id_21 = true
cmd_id_22 = true
cmd_id_23 = true
cmd_id_24 = true
cmd_id_25 = true
delay = 3.6459999084473
cmd_id_1 = true
cmd_id_2 = true
cmd_id_3 = true
cmd_id_4 = true
cmd_id_5 = true
cmd_id_6 = true
cmd_id_7 = true
cmd_id_8 = true
cmd_id_9 = true
cmd_id_10 = true
cmd_id_11 = true
cmd_id_12 = true
cmd_id_13 = true
cmd_id_14 = true
cmd_id_15 = true
cmd_id_16 = true
cmd_id_17 = true
cmd_id_18 = true
cmd_id_19 = true
cmd_id_20 = true

[main]
phone = 0
frak =
f_name =
rang =
в первой файле, секции "commands" быть не должно, что и во втором файле не должно быть "main", вероятно из за этого не сохраняется нормально, помогите пожалуйста


2. Конвертация SliderFloat в секунды (уже решил, просто в использовании переменной добавил *1000)

Мне нужно сделать так, чтобы SliderFloat был в секундах, то есть:

На слайдере написано что, задержка рп отыгровок 1.500 (полторы секунды), но на деле это 1 миллисекунда, и мне нужно перевести это в секунды (сверху есть под слайдера)

3. Кривые столбы в мимгуи

Делал в мимгуи таблицу команд и добавлял к ним описания, но когда я пишу что то во второй колонке, то все получается очень криво, а сделать ровно никак не могу, хелп

Lua:
imgui.Columns(3)
           imgui.Text(u8'КОМАНДА') imgui.SetColumnWidth(-1, 315)
           imgui.NextColumn()
           imgui.Text(u8'ОПИСАНИЕ') imgui.SetColumnWidth(-1, 970)
           imgui.NextColumn()
           imgui.Text('') imgui.SetColumnWidth(-1, 100)
           imgui.Columns(1)
           imgui.Separator()
           imgui.Columns(3)
           for _, cmd_button in ipairs({'/mm', '/stats', '/su'}) do
              if imgui.Button(cmd_button, imgui.ImVec2(300, 50)) and imgui.SetColumnWidth(100, 200) then
                 setClipboardText(cmd_button)
              end
              --imgui.Separator()
           end
           imgui.NextColumn()
           for _, cmd_text in ipairs({'Команда для тестирования.', 'Команда для ещё одного тестирования', 'И ещё одна команда для тестирования.'}) do
              imgui.Text(u8(cmd_text)) imgui.SetColumnWidth(-1, 970)
             imgui.Separator()
           end
 

Вложения

  • IMG_20241012_084720.jpg
    IMG_20241012_084720.jpg
    156.4 KB · Просмотры: 28
Последнее редактирование:
  • Грустно
Реакции: Howau

$Mr.R1ch$

Активный
Автор темы
297
43
юзай лучше json, меньше мороки
я понимаю что через json легче, но основные настройки будут на ini, а то и то добавлять в один скрипт такое себе, да и тем более, это последняя "сложная" функция на ини
 

Howau

Участник
45
8
я понимаю что через json легче, но основные настройки будут на ini, а то и то добавлять в один скрипт такое себе, да и тем более, это последняя "сложная" функция на ини
Ты от кого услышал, что ini и json плохо в одном скрипте? На работу скрипта это уж точно не влияет.
 

$Mr.R1ch$

Активный
Автор темы
297
43
Ты от кого услышал, что ini и json плохо в одном скрипте? На работу скрипта это уж точно не влияет.
лично я не хочу чтобы ини и джсон были в одном скрипте, поэтому реализую все через ини

юзай лучше json, меньше мороки
бро, помоги с третьей колонкой, расписал в чем проблема
 
Последнее редактирование:

Howau

Участник
45
8
с колонками все ок, но когда я пытаюсь добавить третью колонку (их 3 было), то получается фигня какая то


Ещё проблема одна есть. Используя мета таблицы, я паршу чекбоксы, так как проставлять по 25 штук такая себе идея. Но вот при попытке это сделать, выдает такую ошибку: bool [1]' has no member named 'cmd_id_1 (до этого выдавало ошибку что, string не может конвертироваться в bool)

Lua:
local active_cmd = setmetatable({'cmd_id_1', 'cmd_id_2', 'cmd_id_3', 'cmd_id_4', 'cmd_id_5', 'cmd_id_6', 'cmd_id_7', 'cmd_id_8', 'cmd_id_9', 'cmd_id_10', 'cmd_id_11', 'cmd_id_12', 'cmd_id_13', 'cmd_id_14', 'cmd_id_15', 'cmd_id_16', 'cmd_id_17', 'cmd_id_18', 'cmd_id_19', 'cmd_id_20', 'cmd_id_21', 'cmd_id_22', 'cmd_id_23', 'cmd_id_24', 'cmd_id_25'},
{ -- мета таблица
  __index = function(self, key)
     if not defaultcmd.cmd[key] then
        defaultcmd.cmd[key] = true
     end
     self = imgui.new.bool(defaultcmd.cmd[key])
     return self[key]
  end
})

for index, value in ipairs(active_cmd) do
              if imgui.Checkbox("list_cmd" .. index, active_cmd[value]) then
                 defaultcmd.cmd[value] = active_cmd[value]
                 inicfg.save(defaultcmd, "Example/stand_comand_setting.ini")
              end
           end
1) скинь код, посмотрю, что у тебя там с колонками.
2) естественно у тебя так будет, чек бокс считает, что ты в него вставляешь значение например как check[0] ( local check = new.bool() ), а необходимо вставлять просто check, из-за этого этот способ не будет работать, вроде как можно это реализовать по другому, но я уже не помню как. Так что советую либо поискать, либо воздержаться и писать все от руки.
 

$Mr.R1ch$

Активный
Автор темы
297
43
1) скинь код, посмотрю, что у тебя там с колонками.
2) естественно у тебя так будет, чек бокс считает, что ты в него вставляешь значение например как check[0] ( local check = new.bool() ), а необходимо вставлять просто check, из-за этого этот способ не будет работать, вроде как можно это реализовать по другому, но я уже не помню как. Так что советую либо поискать, либо воздержаться и писать все от руки.
1)
Lua:
imgui.Columns(3)
          
           imgui.Text(u8'КОМАНДА') imgui.SetColumnWidth(-1, 315)
           imgui.NextColumn()
           imgui.Text(u8'ОПИСАНИЕ') imgui.SetColumnWidth(-1, 970)
           imgui.NextColumn()
           imgui.Text(u8'') imgui.SetColumnWidth(-1, 115)
           imgui.Columns(1)
          
           imgui.Columns(3)
           local cmd_descriptions = {
              'Команда для быстрого использования наручников.',
              'Команда для быстрого снятия наручников.',
              'Команда для быстрой погрузки/извлечения саспекта в/из ТС.',
              'Команда для RP - отыгровки извлечения из мотоцикла.',
              'Команда для того чтобы выкинуть из Т/С.',
              'Команда для выписки штрафа.',
              'Команда для использования маски.',
              'Команда для удаления/снятия розыска из базы данных.',
              'Команда для быстрого ареста саспекта.',
              'Команда для выдачи розыска через ручной режим и умную выдачу розыска.',
              'Команда для предоставления и запроса предъявить документы.',
              'Команда для проведения обыска.',
              'Команда для быстрого захвата саспекта в наручниках.',
              'Команда для отмены действия захвата саспектав наручних.',
              'Команда для поиска саспекта по базе данных.',
              'Команда для быстрой RP - отыгровки извлечения из Т/С.',
              'Команда для использования аптечки.',
              'Команда для активации мегафона в режиме погони.',
              'Команда для активации мегафона в режиме трафик-стопа.'
         }
         for i, cmd_button in ipairs({'/cuff', '/uncuff', '/incar', '/inmoto', '/eject', '/ticket', '/mask', '/clear', '/arrest', '/su', '/pas', '/frisk', '/gotome', '/ungotome', '/find', '/pull', '/usemed', '/meg', '/traf'}) do
            imgui.Separator()
            if imgui.Button(cmd_button, imgui.ImVec2(300, 50)) then
               setClipboardText(cmd_button)
            end
            
             imgui.NextColumn()
             imgui.Text(u8(cmd_descriptions[i]))
 
             imgui.NextColumn()
         end
 
         imgui.Columns(1)
         imgui.Separator()
           imgui.NextColumn()
2) тут была ошибка из за кастомного ToggleButton, вот уже другая ошибка с чекбоксами (cannot convert 'string' to 'bool [1]' stack traceback: [C]: in function 'bool')

Lua:
local active_cmd = setmetatable({'cmd_id_1', 'cmd_id_2', 'cmd_id_3', 'cmd_id_4', 'cmd_id_5', 'cmd_id_6', 'cmd_id_7', 'cmd_id_8', 'cmd_id_9', 'cmd_id_10', 'cmd_id_11', 'cmd_id_12', 'cmd_id_13', 'cmd_id_14', 'cmd_id_15', 'cmd_id_16', 'cmd_id_17', 'cmd_id_18', 'cmd_id_19', 'cmd_id_20', 'cmd_id_21', 'cmd_id_22', 'cmd_id_23', 'cmd_id_24', 'cmd_id_25'},
{
  __index = function(self, key)
     if not defaultcmd.cmd[key] then
        defaultcmd.cmd[key] = true
     end
     self = imgui.new.bool(defaultcmd.cmd[key])
     return self[key]
  end
})


           for index, value in ipairs(active_cmd) do
              if imgui.Checkbox("##list_cmd" .. index, active_cmd[value]) then
                 defaultcmd.cmd[value] = active_cmd[value]
                 inicfg.save(defaultcmd, "Example/stand_comand_setting.ini")
              end
           end