Помогите ! Как сделать Поиск ImGui

LHaverss

Новичок
Автор темы
9
0
Версия MoonLoader
.027.0-preview
Нужно сделать поиск , есть много кнопок и нужно сделать поиск по ним. В поисковую строку вписываю "BMW" и выдается кнопка с именем "BMW"
 
Решение
Lua:
local key = require 'vkeys'
local imgui = require 'imgui'

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


local main_window_state = imgui.ImBool(false)
local test_text_buffer = imgui.ImBuffer(256)
local butt = {
    ['xyi'] = 'xyi - xz',
    ['xyiznai'] = 'xyiznai - xz',
    ['tevirp'] = 'tevirp - privet',
    ['krumnach'] = 'krumnach согл?',
    ['leninkracava'] = 'leninkracava, а почему бы нет?',
    ['mashina'] = 'ленинград - mashina',
    ['stalinstaralca'] = 'stalinstaralca кто не согл тот гей',
    ['BMW'] = 'какое BMW'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do wait(0)
    if...

qdIbp

Автор темы
Проверенный
1,435
1,175
Так?

Lua:
local key = require 'vkeys'
local imgui = require 'imgui'

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


local main_window_state = imgui.ImBool(false)
local test_text_buffer = imgui.ImBuffer(256)
local butt = {
    ['xyi'] = 'xyi',
    ['xyiznai'] = 'xyiznai',
    ['tevirp'] = 'tevirp',
    ['krumnach'] = 'krumnach',
    ['leninkracava'] = 'leninkracava',
    ['mashina'] = 'mashina',
    ['stalinstaralca'] = 'stalinstaralca',
    ['BMW'] = 'BMW'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do wait(0)
    if wasKeyPressed(key.VK_O) then  main_window_state.v = not main_window_state.v  end
        imgui.Process = main_window_state.v
    end
end

function imgui.OnDrawFrame()
    resX, resY = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("XZ", main_window_state, imgui.WindowFlags.AlwaysAutoResize )
            imgui.InputText(u8'Что ищем?', test_text_buffer)
                for i,k in pairs(butt) do
                    if i:find(test_text_buffer.v) then
                        imgui.Button(i)
                    end
                end
        imgui.End()      
    end
end
 
Последнее редактирование:

LHaverss

Новичок
Автор темы
9
0
Так?

Lua:
local key = require 'vkeys'
local imgui = require 'imgui'

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


local main_window_state = imgui.ImBool(false)
local test_text_buffer = imgui.ImBuffer(256)
local butt = {
    ['xyi'] = 'xyi',
    ['xyiznai'] = 'xyiznai',
    ['tevirp'] = 'tevirp',
    ['krumnach'] = 'krumnach',
    ['leninkracava'] = 'leninkracava',
    ['mashina'] = 'mashina',
    ['stalinstaralca'] = 'stalinstaralca',
    ['BMW'] = 'BMW'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do wait(0)
    if wasKeyPressed(key.VK_O) then  main_window_state.v = not main_window_state.v  end
        imgui.Process = main_window_state.v
    end
end

function imgui.OnDrawFrame()
    resX, resY = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("XZ", main_window_state, imgui.WindowFlags.AlwaysAutoResize )
            imgui.InputText(u8'Что ищем?', test_text_buffer)
                for i,k in pairs(butt) do
                    if k:find(test_text_buffer.v) then
                        imgui.Button(k)
                    end
                end
        imgui.End()      
    end
end
Да , спасибо большое 3 дня искал, не мог найти как примерно это сделать

Так?

Lua:
local key = require 'vkeys'
local imgui = require 'imgui'

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


local main_window_state = imgui.ImBool(false)
local test_text_buffer = imgui.ImBuffer(256)
local butt = {
    ['xyi'] = 'xyi',
    ['xyiznai'] = 'xyiznai',
    ['tevirp'] = 'tevirp',
    ['krumnach'] = 'krumnach',
    ['leninkracava'] = 'leninkracava',
    ['mashina'] = 'mashina',
    ['stalinstaralca'] = 'stalinstaralca',
    ['BMW'] = 'BMW'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do wait(0)
    if wasKeyPressed(key.VK_O) then  main_window_state.v = not main_window_state.v  end
        imgui.Process = main_window_state.v
    end
end

function imgui.OnDrawFrame()
    resX, resY = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("XZ", main_window_state, imgui.WindowFlags.AlwaysAutoResize )
            imgui.InputText(u8'Что ищем?', test_text_buffer)
                for i,k in pairs(butt) do
                    if k:find(test_text_buffer.v) then
                        imgui.Button(k)
                    end
                end
        imgui.End()      
    end
end
Просто есть ещё 1 вопросик - можно ли к этим кнопкам привязать - "sampSetCurrentDialogEditboxText"
 

qdIbp

Автор темы
Проверенный
1,435
1,175
Lua:
local key = require 'vkeys'
local imgui = require 'imgui'

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


local main_window_state = imgui.ImBool(false)
local test_text_buffer = imgui.ImBuffer(256)
local butt = {
    ['xyi'] = 'xyi - xz',
    ['xyiznai'] = 'xyiznai - xz',
    ['tevirp'] = 'tevirp - privet',
    ['krumnach'] = 'krumnach согл?',
    ['leninkracava'] = 'leninkracava, а почему бы нет?',
    ['mashina'] = 'ленинград - mashina',
    ['stalinstaralca'] = 'stalinstaralca кто не согл тот гей',
    ['BMW'] = 'какое BMW'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do wait(0)
    if wasKeyPressed(key.VK_O) then  main_window_state.v = not main_window_state.v  end
        imgui.Process = main_window_state.v
    end
end

function imgui.OnDrawFrame()
    resX, resY = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("XZ", main_window_state, imgui.WindowFlags.AlwaysAutoResize )
            imgui.InputText(u8'Что ищем?', test_text_buffer)
                for i,k in pairs(butt) do
                    if i:find(test_text_buffer.v) then
                        if imgui.Button(i) then
                            sampSetCurrentDialogEditboxText(k)-- будет вводить то что идет после = в таблице
                        end
                    end
                end
        imgui.End()      
    end
end
 

LHaverss

Новичок
Автор темы
9
0
Lua:
local key = require 'vkeys'
local imgui = require 'imgui'

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


local main_window_state = imgui.ImBool(false)
local test_text_buffer = imgui.ImBuffer(256)
local butt = {
    ['xyi'] = 'xyi - xz',
    ['xyiznai'] = 'xyiznai - xz',
    ['tevirp'] = 'tevirp - privet',
    ['krumnach'] = 'krumnach согл?',
    ['leninkracava'] = 'leninkracava, а почему бы нет?',
    ['mashina'] = 'ленинград - mashina',
    ['stalinstaralca'] = 'stalinstaralca кто не согл тот гей',
    ['BMW'] = 'какое BMW'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do wait(0)
    if wasKeyPressed(key.VK_O) then  main_window_state.v = not main_window_state.v  end
        imgui.Process = main_window_state.v
    end
end

function imgui.OnDrawFrame()
    resX, resY = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("XZ", main_window_state, imgui.WindowFlags.AlwaysAutoResize )
            imgui.InputText(u8'Что ищем?', test_text_buffer)
                for i,k in pairs(butt) do
                    if i:find(test_text_buffer.v) then
                        if imgui.Button(i) then
                            sampSetCurrentDialogEditboxText(k)-- будет вводить то что идет после = в таблице
                        end
                    end
                end
        imgui.End()     
    end
end
Слушай такое дело, так как у меня текст на руском должен быть в названии Кнопки. При поиске он не видит русский
 

LHaverss

Новичок
Автор темы
9
0
кодировку изменять пробовал?
Суть не в том, пишет в названии кнопки на русском , а вот при поиске например слова "Продам" он его не ищит

1653496141710.png
1653496155371.png
 
Последнее редактирование:

qdIbp

Автор темы
Проверенный
1,435
1,175
Слушай такое дело, так как у меня текст на руском должен быть в названии Кнопки. При поиске он не видит русский
Тут уже моя ошибка то что не учел русс язык, Прошу прощение

Lua:
local key = require 'vkeys'
local imgui = require 'imgui'

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


local main_window_state = imgui.ImBool(false)
local test_text_buffer = imgui.ImBuffer(256)
local butt = {
    ['хуй'] = 'xyi - xz',
    ['хуйзнает'] = 'xyiznai - xz',
    ['tevirp'] = 'tevirp - privet',
    ['krumnach'] = 'krumnach согл?',
    ['leninkracava'] = 'leninkracava, а почему бы нет?',
    ['mashina'] = 'ленинград - mashina',
    ['stalinstaralca'] = 'stalinstaralca кто не согл тот гей',
    ['BMW'] = 'какое BMW'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do wait(0)
    if wasKeyPressed(key.VK_O) then  main_window_state.v = not main_window_state.v  end
        imgui.Process = main_window_state.v
    end
end

function imgui.OnDrawFrame()
    resX, resY = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("XZ", main_window_state, imgui.WindowFlags.AlwaysAutoResize )
            imgui.InputText(u8'Что ищем?', test_text_buffer)
                for i,k in pairs(butt) do
                    if i:find(u8:decode(test_text_buffer.v)) then
                        if imgui.Button(u8(i)) then
                            sampSetCurrentDialogEditboxText(k)-- будет вводить то что идет после = в таблице
                        end
                    end
                end
        imgui.End()    
    end
end
 
  • Нравится
Реакции: LHaverss

Iskon

Участник
112
18
Тут уже моя ошибка то что не учел русс язык, Прошу прощение

Lua:
local key = require 'vkeys'
local imgui = require 'imgui'

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


local main_window_state = imgui.ImBool(false)
local test_text_buffer = imgui.ImBuffer(256)
local butt = {
    ['хуй'] = 'xyi - xz',
    ['хуйзнает'] = 'xyiznai - xz',
    ['tevirp'] = 'tevirp - privet',
    ['krumnach'] = 'krumnach согл?',
    ['leninkracava'] = 'leninkracava, а почему бы нет?',
    ['mashina'] = 'ленинград - mashina',
    ['stalinstaralca'] = 'stalinstaralca кто не согл тот гей',
    ['BMW'] = 'какое BMW'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do wait(0)
    if wasKeyPressed(key.VK_O) then  main_window_state.v = not main_window_state.v  end
        imgui.Process = main_window_state.v
    end
end

function imgui.OnDrawFrame()
    resX, resY = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("XZ", main_window_state, imgui.WindowFlags.AlwaysAutoResize )
            imgui.InputText(u8'Что ищем?', test_text_buffer)
                for i,k in pairs(butt) do
                    if i:find(u8:decode(test_text_buffer.v)) then
                        if imgui.Button(u8(i)) then
                            sampSetCurrentDialogEditboxText(k)-- будет вводить то что идет после = в таблице
                        end
                    end
                end
        imgui.End()   
    end
end
скрипт крашит, если в инпут ввести знаки [] ()