imgui диалог

Kecer

Участник
Автор темы
241
11
Версия MoonLoader
.026-beta
У меня есть диалог с репортом, в этом диалог, в этом диалоге две кнопки

1640120959090.png


У меня есть imgui и как сделать так что бы при вводе в imgui.InputText и по нажатию кнопки в imgui текст отправлялся игроку, тобишь в диалоге нажималась кнопка "Принять" пробовал через диалог респоунс но там он отправляет автоматически увы

Нужно что бы по нажатию кнопки, текст который я ввёл в imgui.InputText вводился в диалогн и по нажатию кнопки imgui.Button оно отправлялось
 
Последнее редактирование:
Решение
Lua:
local imgui = require 'imgui'
local on = require'lib.samp.events'

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

local main_window_state = imgui.ImBool(false)
local Buffer = imgui.ImBuffer(256)
local dial, but1, but2, tt = '', '', '', ''

function on.onShowDialog(did, style, title, b1, b2, text)
    if style == 1 and text:find('Жалоба/Вопрос от (%w+_%w+)%[(%d+)%]') then
        dial, but1, but2, tt = did, b1, b2, text:gsub('{%P+}','')
        main_window_state.v = true
    end
end

function imgui.OnDrawFrame()
    st()
    if main_window_state.v and tt ~= nil and tt ~= '' then
        imgui.SetNextWindowSize(imgui.ImVec2(250, 150), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Ответ на вопрос...

qdIbp

Автор темы
Проверенный
1,388
1,146
Lua:
local report_window_state = imgui.ImBool(true)

function samp.onShowDialog(dialogId, style, title, button1, button2, text)
    diaText = text
    if dialogId == 6370 and text:find('Жалоба/Вопрос от %w+_%w+%[%d+%]') then
        nickrep = text:match('Жалоба/Вопрос от %w+_%w+%[%d+%]')
        if text:find('[c8e464](.*)') then
            reason = text:match('{c8e464}(.*)')
        end
        report_window_state.v = true
    end
end

if imgui.Button(u8"Отправить", imgui.ImVec2(113,0)) then
    sampSendDialogResponse(6370,1, _,u8:decode(text_buffer.v))
    sampCloseCurrentDialogWithButton(1)
    report_window_state.v = false
end
Это весь код?
 

qdIbp

Автор темы
Проверенный
1,388
1,146
Lua:
local imgui = require 'imgui'
local on = require'lib.samp.events'

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

local Buffer = imgui.ImBuffer(256)
local dial, but1, but2, tt = '', 'ОК', 'НЕ ОК', 'Nick_Nick'
local report_window_state = imgui.ImBool(true)

function on.onShowDialog(did, style, title, b1, b2, text)
    if did == 6370 and style == 1 and text:find('Жалоба/Вопрос от (%w+_%w+)%[(%d+)%]') then
        dial, but1, but2, tt = did, b1, b2, text:gsub('{%P+}','')
        report_window_state.v = true
    end
end

function imgui.OnDrawFrame()
    if report_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(250, 150), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Ответ на вопрос '..tt:match('(%w+_%w+)'), report_window_state, imgui.WindowFlags.NoResize)
                imgui.Text(u8(tt))

                imgui.PushItemWidth(230)
                imgui.InputText(' ', Buffer)
                imgui.PopItemWidth()
             
                if imgui.Button(u8(but1),imgui.ImVec2(112, 20)) and Buffer.v ~= nil and Buffer.v ~= '' then
                    sampSendDialogResponse(dial,1, _,u8:decode(Buffer.v))
                    sampCloseCurrentDialogWithButton(0)
                    Buffer.v = ''
                    --report_window_state.v = false
                end
                    imgui.SameLine()
                if imgui.Button(u8(but2),imgui.ImVec2(113, 20)) then
                    sampCloseCurrentDialogWithButton(0)
                    Buffer.v = ''
                    report_window_state.v = false
                end
        imgui.End()
    end
end

function main()
        sampRegisterChatCommand('cmd',function() report_window_state.v = not report_window_state.v print(report_window_state.v) end)
    while true do wait(0)
        imgui.Process = report_window_state.v
    end
end

Или тебе надо чтобы ты заспавнился и эта х вылезла?
 

Kecer

Участник
Автор темы
241
11
Lua:
local imgui = require 'imgui'
local on = require'lib.samp.events'

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

local Buffer = imgui.ImBuffer(256)
local dial, but1, but2, tt = '', 'ОК', 'НЕ ОК', 'Nick_Nick'
local report_window_state = imgui.ImBool(true)

function on.onShowDialog(did, style, title, b1, b2, text)
    if did == 6370 and style == 1 and text:find('Жалоба/Вопрос от (%w+_%w+)%[(%d+)%]') then
        dial, but1, but2, tt = did, b1, b2, text:gsub('{%P+}','')
        report_window_state.v = true
    end
end

function imgui.OnDrawFrame()
    if report_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(250, 150), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Ответ на вопрос '..tt:match('(%w+_%w+)'), report_window_state, imgui.WindowFlags.NoResize)
                imgui.Text(u8(tt))

                imgui.PushItemWidth(230)
                imgui.InputText(' ', Buffer)
                imgui.PopItemWidth()
            
                if imgui.Button(u8(but1),imgui.ImVec2(112, 20)) and Buffer.v ~= nil and Buffer.v ~= '' then
                    sampSendDialogResponse(dial,1, _,u8:decode(Buffer.v))
                    sampCloseCurrentDialogWithButton(0)
                    Buffer.v = ''
                    --report_window_state.v = false
                end
                    imgui.SameLine()
                if imgui.Button(u8(but2),imgui.ImVec2(113, 20)) then
                    sampCloseCurrentDialogWithButton(0)
                    Buffer.v = ''
                    report_window_state.v = false
                end
        imgui.End()
    end
end

function main()
        sampRegisterChatCommand('cmd',function() report_window_state.v = not report_window_state.v print(report_window_state.v) end)
    while true do wait(0)
        imgui.Process = report_window_state.v
    end
end
Урааа, заработало, чо это за волшебная строчка


Lua:
    while true do wait(0)
        imgui.Process = report_window_state.v
    end
 
  • Ха-ха
Реакции: qdIbp

qdIbp

Автор темы
Проверенный
1,388
1,146
Урааа, заработало, чо это за волшебная строчка


Lua:
    while true do wait(0)
        imgui.Process = report_window_state.v
    end
Бесконечный цикл
имгуй процесс
конец цикла

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

Lua:
local imgui = require 'imgui'
local on = require'lib.samp.events'
local inicfg = require 'inicfg'

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

local anotherIni = inicfg.load(nil, "stat")
if anotherIni == nil then
    local anotherIni = inicfg.load({
        st = {
        ['stat'] = false,
        },
    })
    inicfg.save(anotherIni, "stat")
    print('перезагрузи скрипт')
end
   
local Buffer = imgui.ImBuffer(256)
local dial, but1, but2, tt = '', 'ОК', 'НЕ ОК', 'Nick_Nick'
local report_window_state = imgui.ImBool(true)

function on.onShowDialog(did, style, title, b1, b2, text)
    if did == 6370 and style == 1 and text:find('Жалоба/Вопрос от (%w+_%w+)%[(%d+)%]') then
        dial, but1, but2, tt = did, b1, b2, text:gsub('{%P+}','')
        report_window_state.v = true
    end
end

function imgui.OnDrawFrame()
    if report_window_state.v and anotherIni.st.stat == true then
        imgui.SetNextWindowSize(imgui.ImVec2(250, 150), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Ответ на вопрос '..tt:match('(%w+_%w+)'), report_window_state, imgui.WindowFlags.NoResize)
                imgui.Text(u8(tt))

                imgui.PushItemWidth(230)
                imgui.InputText(' ', Buffer)
                imgui.PopItemWidth()
             
                if imgui.Button(u8(but1),imgui.ImVec2(112, 20)) and Buffer.v ~= nil and Buffer.v ~= '' then
                    sampSendDialogResponse(dial,1, _,u8:decode(Buffer.v))
                    sampCloseCurrentDialogWithButton(0)
                    Buffer.v = ''
                    --report_window_state.v = false
                end
                    imgui.SameLine()
                if imgui.Button(u8(but2),imgui.ImVec2(113, 20)) then
                    sampCloseCurrentDialogWithButton(0)
                    Buffer.v = ''
                    report_window_state.v = false
                end

        imgui.End()
    end
end

function main()
        function on.onSendSpawn() anotherIni.st.stat = true inicfg.save(anotherIni, "stat") end
        sampRegisterChatCommand('cmd',function() report_window_state.v = not report_window_state.v print(report_window_state.v) end)
    while true do wait(0)
        imgui.Process = report_window_state.v
        imgui.ShowCursor = report_window_state.v
    end
end

function onQuitGame() anotherIni.st.stat = false inicfg.save(anotherIni, "bind") end
 

Kecer

Участник
Автор темы
241
11
Бесконечный цикл
имгуй процесс
конец цикла

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

Lua:
local imgui = require 'imgui'
local on = require'lib.samp.events'
local inicfg = require 'inicfg'

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

local anotherIni = inicfg.load(nil, "stat")
if anotherIni == nil then
    local anotherIni = inicfg.load({
        st = {
        ['stat'] = false,
        },
    })
    inicfg.save(anotherIni, "stat")
    print('перезагрузи скрипт')
end
  
local Buffer = imgui.ImBuffer(256)
local dial, but1, but2, tt = '', 'ОК', 'НЕ ОК', 'Nick_Nick'
local report_window_state = imgui.ImBool(true)

function on.onShowDialog(did, style, title, b1, b2, text)
    if did == 6370 and style == 1 and text:find('Жалоба/Вопрос от (%w+_%w+)%[(%d+)%]') then
        dial, but1, but2, tt = did, b1, b2, text:gsub('{%P+}','')
        report_window_state.v = true
    end
end

function imgui.OnDrawFrame()
    if report_window_state.v and anotherIni.st.stat == true then
        imgui.SetNextWindowSize(imgui.ImVec2(250, 150), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Ответ на вопрос '..tt:match('(%w+_%w+)'), report_window_state, imgui.WindowFlags.NoResize)
                imgui.Text(u8(tt))

                imgui.PushItemWidth(230)
                imgui.InputText(' ', Buffer)
                imgui.PopItemWidth()
            
                if imgui.Button(u8(but1),imgui.ImVec2(112, 20)) and Buffer.v ~= nil and Buffer.v ~= '' then
                    sampSendDialogResponse(dial,1, _,u8:decode(Buffer.v))
                    sampCloseCurrentDialogWithButton(0)
                    Buffer.v = ''
                    --report_window_state.v = false
                end
                    imgui.SameLine()
                if imgui.Button(u8(but2),imgui.ImVec2(113, 20)) then
                    sampCloseCurrentDialogWithButton(0)
                    Buffer.v = ''
                    report_window_state.v = false
                end

        imgui.End()
    end
end

function main()
        function on.onSendSpawn() anotherIni.st.stat = true inicfg.save(anotherIni, "stat") end
        sampRegisterChatCommand('cmd',function() report_window_state.v = not report_window_state.v print(report_window_state.v) end)
    while true do wait(0)
        imgui.Process = report_window_state.v
        imgui.ShowCursor = report_window_state.v
    end
end

function onQuitGame() anotherIni.st.stat = false inicfg.save(anotherIni, "bind") end
неа, оно появляется тока када реп открывает, так шо всё зашибись, спасибо бро шо уделил время, люблю целую