почему не происходит повторное сохранение в ini файл

W1ll04eison

Участник
Автор темы
328
19
Версия MoonLoader
.026-beta
Собственно, у меня есть код:
Lua:
require "lib.moonloader"
local encoding = require "encoding"
local inicfg = require "inicfg"
local sampev = require "lib.samp.events"
local keys = require "vkeys"
local imgui = require "imgui"
imgui.ToggleButton = require('imgui_addons').ToggleButton
local input = imgui.ImBuffer(256)
encoding.default = 'CP1251'
u8 = encoding.UTF8
--========================================================--
local tag = "[set]:"
local show_input = false

local nastroiki = imgui.ImBool(false)
local okno = imgui.ImBool(false)
local w, h = getScreenResolution()

--========================================================--
local directIniiiiii = 'set.ini'
local ini = inicfg.load(inicfg.load({
    pos = {
        x = select(1, getScreenResolution()),
        y = select(2, getScreenResolution()),

    },
    active = {
        show = false,
        text1 = '',
    },
}, directIniiiiii))
inicfg.save(ini, directIniiiiii)
--========================================================--
local posX, posY = ini.pos.x, ini.pos.y
--========================================================--
local show = imgui.ImBool(ini.active.show)
local text1 = imgui.ImBuffer(tostring(ini.active.text1), 65536)
local editingPos = false
--========================================================--
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage(tag.. " {FFFFFF} Скрипт успешно загружен. | by {008000}W1ll04eison", 0x8A2BE2)
    sampAddChatMessage(tag.. " {FFFFFF} Version 1.0.0. | Что бы открыть настройки скрипта, напишите: {FFE4B5}/govset", 0x8A2BE2)

 
        sampRegisterChatCommand('sset', function()
            nastroiki.v = not nastroiki.v
        end)


    while true do    --===============================[ВЫПОЛНЯЕТЬСЯ КАЖДЫЙ КАДР]==================--
    wait(0)

    if okno.v then
        imgui.ShowCursor = false
    end

    if ini.active.show then
        okno.v = true
    else
        okno.v = false
    end

    if editingPos and show then
        showCursor(true)
        curX, curY = getCursorPos()
        posX, posY = curX, curY
        if wasKeyPressed(32) then
            sampAddChatMessage(tag..' {FFFFFF}Новое положение сохранено: {FFE4B5}Х: {00BFFF}'..curX..'{FFFFFF}, {FFE4B5}Y: {00BFFF}'..curY, 0x8A2BE2)
            editingPos = false
            save()
            showCursor(false)
            nastroiki.v = true
        end
    end

    imgui.Process = nastroiki.v or okno.v
    end
end
--=====================================================--
function onWindowMessage(msg, wparam, lparam)
    if msg == 0x100 or msg == 0x101 then
        if (wparam == keys.VK_ESCAPE and (nastroiki.v)) and not isPauseMenuActive() then
            consumeWindowMessage(true, false)
            if msg == 0x101 then
                if nastroiki.v then
                    nastroiki.v = false;
                else nastroiki.v = false end

            end
        end
    end
end
--========================================================--
function imgui.OnDrawFrame()
    if nastroiki.v then
            imgui.ShowCursor = true
            local sw, sh = getScreenResolution()
            imgui.SetNextWindowSize(imgui.ImVec2(950, 528), imgui.Cond.FirstUseEver)
            imgui.SetNextWindowPos(imgui.ImVec2(w / 2, h / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
            imgui.Begin(u8"set | Version 1.0.0", nastroiki, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)

            if ini.active.text1 ~= "" then
                text1.v = string.gsub(u8(ini.active.text1), "&", "\n")
            end
            imgui.Text(u8'Включение / Отключение')
            imgui.SameLine()
            if imgui.ToggleButton(u8'##1110', show) then
 
            end
            if imgui.Button(u8"Изменить положение") then
                sampAddChatMessage(tag..' {FFFFFF}Для сохранения положения нажмите {ff004d}ПРОБЕЛ', 0x8A2BE2)
                editingPos = true
                showCursor(true)
                nastroiki.v = false
 
            end
            if imgui.Button(u8'Сохранить настройки') then
                ini.active.text1 = string.gsub(u8:decode(text1.v), "\n", "&")
                ini.active.show = show.v
                --ini.active.text1 = text1.v
                savesettings()
                sampAddChatMessage(tag.. " {FFFFFF} Настройки скрипта успешно {FFA500}сохранены", 0x8A2BE2)
 
 
            end
            imgui.SameLine()
            imgui.TextDisabled(u8'(?)')--===============================================[Помощь в командах (?)]=============================--
            if imgui.IsItemHovered() then
                imgui.BeginTooltip()
                imgui.TextUnformatted(u8'После смены какого либо пункта / подпункта в данном окне\nнужно обязательно нажимать данную кнопку\nиначе, сохранения не вступят в силу')
                imgui.EndTooltip()
            end
            imgui.Separator()
            imgui.Text("")
            imgui.InputTextMultiline("    ", text1, imgui.ImVec2(940, 500))


            imgui.End()

    end

    if okno.v then
        imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.Always)
        imgui.Begin(u8"", nil, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.AlwaysUseWindowPadding + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.ShowBorders)

        if ini.active.text1 ~= "" then
            imgui.Text(text1.v)
        else
            imgui.Text(u8"Тут пока что ничего нету")
        end
        imgui.End()
    end
end
--=====================================================--
function save()
    ini.pos.x, ini.pos.y = posX, posY
    inicfg.save(ini, directIniiiiii)
end
--=====================================================--
function savesettings()
    inicfg.save(ini, directIniiiiii)
end
--=====================================================--
function theme()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4

    style.WindowRounding = 9.0
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    style.ChildWindowRounding = 4.0
    style.FrameRounding = 3
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0
    style.WindowPadding = imgui.ImVec2(4.0, 4.0)
    style.FramePadding = imgui.ImVec2(3.5, 3.5)
    style.ButtonTextAlign = imgui.ImVec2(0.0, 0.5)

    colors[clr.Text]                 = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.TextDisabled]         = ImVec4(0.73, 0.75, 0.74, 1.00)
    colors[clr.WindowBg]             = ImVec4(0.09, 0.09, 0.09, 0.94)
    colors[clr.ChildWindowBg]        = ImVec4(10.00, 10.00, 10.00, 0.01)
    colors[clr.PopupBg]              = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.Border]               = ImVec4(0.20, 0.20, 0.20, 0.50)
    colors[clr.BorderShadow]         = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.FrameBg]              = ImVec4(0.00, 0.39, 1.00, 0.65)
    colors[clr.FrameBgHovered]       = ImVec4(0.11, 0.40, 0.69, 1.00)
    colors[clr.FrameBgActive]        = ImVec4(0.11, 0.40, 0.69, 1.00)
    colors[clr.TitleBg]              = ImVec4(0.00, 0.00, 0.00, 1.00)
    colors[clr.TitleBgActive]        = ImVec4(0.00, 0.24, 0.54, 1.00)
    colors[clr.TitleBgCollapsed]     = ImVec4(0.00, 0.22, 1.00, 0.67)
    colors[clr.MenuBarBg]            = ImVec4(0.08, 0.44, 1.00, 1.00)
    colors[clr.ScrollbarBg]          = ImVec4(0.02, 0.02, 0.02, 0.53)
    colors[clr.ScrollbarGrab]        = ImVec4(0.31, 0.31, 0.31, 1.00)
    colors[clr.ScrollbarGrabHovered] = ImVec4(0.41, 0.41, 0.41, 1.00)
    colors[clr.ScrollbarGrabActive]  = ImVec4(0.51, 0.51, 0.51, 1.00)
    colors[clr.ComboBg]              = ImVec4(0.20, 0.20, 0.20, 0.99)
    colors[clr.CheckMark]            = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.SliderGrab]           = ImVec4(0.34, 0.67, 1.00, 1.00)
    colors[clr.SliderGrabActive]     = ImVec4(0.84, 0.66, 0.66, 1.00)
    colors[clr.Button]               = ImVec4(0.00, 0.39, 1.00, 0.65)
    colors[clr.ButtonHovered]        = ImVec4(0.00, 0.64, 1.00, 0.65)
    colors[clr.ButtonActive]         = ImVec4(0.00, 0.53, 1.00, 0.50)
    colors[clr.Header]               = ImVec4(0.00, 0.62, 1.00, 0.54)
    colors[clr.HeaderHovered]        = ImVec4(0.00, 0.36, 1.00, 0.65)
    colors[clr.HeaderActive]         = ImVec4(0.00, 0.53, 1.00, 0.00)
    colors[clr.Separator]            = ImVec4(0.43, 0.43, 0.50, 0.50)
    colors[clr.SeparatorHovered]     = ImVec4(0.71, 0.39, 0.39, 0.54)
    colors[clr.SeparatorActive]      = ImVec4(0.71, 0.39, 0.39, 0.54)
    colors[clr.ResizeGrip]           = ImVec4(0.71, 0.39, 0.39, 0.54)
    colors[clr.ResizeGripHovered]    = ImVec4(0.84, 0.66, 0.66, 0.66)
    colors[clr.ResizeGripActive]     = ImVec4(0.84, 0.66, 0.66, 0.66)
    colors[clr.CloseButton]          = ImVec4(0.41, 0.41, 0.41, 1.00)
    colors[clr.CloseButtonHovered]   = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.CloseButtonActive]    = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.PlotLines]            = ImVec4(0.61, 0.61, 0.61, 1.00)
    colors[clr.PlotLinesHovered]     = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]        = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered] = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.TextSelectedBg]       = ImVec4(0.26, 0.59, 0.98, 0.35)
    colors[clr.ModalWindowDarkening] = ImVec4(0.80, 0.80, 0.80, 0.35)
end
theme()

Если я напишу в imgui.InputTextMultiline допустим "12" или какой-нибудь иной текст, затем нажму сохранить, то в ini файл сохраняется текст.
Если же после этого я сменю этот текст на какой-нибудь иной, к примеру на"36", и нажму сохранить, то сохранение в ini файл не происходит

Подскажите в чем ошибка
 
Последнее редактирование:

W1ll04eison

Участник
Автор темы
328
19
Сохранять мультилайн используя либу иникфг - бессмысленно, он не поддерживает многострочный текст.
Используй cjson
Хм....
У меня в ином скрипте мультилайн сохраняется в inicfg.
И через string.gsub производится замена во время сохранения с "\n" на "&", т.е перенос на следующую строку заменяется на символ "&", получается если в мультилайн не одна строка, а более, то в inicfg выглядит вот так:
Пример:
1&2&3&4&5
И во время чтения inicfg символ "&" заменяется на перенос на следующую строку "\n" (т.е соответственно на оборот)

Тут же все также, только сохранение именно текста сделано по другому (в string.gsub все также написано), а поэтому можно обойтись и без cjson.
Вопрос тут в том что он даже однострочный текст повторно не сохраняет