Нет сохранения в .ini

boy next door

Участник
Автор темы
258
23
Версия MoonLoader
.026-beta
Здарова.
Сделал вроде всё как всегда, нормально.
Захожу, выбираю комбо, после чего, его значения вписывается в .ini файл.
Потом перезапускаю скрипт и всё, всё по нолям.
Как исправить?
Ниже код:

Lua:
local ComboNTest = new.int()
local nitem_list = {u8'Не выбрано', u8'Полиция ЛС', u8'ФБР', u8'Армия ЛС', u8'Больница ЛС', u8'Мэрия', u8'РКШД', u8'Полиция СФ', u8'Армия ЛВ', u8'Полиция ЛВ', u8'S.W.A.T', u8'Правительство'}
local nImItems = imgui.new['const char*'][#nitem_list](nitem_list)
--inicfg
local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int()
ComboNTest[0] = ini.main.org

function onScriptTerminate(s) -- функция сохранения, при выгрузке скрипта
    if s == thisScript() then
    ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
    inicfg.save(ini, directIni) -- сохраняем
    end
end
--inicfg

--mimgui
if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
    ini.main.theme = ComboNTest[0]
    inicfg.save(ini, directIni)
end
--mimgui
 

boy next door

Участник
Автор темы
258
23
омг это что
Lua:
local ComboNTest = new.int()
ComboNTest[0] = ini.main.org

лучше так делай
local ComboNTest = new.int(ini.main.org)
Lua:
local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int()
local ComboNTest = new.int(ini.main.org)local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int()
local ComboNTest = new.int(ini.main.org)
if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
ini.main.org = ComboNTest[0]
inicfg.save(ini, directIni

function onScriptTerminate(s) -- функция сохранения, при выгрузке скрипта
    if s == thisScript() then
    ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
    inicfg.save(ini, directIni) -- сохраняем
    end
end

Всё равно не сохраняет.
 

boy next door

Участник
Автор темы
258
23
Lua:
require('lib.moonloader')
local event = require 'lib.samp.events'
local imgui = require 'mimgui'
local encoding = require 'encoding'
local u8 = encoding.UTF8
local ffi = require 'ffi'
local str, sizeof = ffi.string, ffi.sizeof
local input = imgui.new.char[64]()
local new = imgui.new
encoding.default = 'CP1251'

local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int()
local ComboNTest = new.int(ini.main.org)

function onScriptTerminate(s) -- функция сохранения, при выгрузке скрипта
    if s == thisScript() then
    ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
    inicfg.save(ini, directIni) -- сохраняем
    end
end

local inputField = imgui.new.char[256]()
local ComboMesta_list = new.int()
local ComboNTest = new.int()
local nitem_list = {u8'Не выбрано', u8'Полиция ЛС', u8'ФБР', u8'Армия ЛС', u8'Больница ЛС', u8'Мэрия', u8'РКШД', u8'Полиция СФ', u8'Армия ЛВ', u8'Полиция ЛВ', u8'S.W.A.T', u8'Правительство'}
local nImItems = imgui.new['const char*'][#nitem_list](nitem_list)
local nmesta_list = {u8'здание мэрии', u8'здание нашего холла'}
local iMmesta_list = imgui.new['const char*'][#nmesta_list](nmesta_list)

local tab = 1

local sobes = new.bool(false)
local dialogsobes = new.bool(false)
local checkbox_one = new.bool(false)
local inputField = imgui.new.char[256]()

imgui.OnFrame(function() return sobes[0] end, function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 700, 370
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        imgui.Begin('Sobes helper', sobes, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)-- + imgui.WindowFlags.NoMove)
        for numberTab,nameTab in pairs({'Информация','Собеседования','Настройки'}) do -- создаём и парсим таблицу с названиями будущих вкладок
            if imgui.Button(u8(nameTab), imgui.ImVec2(130,90)) then -- 2ым аргументом настраивается размер кнопок (подробнее в гайде по мимгуи)
                tab = numberTab -- меняем значение переменной tab на номер нажатой кнопки
            end
        end
        imgui.Separator()
        imgui.Separator()
        imgui.Separator()
        -- imgui.SameLine()
        imgui.Text(u8'Автор скрипта: enthype')
        -- imgui.SameLine()
        -- imgui.SameLine()
        imgui.Text(u8'Связь с разработчиком')
        imgui.SameLine()
        imgui.Text(u8'•')
        imgui.SameLine()
        imgui.Link('https://vk.com/number1241')
        imgui.SameLine()
        imgui.Text(u8'•')
        imgui.SameLine()
        imgui.Link('https://t.me/enthype')
        imgui.SameLine()
        imgui.Text(u8'•')
        imgui.SetCursorPos(imgui.ImVec2(150,30))
        if imgui.BeginChild('Name##'..tab, imgui.ImVec2(540, 275), true) then
            if tab == 1 then
                imgui.Text(u8'Здарова ленивые жопы, которым впадлу писать вручную текст и проводить собес.\nС этим скриптом Вы сможете это делать проще и быстрее.\n • Лёгкость с собесами\n • Простый в использовании\n • Автор имеет социально-националистические взгляды')
            elseif tab == 2 then
                imgui.PushItemWidth(155)
                if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
                ini.main.org = ComboNTest[0]
                inicfg.save(ini, directIni)
                end
                if imgui.Combo(u8'выберите место проведения',ComboMesta_list,iMmesta_list, #nmesta_list) then
                end
                local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
                local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
                imgui.PopItemWidth()
                if imgui.Button(u8'Оповестить о начале') then
                lua_thread.create(function()
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Сейчас, на данный момент, проходит собеседование в ряды нашей организации - '..selected_value..'.')
                    wait(5000)
                    sampSendChat('/gov Всем желающим прибыть в '..selected_mesto..'.')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    lua_thread.create(function()
                        sampSendChat('/time')
                        wait(100)
                        sampCloseCurrentDialogWithButton(1)
                    end)
                end)
            end
            if imgui.Button(u8'Оповестить об окончании') then
                lua_thread.create(function()
                    local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
                    local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Хочу ооповестить, что собеседование в нашу организацию '..selected_value..' было окончено.')
                    wait(5000)
                    sampSendChat('/gov Благодарим всех кто пришёл. А кто не успел, обязательно успеет в другой раз!')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    lua_thread.create(function()
                        sampSendChat('/time')
                        wait(100)
                        sampCloseCurrentDialogWithButton(1)
                    end)
                end)
            end
            imgui.SameLine()
            if imgui.Button(u8'Сохранить') then
            ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
            inicfg.save(ini, directIni)
            sampAddChatMessage('Вы сохранили выбор',-1)
            end
            imgui.Separator()
            imgui.Text(u8'Эта тема отвечает за вопросы. Просто, нажми на кнопку ниже.')
            if imgui.Button(u8'Собеседование') then
                dialogsobes[0] = not dialogsobes[0]
            end
            elseif tab == 3 then
            end
            imgui.EndChild()
        end 
        imgui.End()
end)

imgui.OnFrame(function() return dialogsobes[0] end, function(pl)
    local resX, resY = getScreenResolution()
    local sizeX, sizeY = 190, 250
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Собеседование', dialogsobes, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Code..')   
    imgui.End()
end)

function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage('sobes load sobes load sobes load sobes load sobes load ', 0xff0000)
    sampRegisterChatCommand('shelper', function()
        sobes[0] = not sobes[0]
    end)
    while true do
        wait(0)
    end
end


imgui.OnInitialize(function()
    local ImVec4 = imgui.ImVec4
            imgui.SwitchContext()
            imgui.GetStyle().Colors[imgui.Col.WindowBg] = imgui.ImVec4(0.14, 0.12, 0.16, 1.00)
            imgui.GetStyle().Colors[imgui.Col.ChildBg] = imgui.ImVec4(0.30, 0.20, 0.39, 0.00)
            imgui.GetStyle().Colors[imgui.Col.PopupBg] = imgui.ImVec4(0.05, 0.05, 0.10, 0.90)
            imgui.GetStyle().Colors[imgui.Col.Border] = imgui.ImVec4(0.89, 0.85, 0.92, 0.30)
            imgui.GetStyle().Colors[imgui.Col.BorderShadow] = imgui.ImVec4(0.00, 0.00, 0.00, 0.00)
            imgui.GetStyle().Colors[imgui.Col.FrameBg] = imgui.ImVec4(0.30, 0.20, 0.39, 1.00)
            imgui.GetStyle().Colors[imgui.Col.FrameBgHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.68)
            imgui.GetStyle().Colors[imgui.Col.FrameBgActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.TitleBg] = imgui.ImVec4(0.41, 0.19, 0.63, 0.45)
            imgui.GetStyle().Colors[imgui.Col.TitleBgCollapsed] = imgui.ImVec4(0.41, 0.19, 0.63, 0.35)
            imgui.GetStyle().Colors[imgui.Col.TitleBgActive] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
            imgui.GetStyle().Colors[imgui.Col.MenuBarBg] = imgui.ImVec4(0.30, 0.20, 0.39, 0.57)
            imgui.GetStyle().Colors[imgui.Col.ScrollbarBg] = imgui.ImVec4(0.30, 0.20, 0.39, 1.00)
            imgui.GetStyle().Colors[imgui.Col.ScrollbarGrab] = imgui.ImVec4(0.41, 0.19, 0.63, 0.31)
            imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
            imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.CheckMark] = imgui.ImVec4(0.56, 0.61, 1.00, 1.00)
            imgui.GetStyle().Colors[imgui.Col.SliderGrab] = imgui.ImVec4(0.41, 0.19, 0.63, 0.24)
            imgui.GetStyle().Colors[imgui.Col.SliderGrabActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.Button] = imgui.ImVec4(0.41, 0.19, 0.63, 0.44)
            imgui.GetStyle().Colors[imgui.Col.ButtonHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.86)
            imgui.GetStyle().Colors[imgui.Col.ButtonActive] = imgui.ImVec4(0.64, 0.33, 0.94, 1.00)
            imgui.GetStyle().Colors[imgui.Col.Header] = imgui.ImVec4(0.41, 0.19, 0.63, 0.76)
            imgui.GetStyle().Colors[imgui.Col.HeaderHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.86)
            imgui.GetStyle().Colors[imgui.Col.HeaderActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.ResizeGrip] = imgui.ImVec4(0.41, 0.19, 0.63, 0.20)
            imgui.GetStyle().Colors[imgui.Col.ResizeGripHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
            imgui.GetStyle().Colors[imgui.Col.ResizeGripActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.PlotLines] = imgui.ImVec4(0.89, 0.85, 0.92, 0.63)
            imgui.GetStyle().Colors[imgui.Col.PlotLinesHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.PlotHistogram] = imgui.ImVec4(0.89, 0.85, 0.92, 0.63)
            imgui.GetStyle().Colors[imgui.Col.PlotHistogramHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.TextSelectedBg] = imgui.ImVec4(0.41, 0.19, 0.63, 0.43)
end)

function imgui.Link(link, text)
    text = text or link
    local tSize = imgui.CalcTextSize(text)
    local p = imgui.GetCursorScreenPos()
    local DL = imgui.GetWindowDrawList()
    local col = { 0xFFFF7700, 0xFFFF9900 }
    if imgui.InvisibleButton("##" .. link, tSize) then os.execute("explorer " .. link) end
    local color = imgui.IsItemHovered() and col[1] or col[2]
    DL:AddText(p, color, text)
    DL:AddLine(imgui.ImVec2(p.x, p.y + tSize.y), imgui.ImVec2(p.x + tSize.x, p.y + tSize.y), color)
end
 
  • Bug
Реакции: minxty

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,982
2,187
Lua:
local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int()
local ComboNTest = new.int(ini.main.org)local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int()
local ComboNTest = new.int(ini.main.org)
if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
ini.main.org = ComboNTest[0]
inicfg.save(ini, directIni

function onScriptTerminate(s) -- функция сохранения, при выгрузке скрипта
    if s == thisScript() then
    ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
    inicfg.save(ini, directIni) -- сохраняем
    end
end

Всё равно не сохраняет.
пиздец да что ты творишь, ты хотя б ошибки свои затирай, прежде чем исправления вставлять. Я бы тебе порекомендовал начать изучать луа с самого начала
 

minxty

Известный
1,192
1,070
Lua:
require('lib.moonloader')
local event = require 'lib.samp.events'
local imgui = require 'mimgui'
local encoding = require 'encoding'
local u8 = encoding.UTF8
local ffi = require 'ffi'
local str, sizeof = ffi.string, ffi.sizeof
local input = imgui.new.char[64]()
local new = imgui.new
encoding.default = 'CP1251'

local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int()
local ComboNTest = new.int(ini.main.org)

function onScriptTerminate(s) -- функция сохранения, при выгрузке скрипта
    if s == thisScript() then
    ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
    inicfg.save(ini, directIni) -- сохраняем
    end
end

local inputField = imgui.new.char[256]()
local ComboMesta_list = new.int()
local ComboNTest = new.int()
local nitem_list = {u8'Не выбрано', u8'Полиция ЛС', u8'ФБР', u8'Армия ЛС', u8'Больница ЛС', u8'Мэрия', u8'РКШД', u8'Полиция СФ', u8'Армия ЛВ', u8'Полиция ЛВ', u8'S.W.A.T', u8'Правительство'}
local nImItems = imgui.new['const char*'][#nitem_list](nitem_list)
local nmesta_list = {u8'здание мэрии', u8'здание нашего холла'}
local iMmesta_list = imgui.new['const char*'][#nmesta_list](nmesta_list)

local tab = 1

local sobes = new.bool(false)
local dialogsobes = new.bool(false)
local checkbox_one = new.bool(false)
local inputField = imgui.new.char[256]()

imgui.OnFrame(function() return sobes[0] end, function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 700, 370
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        imgui.Begin('Sobes helper', sobes, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)-- + imgui.WindowFlags.NoMove)
        for numberTab,nameTab in pairs({'Информация','Собеседования','Настройки'}) do -- создаём и парсим таблицу с названиями будущих вкладок
            if imgui.Button(u8(nameTab), imgui.ImVec2(130,90)) then -- 2ым аргументом настраивается размер кнопок (подробнее в гайде по мимгуи)
                tab = numberTab -- меняем значение переменной tab на номер нажатой кнопки
            end
        end
        imgui.Separator()
        imgui.Separator()
        imgui.Separator()
        -- imgui.SameLine()
        imgui.Text(u8'Автор скрипта: enthype')
        -- imgui.SameLine()
        -- imgui.SameLine()
        imgui.Text(u8'Связь с разработчиком')
        imgui.SameLine()
        imgui.Text(u8'•')
        imgui.SameLine()
        imgui.Link('https://vk.com/number1241')
        imgui.SameLine()
        imgui.Text(u8'•')
        imgui.SameLine()
        imgui.Link('https://t.me/enthype')
        imgui.SameLine()
        imgui.Text(u8'•')
        imgui.SetCursorPos(imgui.ImVec2(150,30))
        if imgui.BeginChild('Name##'..tab, imgui.ImVec2(540, 275), true) then
            if tab == 1 then
                imgui.Text(u8'Здарова ленивые жопы, которым впадлу писать вручную текст и проводить собес.\nС этим скриптом Вы сможете это делать проще и быстрее.\n • Лёгкость с собесами\n • Простый в использовании\n • Автор имеет социально-националистические взгляды')
            elseif tab == 2 then
                imgui.PushItemWidth(155)
                if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
                ini.main.org = ComboNTest[0]
                inicfg.save(ini, directIni)
                end
                if imgui.Combo(u8'выберите место проведения',ComboMesta_list,iMmesta_list, #nmesta_list) then
                end
                local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
                local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
                imgui.PopItemWidth()
                if imgui.Button(u8'Оповестить о начале') then
                lua_thread.create(function()
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Сейчас, на данный момент, проходит собеседование в ряды нашей организации - '..selected_value..'.')
                    wait(5000)
                    sampSendChat('/gov Всем желающим прибыть в '..selected_mesto..'.')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    lua_thread.create(function()
                        sampSendChat('/time')
                        wait(100)
                        sampCloseCurrentDialogWithButton(1)
                    end)
                end)
            end
            if imgui.Button(u8'Оповестить об окончании') then
                lua_thread.create(function()
                    local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
                    local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Хочу ооповестить, что собеседование в нашу организацию '..selected_value..' было окончено.')
                    wait(5000)
                    sampSendChat('/gov Благодарим всех кто пришёл. А кто не успел, обязательно успеет в другой раз!')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    lua_thread.create(function()
                        sampSendChat('/time')
                        wait(100)
                        sampCloseCurrentDialogWithButton(1)
                    end)
                end)
            end
            imgui.SameLine()
            if imgui.Button(u8'Сохранить') then
            ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
            inicfg.save(ini, directIni)
            sampAddChatMessage('Вы сохранили выбор',-1)
            end
            imgui.Separator()
            imgui.Text(u8'Эта тема отвечает за вопросы. Просто, нажми на кнопку ниже.')
            if imgui.Button(u8'Собеседование') then
                dialogsobes[0] = not dialogsobes[0]
            end
            elseif tab == 3 then
            end
            imgui.EndChild()
        end
        imgui.End()
end)

imgui.OnFrame(function() return dialogsobes[0] end, function(pl)
    local resX, resY = getScreenResolution()
    local sizeX, sizeY = 190, 250
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Собеседование', dialogsobes, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Code..') 
    imgui.End()
end)

function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage('sobes load sobes load sobes load sobes load sobes load ', 0xff0000)
    sampRegisterChatCommand('shelper', function()
        sobes[0] = not sobes[0]
    end)
    while true do
        wait(0)
    end
end


imgui.OnInitialize(function()
    local ImVec4 = imgui.ImVec4
            imgui.SwitchContext()
            imgui.GetStyle().Colors[imgui.Col.WindowBg] = imgui.ImVec4(0.14, 0.12, 0.16, 1.00)
            imgui.GetStyle().Colors[imgui.Col.ChildBg] = imgui.ImVec4(0.30, 0.20, 0.39, 0.00)
            imgui.GetStyle().Colors[imgui.Col.PopupBg] = imgui.ImVec4(0.05, 0.05, 0.10, 0.90)
            imgui.GetStyle().Colors[imgui.Col.Border] = imgui.ImVec4(0.89, 0.85, 0.92, 0.30)
            imgui.GetStyle().Colors[imgui.Col.BorderShadow] = imgui.ImVec4(0.00, 0.00, 0.00, 0.00)
            imgui.GetStyle().Colors[imgui.Col.FrameBg] = imgui.ImVec4(0.30, 0.20, 0.39, 1.00)
            imgui.GetStyle().Colors[imgui.Col.FrameBgHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.68)
            imgui.GetStyle().Colors[imgui.Col.FrameBgActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.TitleBg] = imgui.ImVec4(0.41, 0.19, 0.63, 0.45)
            imgui.GetStyle().Colors[imgui.Col.TitleBgCollapsed] = imgui.ImVec4(0.41, 0.19, 0.63, 0.35)
            imgui.GetStyle().Colors[imgui.Col.TitleBgActive] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
            imgui.GetStyle().Colors[imgui.Col.MenuBarBg] = imgui.ImVec4(0.30, 0.20, 0.39, 0.57)
            imgui.GetStyle().Colors[imgui.Col.ScrollbarBg] = imgui.ImVec4(0.30, 0.20, 0.39, 1.00)
            imgui.GetStyle().Colors[imgui.Col.ScrollbarGrab] = imgui.ImVec4(0.41, 0.19, 0.63, 0.31)
            imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
            imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.CheckMark] = imgui.ImVec4(0.56, 0.61, 1.00, 1.00)
            imgui.GetStyle().Colors[imgui.Col.SliderGrab] = imgui.ImVec4(0.41, 0.19, 0.63, 0.24)
            imgui.GetStyle().Colors[imgui.Col.SliderGrabActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.Button] = imgui.ImVec4(0.41, 0.19, 0.63, 0.44)
            imgui.GetStyle().Colors[imgui.Col.ButtonHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.86)
            imgui.GetStyle().Colors[imgui.Col.ButtonActive] = imgui.ImVec4(0.64, 0.33, 0.94, 1.00)
            imgui.GetStyle().Colors[imgui.Col.Header] = imgui.ImVec4(0.41, 0.19, 0.63, 0.76)
            imgui.GetStyle().Colors[imgui.Col.HeaderHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.86)
            imgui.GetStyle().Colors[imgui.Col.HeaderActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.ResizeGrip] = imgui.ImVec4(0.41, 0.19, 0.63, 0.20)
            imgui.GetStyle().Colors[imgui.Col.ResizeGripHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
            imgui.GetStyle().Colors[imgui.Col.ResizeGripActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.PlotLines] = imgui.ImVec4(0.89, 0.85, 0.92, 0.63)
            imgui.GetStyle().Colors[imgui.Col.PlotLinesHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.PlotHistogram] = imgui.ImVec4(0.89, 0.85, 0.92, 0.63)
            imgui.GetStyle().Colors[imgui.Col.PlotHistogramHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
            imgui.GetStyle().Colors[imgui.Col.TextSelectedBg] = imgui.ImVec4(0.41, 0.19, 0.63, 0.43)
end)

function imgui.Link(link, text)
    text = text or link
    local tSize = imgui.CalcTextSize(text)
    local p = imgui.GetCursorScreenPos()
    local DL = imgui.GetWindowDrawList()
    local col = { 0xFFFF7700, 0xFFFF9900 }
    if imgui.InvisibleButton("##" .. link, tSize) then os.execute("explorer " .. link) end
    local color = imgui.IsItemHovered() and col[1] or col[2]
    DL:AddText(p, color, text)
    DL:AddLine(imgui.ImVec2(p.x, p.y + tSize.y), imgui.ImVec2(p.x + tSize.x, p.y + tSize.y), color)
end
ода, табуляция желает оставлять лучшего

1707991229779.png
пиздец это шобля такое

1707991277472.png
Для чего потоки в потоке создавать?

для чего 3 одинаковых переменных Combontest?

и это только малая часть

вот фулл код, более менее рабочий, который сохраняет все нормально в конфиг
Lua:
require('lib.moonloader')
local event = require 'lib.samp.events'
local imgui = require 'mimgui'
local encoding = require 'encoding'
local u8 = encoding.UTF8
local ffi = require 'ffi'
local str, sizeof = ffi.string, ffi.sizeof
local input = imgui.new.char[64]()
local new = imgui.new
encoding.default = 'CP1251'

local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int(ini.main.org)

function onScriptTerminate(s) -- функция сохранения, при выгрузке скрипта
    if s == thisScript() then
        ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
        inicfg.save(ini, directIni) -- сохраняем
    end
end

local inputField = imgui.new.char[256]()
local ComboMesta_list = new.int()
local nitem_list = {u8'Не выбрано', u8'Полиция ЛС', u8'ФБР', u8'Армия ЛС', u8'Больница ЛС', u8'Мэрия', u8'РКШД', u8'Полиция СФ', u8'Армия ЛВ', u8'Полиция ЛВ', u8'S.W.A.T', u8'Правительство'}
local nImItems = imgui.new['const char*'][#nitem_list](nitem_list)
local nmesta_list = {u8'здание мэрии', u8'здание нашего холла'}
local iMmesta_list = imgui.new['const char*'][#nmesta_list](nmesta_list)

local tab = 1

local sobes = new.bool(false)
local dialogsobes = new.bool(false)
local checkbox_one = new.bool(false)
local inputField = imgui.new.char[256]()

imgui.OnFrame(function() return sobes[0] end, function(player)
    local resX, resY = getScreenResolution()
    local sizeX, sizeY = 700, 370
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
    imgui.Begin('Sobes helper', sobes, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)-- + imgui.WindowFlags.NoMove)
    for numberTab,nameTab in pairs({'Информация','Собеседования','Настройки'}) do -- создаём и парсим таблицу с названиями будущих вкладок
        if imgui.Button(u8(nameTab), imgui.ImVec2(130,90)) then -- 2ым аргументом настраивается размер кнопок (подробнее в гайде по мимгуи)
            tab = numberTab -- меняем значение переменной tab на номер нажатой кнопки
        end
    end
    imgui.Separator()
    imgui.Separator()
    imgui.Separator()
    -- imgui.SameLine()
    imgui.Text(u8'Автор скрипта: enthype')
    -- imgui.SameLine()
    -- imgui.SameLine()
    imgui.Text(u8'Связь с разработчиком')
    imgui.SameLine()
    imgui.Text(u8'•')
    imgui.SameLine()
    imgui.Link('https://vk.com/number1241')
    imgui.SameLine()
    imgui.Text(u8'•')
    imgui.SameLine()
    imgui.Link('https://t.me/enthype')
    imgui.SameLine()
    imgui.Text(u8'•')
    imgui.SetCursorPos(imgui.ImVec2(150,30))
    if imgui.BeginChild('Name##'..tab, imgui.ImVec2(540, 275), true) then
        if tab == 1 then
            imgui.Text(u8'Здарова ленивые жопы, которым впадлу писать вручную текст и проводить собес.\nС этим скриптом Вы сможете это делать проще и быстрее.\n • Лёгкость с собесами\n • Простый в использовании\n • Автор имеет социально-националистические взгляды')
        elseif tab == 2 then
            imgui.PushItemWidth(155)
            if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
                ini.main.org = ComboNTest[0]
                inicfg.save(ini, directIni)
            end
            if imgui.Combo(u8'выберите место проведения',ComboMesta_list,iMmesta_list, #nmesta_list) then

            end
            local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
            local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
            imgui.PopItemWidth()
            if imgui.Button(u8'Оповестить о начале') then
                lua_thread.create(function()
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Сейчас, на данный момент, проходит собеседование в ряды нашей организации - '..selected_value..'.')
                    wait(5000)
                    sampSendChat('/gov Всем желающим прибыть в '..selected_mesto..'.')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/time')
                    wait(100)
                    sampCloseCurrentDialogWithButton(1)
                end)
            end
            if imgui.Button(u8'Оповестить об окончании') then
                lua_thread.create(function()
                    local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
                    local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Хочу ооповестить, что собеседование в нашу организацию '..selected_value..' было окончено.')
                    wait(5000)
                    sampSendChat('/gov Благодарим всех кто пришёл. А кто не успел, обязательно успеет в другой раз!')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/time')
                    wait(100)
                    sampCloseCurrentDialogWithButton(1)
                end)
            end
            imgui.SameLine()
            if imgui.Button(u8'Сохранить') then
                ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
                inicfg.save(ini, directIni)
                sampAddChatMessage('Вы сохранили выбор',-1)
            end
            imgui.Separator()
            imgui.Text(u8'Эта тема отвечает за вопросы. Просто, нажми на кнопку ниже.')
            if imgui.Button(u8'Собеседование') then
                dialogsobes[0] = not dialogsobes[0]
            end
            elseif tab == 3 then
               
            end
            imgui.EndChild()
        end
        if tab == 1 then
            imgui.Text(u8'Здарова ленивые жопы, которым впадлу писать вручную текст и проводить собес.\nС этим скриптом Вы сможете это делать проще и быстрее.\n • Лёгкость с собесами\n • Простый в использовании\n • Автор имеет социально-националистические взгляды')
        elseif tab == 2 then
            imgui.PushItemWidth(155)
            if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
                ini.main.org = ComboNTest[0]
                inicfg.save(ini, directIni)
            end
            if imgui.Combo(u8'выберите место проведения',ComboMesta_list,iMmesta_list, #nmesta_list) then

            end
            local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
            local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
            imgui.PopItemWidth()
            if imgui.Button(u8'Оповестить о начале') then
                lua_thread.create(function()
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Сейчас, на данный момент, проходит собеседование в ряды нашей организации - '..selected_value..'.')
                    wait(5000)
                    sampSendChat('/gov Всем желающим прибыть в '..selected_mesto..'.')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/time')
                    wait(100)
                    sampCloseCurrentDialogWithButton(1)
                end)
            end
            if imgui.Button(u8'Оповестить об окончании') then
                lua_thread.create(function()
                    local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
                    local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Хочу ооповестить, что собеседование в нашу организацию '..selected_value..' было окончено.')
                    wait(5000)
                    sampSendChat('/gov Благодарим всех кто пришёл. А кто не успел, обязательно успеет в другой раз!')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/time')
                    wait(100)
                    sampCloseCurrentDialogWithButton(1)
                    end)
                end
            imgui.SameLine()
            if imgui.Button(u8'Сохранить') then
                ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
                inicfg.save(ini, directIni)
                sampAddChatMessage('Вы сохранили выбор',-1)
            end
            imgui.Separator()
            imgui.Text(u8'Эта тема отвечает за вопросы. Просто, нажми на кнопку ниже.')
            if imgui.Button(u8'Собеседование') then
                dialogsobes[0] = not dialogsobes[0]
            end
            elseif tab == 3 then
               
            end
            imgui.EndChild()
    imgui.End()
end)

imgui.OnFrame(function() return dialogsobes[0] end, function(pl)
    local resX, resY = getScreenResolution()
    local sizeX, sizeY = 190, 250
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Собеседование', dialogsobes, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Code..')
    imgui.End()
end)

function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage('sobes load sobes load sobes load sobes load sobes load ', 0xff0000)
    sampRegisterChatCommand('shelper', function()
        sobes[0] = not sobes[0]
    end)
    while true do
        wait(0)
    end
end


imgui.OnInitialize(function()
    local ImVec4 = imgui.ImVec4
    imgui.SwitchContext()
    imgui.GetStyle().Colors[imgui.Col.WindowBg] = imgui.ImVec4(0.14, 0.12, 0.16, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ChildBg] = imgui.ImVec4(0.30, 0.20, 0.39, 0.00)
    imgui.GetStyle().Colors[imgui.Col.PopupBg] = imgui.ImVec4(0.05, 0.05, 0.10, 0.90)
    imgui.GetStyle().Colors[imgui.Col.Border] = imgui.ImVec4(0.89, 0.85, 0.92, 0.30)
    imgui.GetStyle().Colors[imgui.Col.BorderShadow] = imgui.ImVec4(0.00, 0.00, 0.00, 0.00)
    imgui.GetStyle().Colors[imgui.Col.FrameBg] = imgui.ImVec4(0.30, 0.20, 0.39, 1.00)
    imgui.GetStyle().Colors[imgui.Col.FrameBgHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.68)
    imgui.GetStyle().Colors[imgui.Col.FrameBgActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TitleBg] = imgui.ImVec4(0.41, 0.19, 0.63, 0.45)
    imgui.GetStyle().Colors[imgui.Col.TitleBgCollapsed] = imgui.ImVec4(0.41, 0.19, 0.63, 0.35)
    imgui.GetStyle().Colors[imgui.Col.TitleBgActive] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
    imgui.GetStyle().Colors[imgui.Col.MenuBarBg] = imgui.ImVec4(0.30, 0.20, 0.39, 0.57)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarBg] = imgui.ImVec4(0.30, 0.20, 0.39, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrab] = imgui.ImVec4(0.41, 0.19, 0.63, 0.31)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.CheckMark] = imgui.ImVec4(0.56, 0.61, 1.00, 1.00)
    imgui.GetStyle().Colors[imgui.Col.SliderGrab] = imgui.ImVec4(0.41, 0.19, 0.63, 0.24)
    imgui.GetStyle().Colors[imgui.Col.SliderGrabActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.Button] = imgui.ImVec4(0.41, 0.19, 0.63, 0.44)
    imgui.GetStyle().Colors[imgui.Col.ButtonHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.86)
    imgui.GetStyle().Colors[imgui.Col.ButtonActive] = imgui.ImVec4(0.64, 0.33, 0.94, 1.00)
    imgui.GetStyle().Colors[imgui.Col.Header] = imgui.ImVec4(0.41, 0.19, 0.63, 0.76)
    imgui.GetStyle().Colors[imgui.Col.HeaderHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.86)
    imgui.GetStyle().Colors[imgui.Col.HeaderActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ResizeGrip] = imgui.ImVec4(0.41, 0.19, 0.63, 0.20)
    imgui.GetStyle().Colors[imgui.Col.ResizeGripHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
    imgui.GetStyle().Colors[imgui.Col.ResizeGripActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PlotLines] = imgui.ImVec4(0.89, 0.85, 0.92, 0.63)
    imgui.GetStyle().Colors[imgui.Col.PlotLinesHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PlotHistogram] = imgui.ImVec4(0.89, 0.85, 0.92, 0.63)
    imgui.GetStyle().Colors[imgui.Col.PlotHistogramHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TextSelectedBg] = imgui.ImVec4(0.41, 0.19, 0.63, 0.43)
end)

function imgui.Link(link, text)
    text = text or link
    local tSize = imgui.CalcTextSize(text)
    local p = imgui.GetCursorScreenPos()
    local DL = imgui.GetWindowDrawList()
    local col = { 0xFFFF7700, 0xFFFF9900 }
    if imgui.InvisibleButton("##" .. link, tSize) then os.execute("explorer " .. link) end
    local color = imgui.IsItemHovered() and col[1] or col[2]
    DL:AddText(p, color, text)
    DL:AddLine(imgui.ImVec2(p.x, p.y + tSize.y), imgui.ImVec2(p.x + tSize.x, p.y + tSize.y), color)
end
 
  • Нравится
Реакции: MLycoris

boy next door

Участник
Автор темы
258
23
ода, табуляция желает оставлять лучшего

Посмотреть вложение 232109пиздец это шобля такое

Посмотреть вложение 232110Для чего потоки в потоке создавать?

для чего 3 одинаковых переменных Combontest?

и это только малая часть

вот фулл код, более менее рабочий, который сохраняет все нормально в конфиг
Lua:
require('lib.moonloader')
local event = require 'lib.samp.events'
local imgui = require 'mimgui'
local encoding = require 'encoding'
local u8 = encoding.UTF8
local ffi = require 'ffi'
local str, sizeof = ffi.string, ffi.sizeof
local input = imgui.new.char[64]()
local new = imgui.new
encoding.default = 'CP1251'

local inicfg = require 'inicfg'
local directIni = 'SobesHelper.ini'
local ini = inicfg.load(inicfg.load({
    main = {
        org = 0
    },
}, directIni))
inicfg.save(ini, directIni)
local ComboNTest = new.int(ini.main.org)

function onScriptTerminate(s) -- функция сохранения, при выгрузке скрипта
    if s == thisScript() then
        ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
        inicfg.save(ini, directIni) -- сохраняем
    end
end

local inputField = imgui.new.char[256]()
local ComboMesta_list = new.int()
local nitem_list = {u8'Не выбрано', u8'Полиция ЛС', u8'ФБР', u8'Армия ЛС', u8'Больница ЛС', u8'Мэрия', u8'РКШД', u8'Полиция СФ', u8'Армия ЛВ', u8'Полиция ЛВ', u8'S.W.A.T', u8'Правительство'}
local nImItems = imgui.new['const char*'][#nitem_list](nitem_list)
local nmesta_list = {u8'здание мэрии', u8'здание нашего холла'}
local iMmesta_list = imgui.new['const char*'][#nmesta_list](nmesta_list)

local tab = 1

local sobes = new.bool(false)
local dialogsobes = new.bool(false)
local checkbox_one = new.bool(false)
local inputField = imgui.new.char[256]()

imgui.OnFrame(function() return sobes[0] end, function(player)
    local resX, resY = getScreenResolution()
    local sizeX, sizeY = 700, 370
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
    imgui.Begin('Sobes helper', sobes, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)-- + imgui.WindowFlags.NoMove)
    for numberTab,nameTab in pairs({'Информация','Собеседования','Настройки'}) do -- создаём и парсим таблицу с названиями будущих вкладок
        if imgui.Button(u8(nameTab), imgui.ImVec2(130,90)) then -- 2ым аргументом настраивается размер кнопок (подробнее в гайде по мимгуи)
            tab = numberTab -- меняем значение переменной tab на номер нажатой кнопки
        end
    end
    imgui.Separator()
    imgui.Separator()
    imgui.Separator()
    -- imgui.SameLine()
    imgui.Text(u8'Автор скрипта: enthype')
    -- imgui.SameLine()
    -- imgui.SameLine()
    imgui.Text(u8'Связь с разработчиком')
    imgui.SameLine()
    imgui.Text(u8'•')
    imgui.SameLine()
    imgui.Link('https://vk.com/number1241')
    imgui.SameLine()
    imgui.Text(u8'•')
    imgui.SameLine()
    imgui.Link('https://t.me/enthype')
    imgui.SameLine()
    imgui.Text(u8'•')
    imgui.SetCursorPos(imgui.ImVec2(150,30))
    if imgui.BeginChild('Name##'..tab, imgui.ImVec2(540, 275), true) then
        if tab == 1 then
            imgui.Text(u8'Здарова ленивые жопы, которым впадлу писать вручную текст и проводить собес.\nС этим скриптом Вы сможете это делать проще и быстрее.\n • Лёгкость с собесами\n • Простый в использовании\n • Автор имеет социально-националистические взгляды')
        elseif tab == 2 then
            imgui.PushItemWidth(155)
            if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
                ini.main.org = ComboNTest[0]
                inicfg.save(ini, directIni)
            end
            if imgui.Combo(u8'выберите место проведения',ComboMesta_list,iMmesta_list, #nmesta_list) then

            end
            local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
            local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
            imgui.PopItemWidth()
            if imgui.Button(u8'Оповестить о начале') then
                lua_thread.create(function()
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Сейчас, на данный момент, проходит собеседование в ряды нашей организации - '..selected_value..'.')
                    wait(5000)
                    sampSendChat('/gov Всем желающим прибыть в '..selected_mesto..'.')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/time')
                    wait(100)
                    sampCloseCurrentDialogWithButton(1)
                end)
            end
            if imgui.Button(u8'Оповестить об окончании') then
                lua_thread.create(function()
                    local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
                    local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Хочу ооповестить, что собеседование в нашу организацию '..selected_value..' было окончено.')
                    wait(5000)
                    sampSendChat('/gov Благодарим всех кто пришёл. А кто не успел, обязательно успеет в другой раз!')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/time')
                    wait(100)
                    sampCloseCurrentDialogWithButton(1)
                end)
            end
            imgui.SameLine()
            if imgui.Button(u8'Сохранить') then
                ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
                inicfg.save(ini, directIni)
                sampAddChatMessage('Вы сохранили выбор',-1)
            end
            imgui.Separator()
            imgui.Text(u8'Эта тема отвечает за вопросы. Просто, нажми на кнопку ниже.')
            if imgui.Button(u8'Собеседование') then
                dialogsobes[0] = not dialogsobes[0]
            end
            elseif tab == 3 then
              
            end
            imgui.EndChild()
        end
        if tab == 1 then
            imgui.Text(u8'Здарова ленивые жопы, которым впадлу писать вручную текст и проводить собес.\nС этим скриптом Вы сможете это делать проще и быстрее.\n • Лёгкость с собесами\n • Простый в использовании\n • Автор имеет социально-националистические взгляды')
        elseif tab == 2 then
            imgui.PushItemWidth(155)
            if imgui.Combo(u8'Выберите свою организацию',ComboNTest,nImItems, #nitem_list) then
                ini.main.org = ComboNTest[0]
                inicfg.save(ini, directIni)
            end
            if imgui.Combo(u8'выберите место проведения',ComboMesta_list,iMmesta_list, #nmesta_list) then

            end
            local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
            local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
            imgui.PopItemWidth()
            if imgui.Button(u8'Оповестить о начале') then
                lua_thread.create(function()
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Сейчас, на данный момент, проходит собеседование в ряды нашей организации - '..selected_value..'.')
                    wait(5000)
                    sampSendChat('/gov Всем желающим прибыть в '..selected_mesto..'.')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/time')
                    wait(100)
                    sampCloseCurrentDialogWithButton(1)
                end)
            end
            if imgui.Button(u8'Оповестить об окончании') then
                lua_thread.create(function()
                    local selected_value = u8:decode(nitem_list[ComboNTest[0] + 1])
                    local selected_mesto = u8:decode(nmesta_list[ComboMesta_list[0] + 1])
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Занимаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/gov Уважаемые жители штата! Прошу минутку Вашего внимания!')
                    wait(5000)
                    sampSendChat('/gov Хочу ооповестить, что собеседование в нашу организацию '..selected_value..' было окончено.')
                    wait(5000)
                    sampSendChat('/gov Благодарим всех кто пришёл. А кто не успел, обязательно успеет в другой раз!')
                    wait(5000)
                    sampSendChat('/gov Благодарю всех Вас за внимание!')
                    wait(1000)
                    sampSendChat('/d ['..selected_value..'] > [Всем]: Освобождаю волну гос. новостей.')
                    wait(1000)
                    sampSendChat('/time')
                    wait(100)
                    sampCloseCurrentDialogWithButton(1)
                    end)
                end
            imgui.SameLine()
            if imgui.Button(u8'Сохранить') then
                ini.main.org = ComboNTest[0] -- запихиваем комбо в ини
                inicfg.save(ini, directIni)
                sampAddChatMessage('Вы сохранили выбор',-1)
            end
            imgui.Separator()
            imgui.Text(u8'Эта тема отвечает за вопросы. Просто, нажми на кнопку ниже.')
            if imgui.Button(u8'Собеседование') then
                dialogsobes[0] = not dialogsobes[0]
            end
            elseif tab == 3 then
              
            end
            imgui.EndChild()
    imgui.End()
end)

imgui.OnFrame(function() return dialogsobes[0] end, function(pl)
    local resX, resY = getScreenResolution()
    local sizeX, sizeY = 190, 250
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Собеседование', dialogsobes, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Code..')
    imgui.End()
end)

function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage('sobes load sobes load sobes load sobes load sobes load ', 0xff0000)
    sampRegisterChatCommand('shelper', function()
        sobes[0] = not sobes[0]
    end)
    while true do
        wait(0)
    end
end


imgui.OnInitialize(function()
    local ImVec4 = imgui.ImVec4
    imgui.SwitchContext()
    imgui.GetStyle().Colors[imgui.Col.WindowBg] = imgui.ImVec4(0.14, 0.12, 0.16, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ChildBg] = imgui.ImVec4(0.30, 0.20, 0.39, 0.00)
    imgui.GetStyle().Colors[imgui.Col.PopupBg] = imgui.ImVec4(0.05, 0.05, 0.10, 0.90)
    imgui.GetStyle().Colors[imgui.Col.Border] = imgui.ImVec4(0.89, 0.85, 0.92, 0.30)
    imgui.GetStyle().Colors[imgui.Col.BorderShadow] = imgui.ImVec4(0.00, 0.00, 0.00, 0.00)
    imgui.GetStyle().Colors[imgui.Col.FrameBg] = imgui.ImVec4(0.30, 0.20, 0.39, 1.00)
    imgui.GetStyle().Colors[imgui.Col.FrameBgHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.68)
    imgui.GetStyle().Colors[imgui.Col.FrameBgActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TitleBg] = imgui.ImVec4(0.41, 0.19, 0.63, 0.45)
    imgui.GetStyle().Colors[imgui.Col.TitleBgCollapsed] = imgui.ImVec4(0.41, 0.19, 0.63, 0.35)
    imgui.GetStyle().Colors[imgui.Col.TitleBgActive] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
    imgui.GetStyle().Colors[imgui.Col.MenuBarBg] = imgui.ImVec4(0.30, 0.20, 0.39, 0.57)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarBg] = imgui.ImVec4(0.30, 0.20, 0.39, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrab] = imgui.ImVec4(0.41, 0.19, 0.63, 0.31)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.CheckMark] = imgui.ImVec4(0.56, 0.61, 1.00, 1.00)
    imgui.GetStyle().Colors[imgui.Col.SliderGrab] = imgui.ImVec4(0.41, 0.19, 0.63, 0.24)
    imgui.GetStyle().Colors[imgui.Col.SliderGrabActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.Button] = imgui.ImVec4(0.41, 0.19, 0.63, 0.44)
    imgui.GetStyle().Colors[imgui.Col.ButtonHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.86)
    imgui.GetStyle().Colors[imgui.Col.ButtonActive] = imgui.ImVec4(0.64, 0.33, 0.94, 1.00)
    imgui.GetStyle().Colors[imgui.Col.Header] = imgui.ImVec4(0.41, 0.19, 0.63, 0.76)
    imgui.GetStyle().Colors[imgui.Col.HeaderHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.86)
    imgui.GetStyle().Colors[imgui.Col.HeaderActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ResizeGrip] = imgui.ImVec4(0.41, 0.19, 0.63, 0.20)
    imgui.GetStyle().Colors[imgui.Col.ResizeGripHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 0.78)
    imgui.GetStyle().Colors[imgui.Col.ResizeGripActive] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PlotLines] = imgui.ImVec4(0.89, 0.85, 0.92, 0.63)
    imgui.GetStyle().Colors[imgui.Col.PlotLinesHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PlotHistogram] = imgui.ImVec4(0.89, 0.85, 0.92, 0.63)
    imgui.GetStyle().Colors[imgui.Col.PlotHistogramHovered] = imgui.ImVec4(0.41, 0.19, 0.63, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TextSelectedBg] = imgui.ImVec4(0.41, 0.19, 0.63, 0.43)
end)

function imgui.Link(link, text)
    text = text or link
    local tSize = imgui.CalcTextSize(text)
    local p = imgui.GetCursorScreenPos()
    local DL = imgui.GetWindowDrawList()
    local col = { 0xFFFF7700, 0xFFFF9900 }
    if imgui.InvisibleButton("##" .. link, tSize) then os.execute("explorer " .. link) end
    local color = imgui.IsItemHovered() and col[1] or col[2]
    DL:AddText(p, color, text)
    DL:AddLine(imgui.ImVec2(p.x, p.y + tSize.y), imgui.ImVec2(p.x + tSize.x, p.y + tSize.y), color)
end
Хз, у меня окно нормальное.
1707995321785.png