LUA Save.

Immortal-

Участник
Автор темы
67
1
Версия MoonLoader
.026-beta
Здравствуйте, есть у меня скрипт луа, который сохраняет значение массива в конфиг.
Как мне сделать так, что бы при записи оно сохраняло новые значения, не перезаписывая старые?
Допустим, я сохранил массив =1, массив = 2, и что бы в конфиге было:
massive = 1
massive = 2.
Не могу понять, так-как не достаточно опытен. Прошу Вашей помоши.

Код ниже.

Код:
local inicfg = require 'inicfg'
local encoding = require 'encoding'
local imgui = require 'imgui'
local main_window_state = imgui.ImBool(false)

encoding.default = 'CP1251'
u8 = encoding.UTF8

local mainIni = inicfg.load(
{
    config =
    {
        iMassive = 1
    }
},
    'test_for_script'
)

local iMassive = imgui.ImInt(mainIni.config.iMassive)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then
        return
    end

    while not isSampAvailable() do
        wait(0)     
    end
 
    sampRegisterChatCommand('test', cmd_test)
end

function cmd_test(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

function imgui.OnDrawFrame()
    if not main_window_state.v then
        imgui.Process = false
    end

    if not window_pos then
        ScreenX, ScreenY = getScreenResolution()ScreenX, ScreenY = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(ScreenX / 2 , ScreenY / 2), imgui.Cond.FirsUseEver, imgui.ImVec2(0.5, 0.5))
    end

    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(290, 225), imgui.Cond.FirstUseEver)

        imgui.Begin(u8'[Tested] Settings', main_window_state, imgui.WindowFlags.MenuBar)
      
        imgui.InputInt(u8'Новое значение.', iMassive)

        if imgui.Button(u8'Сохранить', imgui.ImVec2(255, 20)) then
            mainIni.config.iMassive = iMassive.v
            inicfg.save(mainIni, 'test_for_script.ini')
        end

        imgui.End()
    end
end
 

P!NK.

Участник
68
54
Здравствуйте, есть у меня скрипт луа, который сохраняет значение массива в конфиг.
Как мне сделать так, что бы при записи оно сохраняло новые значения, не перезаписывая старые?
Допустим, я сохранил массив =1, массив = 2, и что бы в конфиге было:
massive = 1
massive = 2.
Не могу понять, так-как не достаточно опытен. Прошу Вашей помоши.

Код ниже.

Код:
local inicfg = require 'inicfg'
local encoding = require 'encoding'
local imgui = require 'imgui'
local main_window_state = imgui.ImBool(false)

encoding.default = 'CP1251'
u8 = encoding.UTF8

local mainIni = inicfg.load(
{
    config =
    {
        iMassive = 1
    }
},
    'test_for_script'
)

local iMassive = imgui.ImInt(mainIni.config.iMassive)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then
        return
    end

    while not isSampAvailable() do
        wait(0)    
    end
 
    sampRegisterChatCommand('test', cmd_test)
end

function cmd_test(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

function imgui.OnDrawFrame()
    if not main_window_state.v then
        imgui.Process = false
    end

    if not window_pos then
        ScreenX, ScreenY = getScreenResolution()ScreenX, ScreenY = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(ScreenX / 2 , ScreenY / 2), imgui.Cond.FirsUseEver, imgui.ImVec2(0.5, 0.5))
    end

    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(290, 225), imgui.Cond.FirstUseEver)

        imgui.Begin(u8'[Tested] Settings', main_window_state, imgui.WindowFlags.MenuBar)
     
        imgui.InputInt(u8'Новое значение.', iMassive)

        if imgui.Button(u8'Сохранить', imgui.ImVec2(255, 20)) then
            mainIni.config.iMassive = iMassive.v
            inicfg.save(mainIni, 'test_for_script.ini')
        end

        imgui.End()
    end
end
В ини нельзя добавлять массив для этого есть json, также что бы добавить значение в массив используй table.insert(название массива, значение которое ты хочешь внести)
Подробней про json можешь прочитать здесь: https://www.blast.hk/threads/96797/
А про массивы тут: https://quikluacsharp.ru/qlua-osnovy/peremennye-massivy-i-funkcii-v-qlua-lua/
 
  • Нравится
Реакции: Immortal-

Immortal-

Участник
Автор темы
67
1
В ини нельзя добавлять массив для этого есть json, также что бы добавить значение в массив используй table.insert(название массива, значение которое ты хочешь внести)
Подробней про json можешь прочитать здесь: https://www.blast.hk/threads/96797/
А про массивы тут: https://quikluacsharp.ru/qlua-osnovy/peremennye-massivy-i-funkcii-v-qlua-lua/
Сделал, но значение все равно перезаписывает.
Lua:
local encoding = require 'encoding'
local imgui = require 'imgui'
local main_window_state = imgui.ImBool(false)

encoding.default = 'CP1251'
u8 = encoding.UTF8

local iMassive = imgui.ImInt(1)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then
        return
    end

    while not isSampAvailable() do
        wait(0)     
    end
 
    sampRegisterChatCommand('test', cmd_test)
end

function cmd_test(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

function imgui.OnDrawFrame()
    if not main_window_state.v then
        imgui.Process = false
    end

    if not window_pos then
        ScreenX, ScreenY = getScreenResolution()ScreenX, ScreenY = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(ScreenX / 2 , ScreenY / 2), imgui.Cond.FirsUseEver, imgui.ImVec2(0.5, 0.5))
    end

    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(290, 225), imgui.Cond.FirstUseEver)

        imgui.Begin(u8'[Tested] Settings', main_window_state, imgui.WindowFlags.MenuBar)
        
        imgui.InputInt(u8'Значение', iMassive)

        if imgui.Button(u8'Сохранить', imgui.ImVec2(255, 20)) then   
        end
            local file = io.open('moonloader\\config\\test.json', 'r')
            a = file:read("*a")
            file:close()
            local table = decodeJson(a)   
        
            table["test"]["massive"] = iMassive.v
            encodedTable = encodeJson(table)
            local file = io.open('moonloader\\config\\test.json', 'w')
            file:write(encodedTable)
            file:flush()
            file:close()           
        imgui.End()
    end
end
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,776
11,224

Сделал, но значение все равно перезаписывает.
Lua:
local encoding = require 'encoding'
local imgui = require 'imgui'
local main_window_state = imgui.ImBool(false)

encoding.default = 'CP1251'
u8 = encoding.UTF8

local iMassive = imgui.ImInt(1)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then
        return
    end

    while not isSampAvailable() do
        wait(0)    
    end
 
    sampRegisterChatCommand('test', cmd_test)
end

function cmd_test(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

function imgui.OnDrawFrame()
    if not main_window_state.v then
        imgui.Process = false
    end

    if not window_pos then
        ScreenX, ScreenY = getScreenResolution()ScreenX, ScreenY = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(ScreenX / 2 , ScreenY / 2), imgui.Cond.FirsUseEver, imgui.ImVec2(0.5, 0.5))
    end

    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(290, 225), imgui.Cond.FirstUseEver)

        imgui.Begin(u8'[Tested] Settings', main_window_state, imgui.WindowFlags.MenuBar)
       
        imgui.InputInt(u8'Значение', iMassive)

        if imgui.Button(u8'Сохранить', imgui.ImVec2(255, 20)) then  
        end
            local file = io.open('moonloader\\config\\test.json', 'r')
            a = file:read("*a")
            file:close()
            local table = decodeJson(a)  
       
            table["test"]["massive"] = iMassive.v
            encodedTable = encodeJson(table)
            local file = io.open('moonloader\\config\\test.json', 'w')
            file:write(encodedTable)
            file:flush()
            file:close()          
        imgui.End()
    end
end
так ты перезаписываешь значение test->message, если надо хранить несколько, то используй table.insert(массив, значение)
1642083992224.png
 

Immortal-

Участник
Автор темы
67
1
Сделал, вроде работает, но 1 проблему понять не могу. Никак не хочать работать с переменными в имгуи.
Вот у меня есть переменная, которая регает команду. Я хочу ее сохранить в json, и у меня в консоли ошибка.
Lua:
local imgui = require 'imgui'

local json_file = getWorkingDirectory()..'\\config\\mt_cmd.json'
local list = {
}

local cmd = imgui.ImBuffer(256)

function OpenCmd()
    if imgui.Button(u8'Зарегистрировать команду.') then
        imgui.OpenPopup(u8'Регистрация команды.')
    end
    
    if imgui.BeginPopup(u8'Регистрация команды.') then
        imgui.InputText(u8'Команда.', cmd)
        
            if imgui.Button(u8'Создать команду.') then
                table.insert(list, {cmd = cmd.v})
                jsonSave(json_file, list)           
                sampRegisterChatCommand(cmd.v, function(num)
                    sampAddChatMessage(u8'Команда '..cmd.v..' создана'))
                end)
            end
            
        imgui.EndPopup()
    end
end

Но если я в кнопку добавлю еще 1 переменную на сохранение, которой нету в local, то оно сохранит:
table.insert(list, {id = cmd.v})