Завершается процесс имгуи

MihailPipka

Новичок
Автор темы
12
5
Версия MoonLoader
.026-beta
Первое меню имгуи работает при открытии через команду, далее идет 2 чек бокса, каждый из которых вызывает новое меню имгуи при положении true, но при нажатии на 1 из них - на пол секунды появляется и закрывается вместе с основным. Теперь при открытии основного через команду появляется 2 окна на пол секунды т.к. чек бокс в положении тру.
Я не знаю как это исправить, хотя если по отдельности открывать их через команду без основного - все работает гуд.

Lua:
function main()
  if not isSampLoaded() or not isSampfuncsLoaded() then return end
  while not isSampAvailable() do wait(100) end
    if lab == 1 then
        sampAddChatMessage(tag, -1)
    else
        sampAddChatMessage("12", -1)
    end

    sampRegisterChatCommand("img", cmd_img)
    sampRegisterChatCommand('check', cmd_check)
    sampRegisterChatCommand('win1', cmd_win1)
    sampRegisterChatCommand('win2', cmd_win2)

    imgui.Process = false

    while true do
        wait(0)
    end
end

function cmd_img(arg)
    window.v = not window.v
    imgui.Process = window.v
end

function imgui.OnDrawFrame()

    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(1000, 500), imgui.Cond.FirstUseEver)
        imgui.Begin("Imgui menu", window)
        if imgui.Button(u8'Своя статистика') then
            sampProcessChatInput('/astats '.. id)
        end

        imgui.Checkbox("Online", c_but)
        imgui.Checkbox("Offline", c_but1)

        if c_but.v then
            window1.v = not window1.v
            imgui.Process = window1.v
        end

        if c_but1.v then
            window2.v = not window2.v
            imgui.Process = window2.v
        end

        imgui.End()
    end

    if window1.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
        imgui.Begin("Offline", window1)
        imgui.InputText(u8" (оффлайн)", text_buffer)
        if imgui.Button('Offline') then
            sampProcessChatInput('/offastats '.. u8:decode(text_buffer.v))
        end
        imgui.End()
    end

    if window2.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
        imgui.Begin("Online", window2)
        imgui.InputText(u8' (онлайн)', text_buffer1)
        if imgui.Button('Online') then
            sampProcessChatInput('/astats '.. u8:decode(text_buffer1.v))
        end
        imgui.End()
    end
end

function cmd_win1(arg)
    window1.v = not window1.v
    imgui.Process = window1.v
end

function cmd_win2(arg)
    window2.v = not window2.v
    imgui.Process = window2.v
end
 

qdIbp

Автор темы
Проверенный
1,436
1,176
так?

Lua:
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local c_but,c_but1= imgui.ImBool(false),imgui.ImBool(false)
local window= imgui.ImBool(false)
local window1= imgui.ImBool(false)
local window2= imgui.ImBool(false)

local text_buffer, text_buffer1 = imgui.ImBuffer(256),imgui.ImBuffer(256)

local sw, sh = getScreenResolution()
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
        if lab == 1 then
            sampAddChatMessage(tag, -1)
        else
            sampAddChatMessage("12", -1)
        end

        sampRegisterChatCommand("img", function()window.v = not window.v end)
        sampRegisterChatCommand('check', check_cmd)
        sampRegisterChatCommand('win1', function()window1.v = not window1.v end)
        sampRegisterChatCommand('win2', function()window2.v = not window2.v end)

    while true do wait(0)
        imgui.Process = window.v or window1.v or window2.v
        imgui.ShowCursor = window.v or window1.v or window2.v
    end
end

function imgui.OnDrawFrame()
   
    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(1000, 500), imgui.Cond.FirstUseEver)
        imgui.Begin("Imgui menu", window)
            if imgui.Button(u8'Своя статистика') then
                sampProcessChatInput('/astats '.. id)
            end
           
            imgui.Checkbox("Online", c_but1)
            imgui.Checkbox("Offline", c_but)
        imgui.End()
    end

    if c_but.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
        imgui.Begin("Offline", window1)
            imgui.InputText(u8" (оффлайн)", text_buffer)
            if imgui.Button('Offline') then
                sampProcessChatInput('/offastats '.. u8:decode(text_buffer.v))
            end
        imgui.End()
    end

    if c_but1.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
        imgui.Begin("Online", window2)
            imgui.InputText(u8' (онлайн)', text_buffer1)
            if imgui.Button('Online') then
                sampProcessChatInput('/astats '.. u8:decode(text_buffer1.v))
            end
        imgui.End()
    end
end

Ты не создал переменные для чек бокса
local c_but = Imgui.ImBool(false)
local c_but1 = Imgui.ImBool(false)
Это в верх скрипта

Также ошибка в imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
Ты делишь sw и sh на 2, что у тебя равняеться этим переменным?

Что у тебя равняеться lab?
Ты даже не создал переменную lab, и используешь её.
может это не полностью скопированный код :(
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
Это кинь в беск цикл.
Не умеешь писать нормальный код - не учи других говно писать
Зачем создавать отдельную функцию для каждоый команды, сделай это в мейне.
12 доебов из 10


Первое меню имгуи работает при открытии через команду, далее идет 2 чек бокса, каждый из которых вызывает новое меню имгуи при положении true, но при нажатии на 1 из них - на пол секунды появляется и закрывается вместе с основным. Теперь при открытии основного через команду появляется 2 окна на пол секунды т.к. чек бокс в положении тру.
Я не знаю как это исправить, хотя если по отдельности открывать их через команду без основного - все работает гуд.

Lua:
function main()
  if not isSampLoaded() or not isSampfuncsLoaded() then return end
  while not isSampAvailable() do wait(100) end
    if lab == 1 then
        sampAddChatMessage(tag, -1)
    else
        sampAddChatMessage("12", -1)
    end

    sampRegisterChatCommand("img", cmd_img)
    sampRegisterChatCommand('check', cmd_check)
    sampRegisterChatCommand('win1', cmd_win1)
    sampRegisterChatCommand('win2', cmd_win2)

    imgui.Process = false

    while true do
        wait(0)
    end
end

function cmd_img(arg)
    window.v = not window.v
    imgui.Process = window.v
end

function imgui.OnDrawFrame()

    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(1000, 500), imgui.Cond.FirstUseEver)
        imgui.Begin("Imgui menu", window)
        if imgui.Button(u8'Своя статистика') then
            sampProcessChatInput('/astats '.. id)
        end

        imgui.Checkbox("Online", c_but)
        imgui.Checkbox("Offline", c_but1)

        if c_but.v then
            window1.v = not window1.v
            imgui.Process = window1.v
        end

        if c_but1.v then
            window2.v = not window2.v
            imgui.Process = window2.v
        end

        imgui.End()
    end

    if window1.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
        imgui.Begin("Offline", window1)
        imgui.InputText(u8" (оффлайн)", text_buffer)
        if imgui.Button('Offline') then
            sampProcessChatInput('/offastats '.. u8:decode(text_buffer.v))
        end
        imgui.End()
    end

    if window2.v then
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
        imgui.Begin("Online", window2)
        imgui.InputText(u8' (онлайн)', text_buffer1)
        if imgui.Button('Online') then
            sampProcessChatInput('/astats '.. u8:decode(text_buffer1.v))
        end
        imgui.End()
    end
end

function cmd_win1(arg)
    window1.v = not window1.v
    imgui.Process = window1.v
end

function cmd_win2(arg)
    window2.v = not window2.v
    imgui.Process = window2.v
end
В следующий раз прикладывай полный код, а не его кусок. Так будет проще подсказать
 
Последнее редактирование:
  • Нравится
Реакции: Rice.