вопрос с переносом диалога в imgui

Kegwineye.

Участник
Автор темы
478
20
Версия MoonLoader
.025-beta
1664901189033.png

как данный диалог поместить в imgui по всякому пробывал хукать, не получается с моими знаниями.

Lua:
local imgui = require('imgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local sampev = require 'lib.samp.events'
local list = {}
local window = imgui.ImBool(false)


local colors = imgui.GetStyle().Colors;
local icol = imgui.Col
local ImVec4 = imgui.ImVec4

function main()
    while not isSampAvailable() do wait(200) end
    imgui.Process = false
    window.v = false  --show window
    while true do
        wait(0)
        imgui.Process = window.v
    end
end


function imgui.OnDrawFrame()
    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2(350.0, 250.0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(280.0, 70.0), imgui.Cond.FirstUseEver)
        
            imgui.Begin(u8'Лидеры в сети', window)
        
        if list[1] ~= nil then
            for i = 1, #list do
                
                local a,b,c,e = list[i]:match("[}](.+)[-](.+)[-](.+)[-](.+)")
                imgui.Button(u8(a))
                imgui.SameLine()
                imgui.Button(u8(b))
                imgui.SameLine()
                imgui.Button(u8(c))
                imgui.SameLine()
                imgui.Button(u8(c))
            end
        end

        imgui.End()
    end
    
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if title:find("Члены организации в сети") then
        list = {}
        for v in string.gmatch(text, '[^\n]+') do
            if not v:find("ID") then
                table.insert(list, v)
            end
        end
        sampSendDialogResponse(id, 1)
        window.v = true
        return false
    end
end

function bluetheme()
    imgui.SwitchContext()


    imgui.GetStyle().WindowPadding = imgui.ImVec2(8, 8)
    imgui.GetStyle().WindowRounding = 16.0
    imgui.GetStyle().FramePadding = imgui.ImVec2(5, 3)
    imgui.GetStyle().ItemSpacing = imgui.ImVec2(4, 4)
    imgui.GetStyle().ItemInnerSpacing = imgui.ImVec2(5, 5)
    imgui.GetStyle().IndentSpacing = 9.0
    imgui.GetStyle().ScrollbarSize = 17.0
    imgui.GetStyle().ScrollbarRounding = 16.0
    imgui.GetStyle().GrabMinSize = 7.0
    imgui.GetStyle().GrabRounding = 6.0
    imgui.GetStyle().ChildWindowRounding = 6.0
    imgui.GetStyle().FrameRounding = 6.0

    colors[icol.Text]                   = ImVec4(0.90, 0.90, 0.90, 1.00);
    colors[icol.TextDisabled]           = ImVec4(0.60, 0.60, 0.60, 1.00);
    colors[icol.WindowBg]               = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.ChildWindowBg]          = ImVec4(0.13, 0.13, 0.13, 1.00);
    colors[icol.PopupBg]                = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.Border]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.BorderShadow]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.FrameBg]                = ImVec4(0.26, 0.46, 0.82, 0.59);
    colors[icol.FrameBgHovered]         = ImVec4(0.26, 0.46, 0.82, 0.88);
    colors[icol.FrameBgActive]          = ImVec4(0.28, 0.53, 1.00, 1.00);
    colors[icol.TitleBg]                = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.TitleBgActive]          = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.TitleBgCollapsed]       = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.MenuBarBg]              = ImVec4(0.26, 0.46, 0.82, 0.75);
    colors[icol.ScrollbarBg]            = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.ScrollbarGrab]          = ImVec4(0.26, 0.46, 0.82, 0.68);
    colors[icol.ScrollbarGrabHovered]   = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ScrollbarGrabActive]    = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ComboBg]                = ImVec4(0.26, 0.46, 0.82, 0.79);
    colors[icol.CheckMark]              = ImVec4(1.000, 0.000, 0.000, 1.000)
    colors[icol.SliderGrab]             = ImVec4(0.263, 0.459, 0.824, 1.000)
    colors[icol.SliderGrabActive]       = ImVec4(0.66, 0.66, 0.66, 1.00);
    colors[icol.Button]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ButtonHovered]          = ImVec4(0.26, 0.46, 0.82, 0.59);
    colors[icol.ButtonActive]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.Header]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.HeaderHovered]          = ImVec4(0.26, 0.46, 0.82, 0.74);
    colors[icol.HeaderActive]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.Separator]              = ImVec4(0.37, 0.37, 0.37, 1.00);
    colors[icol.SeparatorHovered]       = ImVec4(0.60, 0.60, 0.70, 1.00);
    colors[icol.SeparatorActive]        = ImVec4(0.70, 0.70, 0.90, 1.00);
    colors[icol.ResizeGrip]             = ImVec4(1.00, 1.00, 1.00, 0.30);
    colors[icol.ResizeGripHovered]      = ImVec4(1.00, 1.00, 1.00, 0.60);
    colors[icol.ResizeGripActive]       = ImVec4(1.00, 1.00, 1.00, 0.90);
    colors[icol.CloseButton]            = ImVec4(0.00, 0.00, 0.00, 1.00);
    colors[icol.CloseButtonHovered]     = ImVec4(0.00, 0.00, 0.00, 0.60);
    colors[icol.CloseButtonActive]      = ImVec4(0.35, 0.35, 0.35, 1.00);
    colors[icol.PlotLines]              = ImVec4(1.00, 1.00, 1.00, 1.00);
    colors[icol.PlotLinesHovered]       = ImVec4(0.90, 0.70, 0.00, 1.00);
    colors[icol.PlotHistogram]          = ImVec4(0.90, 0.70, 0.00, 1.00);
    colors[icol.PlotHistogramHovered]   = ImVec4(1.00, 0.60, 0.00, 1.00);
    colors[icol.TextSelectedBg]         = ImVec4(0.00, 0.00, 1.00, 0.35);
    colors[icol.ModalWindowDarkening]   = ImVec4(0.20, 0.20, 0.20, 0.35);
end
bluetheme()
 

YarikVL

Известный
Проверенный
4,738
1,816
Посмотреть вложение 171750
как данный диалог поместить в imgui по всякому пробывал хукать, не получается с моими знаниями.

Lua:
local imgui = require('imgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local sampev = require 'lib.samp.events'
local list = {}
local window = imgui.ImBool(false)


local colors = imgui.GetStyle().Colors;
local icol = imgui.Col
local ImVec4 = imgui.ImVec4

function main()
    while not isSampAvailable() do wait(200) end
    imgui.Process = false
    window.v = false  --show window
    while true do
        wait(0)
        imgui.Process = window.v
    end
end


function imgui.OnDrawFrame()
    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2(350.0, 250.0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(280.0, 70.0), imgui.Cond.FirstUseEver)
       
            imgui.Begin(u8'Лидеры в сети', window)
       
        if list[1] ~= nil then
            for i = 1, #list do
               
                local a,b,c,e = list[i]:match("[}](.+)[-](.+)[-](.+)[-](.+)")
                imgui.Button(u8(a))
                imgui.SameLine()
                imgui.Button(u8(b))
                imgui.SameLine()
                imgui.Button(u8(c))
                imgui.SameLine()
                imgui.Button(u8(c))
            end
        end

        imgui.End()
    end
   
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if title:find("Члены организации в сети") then
        list = {}
        for v in string.gmatch(text, '[^\n]+') do
            if not v:find("ID") then
                table.insert(list, v)
            end
        end
        sampSendDialogResponse(id, 1)
        window.v = true
        return false
    end
end

function bluetheme()
    imgui.SwitchContext()


    imgui.GetStyle().WindowPadding = imgui.ImVec2(8, 8)
    imgui.GetStyle().WindowRounding = 16.0
    imgui.GetStyle().FramePadding = imgui.ImVec2(5, 3)
    imgui.GetStyle().ItemSpacing = imgui.ImVec2(4, 4)
    imgui.GetStyle().ItemInnerSpacing = imgui.ImVec2(5, 5)
    imgui.GetStyle().IndentSpacing = 9.0
    imgui.GetStyle().ScrollbarSize = 17.0
    imgui.GetStyle().ScrollbarRounding = 16.0
    imgui.GetStyle().GrabMinSize = 7.0
    imgui.GetStyle().GrabRounding = 6.0
    imgui.GetStyle().ChildWindowRounding = 6.0
    imgui.GetStyle().FrameRounding = 6.0

    colors[icol.Text]                   = ImVec4(0.90, 0.90, 0.90, 1.00);
    colors[icol.TextDisabled]           = ImVec4(0.60, 0.60, 0.60, 1.00);
    colors[icol.WindowBg]               = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.ChildWindowBg]          = ImVec4(0.13, 0.13, 0.13, 1.00);
    colors[icol.PopupBg]                = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.Border]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.BorderShadow]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.FrameBg]                = ImVec4(0.26, 0.46, 0.82, 0.59);
    colors[icol.FrameBgHovered]         = ImVec4(0.26, 0.46, 0.82, 0.88);
    colors[icol.FrameBgActive]          = ImVec4(0.28, 0.53, 1.00, 1.00);
    colors[icol.TitleBg]                = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.TitleBgActive]          = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.TitleBgCollapsed]       = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.MenuBarBg]              = ImVec4(0.26, 0.46, 0.82, 0.75);
    colors[icol.ScrollbarBg]            = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.ScrollbarGrab]          = ImVec4(0.26, 0.46, 0.82, 0.68);
    colors[icol.ScrollbarGrabHovered]   = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ScrollbarGrabActive]    = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ComboBg]                = ImVec4(0.26, 0.46, 0.82, 0.79);
    colors[icol.CheckMark]              = ImVec4(1.000, 0.000, 0.000, 1.000)
    colors[icol.SliderGrab]             = ImVec4(0.263, 0.459, 0.824, 1.000)
    colors[icol.SliderGrabActive]       = ImVec4(0.66, 0.66, 0.66, 1.00);
    colors[icol.Button]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ButtonHovered]          = ImVec4(0.26, 0.46, 0.82, 0.59);
    colors[icol.ButtonActive]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.Header]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.HeaderHovered]          = ImVec4(0.26, 0.46, 0.82, 0.74);
    colors[icol.HeaderActive]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.Separator]              = ImVec4(0.37, 0.37, 0.37, 1.00);
    colors[icol.SeparatorHovered]       = ImVec4(0.60, 0.60, 0.70, 1.00);
    colors[icol.SeparatorActive]        = ImVec4(0.70, 0.70, 0.90, 1.00);
    colors[icol.ResizeGrip]             = ImVec4(1.00, 1.00, 1.00, 0.30);
    colors[icol.ResizeGripHovered]      = ImVec4(1.00, 1.00, 1.00, 0.60);
    colors[icol.ResizeGripActive]       = ImVec4(1.00, 1.00, 1.00, 0.90);
    colors[icol.CloseButton]            = ImVec4(0.00, 0.00, 0.00, 1.00);
    colors[icol.CloseButtonHovered]     = ImVec4(0.00, 0.00, 0.00, 0.60);
    colors[icol.CloseButtonActive]      = ImVec4(0.35, 0.35, 0.35, 1.00);
    colors[icol.PlotLines]              = ImVec4(1.00, 1.00, 1.00, 1.00);
    colors[icol.PlotLinesHovered]       = ImVec4(0.90, 0.70, 0.00, 1.00);
    colors[icol.PlotHistogram]          = ImVec4(0.90, 0.70, 0.00, 1.00);
    colors[icol.PlotHistogramHovered]   = ImVec4(1.00, 0.60, 0.00, 1.00);
    colors[icol.TextSelectedBg]         = ImVec4(0.00, 0.00, 1.00, 0.35);
    colors[icol.ModalWindowDarkening]   = ImVec4(0.20, 0.20, 0.20, 0.35);
end
bluetheme()
55 и 57 строки попробуй удалить ( то что на 56 строке - оставь )

А в имгуи так сделай:
Код:
if #list > 0 then
            for i = 1, #list do
                imgui.Text(list[i]) -- если будут иероглифы то нужно u8 дописывать
            end
        end
 
  • Нравится
Реакции: Kegwineye.

Kegwineye.

Участник
Автор темы
478
20
55 и 57 строки попробуй удалить ( то что на 56 строке - оставь )

А в имгуи так сделай:
Код:
if #list > 0 then
            for i = 1, #list do
                imgui.Text(list[i]) -- если будут иероглифы то нужно u8 дописывать
            end
        end
Doma budu uzanu.

55 и 57 строки попробуй удалить ( то что на 56 строке - оставь )

А в имгуи так сделай:
Код:
if #list > 0 then
            for i = 1, #list do
                imgui.Text(list[i]) -- если будут иероглифы то нужно u8 дописывать
            end
        end
не выводит тескт в имгуи окно.
 
Последнее редактирование:

YarikVL

Известный
Проверенный
4,738
1,816

Kegwineye.

Участник
Автор темы
478
20
Поподробней, может скрипт крашиться?
Или попробуй дописать sampAddChatMessage куда-то и посмотришь срабатывает тот или иной блок
Lua:
    if windowleader.v then
        imgui.SetNextWindowPos(imgui.ImVec2(350.0, 250.0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(280.0, 70.0), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Лидеры в сети', windowleader, imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoTitleBar)
        if list[1] ~= nil then
            imgui.Separator()
            imgui.SetCursorPosX(10)
            imgui.Text(u8'Организация')
            imgui.SameLine()
            imgui.SetCursorPosX(145)
            imgui.VerticalSeparator()
            imgui.SetCursorPosX(150)
            imgui.Text(u8'Звание')
            imgui.SameLine()
            imgui.SetCursorPosX(275)
            imgui.VerticalSeparator()
            imgui.SetCursorPosX(280)
            imgui.Text(u8'Ник')
            imgui.SameLine()
            imgui.SetCursorPosX(445)
            imgui.VerticalSeparator()
            imgui.SetCursorPosX(450)
            imgui.Text(u8'Номер')
            imgui.Separator()
            for i = 1, #list do
                
                local a,b,c,e = list[i]:match("[}](.+)[-](.+)[-](.+)[-](.+)")
                imgui.SetCursorPosX(10)
                if imgui.Text(u8(a)) then end
                imgui.Columns()
                imgui.SameLine()
                imgui.SetCursorPosX(145)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(150)
                imgui.Text(u8(b))
                imgui.SameLine()
                imgui.SetCursorPosX(275)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(280)
                imgui.Text(u8(c))
                imgui.SameLine()
                imgui.SetCursorPosX(445)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(450)
                if imgui.Link(u8(e)) then
                    setClipboardText(u8(e))
                end
            end
        end

        imgui.End()
    end
end

function onWindowMessage(msg, wparam, lparam)
    if msg == 0x100 or msg == 0x101 then
        if (wparam == keys.VK_ESCAPE and windowleader.v) and not isPauseMenuActive() then
            consumeWindowMessage(true, false)
            if msg == 0x101 then
                windowleader.v = false
            end
        end
    end
end

function imgui.VerticalSeparator()
    local p = imgui.GetCursorScreenPos()
    imgui.GetWindowDrawList():AddLine(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x, p.y + imgui.GetContentRegionMax().y), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.Separator]))
end

function imgui.Link(label, description)

    local size = imgui.CalcTextSize(label)
    local p = imgui.GetCursorScreenPos()
    local p2 = imgui.GetCursorPos()
    local result = imgui.InvisibleButton(label, size)

    imgui.SetCursorPos(p2)

    if imgui.IsItemHovered() then
        if description then
            imgui.BeginTooltip()
            imgui.PushTextWrapPos(600)
            imgui.TextUnformatted(description)
            imgui.PopTextWrapPos()
            imgui.EndTooltip()

        end

        imgui.TextColored(imgui.GetStyle().Colors[imgui.Col.CheckMark], label)
        imgui.GetWindowDrawList():AddLine(imgui.ImVec2(p.x, p.y + size.y), imgui.ImVec2(p.x + size.x, p.y + size.y), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.CheckMark]))

    else
        imgui.TextColored(imgui.GetStyle().Colors[imgui.Col.CheckMark], label)
    end

    return result
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if title:find("Лидеры в сети") then
        list = {}
        for v in string.gmatch(text, '[^\n]+') do
            if not v:find("Организация") then
                table.insert(list, v)
            end
        end
        sampSendDialogResponse(id, 1)
        windowleader.v = true
        return false
    end
end

есть окно, туда выводится фракция звание ник и номер, но к номеру и приписывается АФК. Типо афк появляется только когда чел встаёт в АФК. Как сделать отдельно от номера это?
 
  • Эм
Реакции: YarikVL

AugustTN

Известный
1,361
472
Lua:
    if windowleader.v then
        imgui.SetNextWindowPos(imgui.ImVec2(350.0, 250.0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(280.0, 70.0), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Лидеры в сети', windowleader, imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoTitleBar)
        if list[1] ~= nil then
            imgui.Separator()
            imgui.SetCursorPosX(10)
            imgui.Text(u8'Организация')
            imgui.SameLine()
            imgui.SetCursorPosX(145)
            imgui.VerticalSeparator()
            imgui.SetCursorPosX(150)
            imgui.Text(u8'Звание')
            imgui.SameLine()
            imgui.SetCursorPosX(275)
            imgui.VerticalSeparator()
            imgui.SetCursorPosX(280)
            imgui.Text(u8'Ник')
            imgui.SameLine()
            imgui.SetCursorPosX(445)
            imgui.VerticalSeparator()
            imgui.SetCursorPosX(450)
            imgui.Text(u8'Номер')
            imgui.Separator()
            for i = 1, #list do
               
                local a,b,c,e = list[i]:match("[}](.+)[-](.+)[-](.+)[-](.+)")
                imgui.SetCursorPosX(10)
                if imgui.Text(u8(a)) then end
                imgui.Columns()
                imgui.SameLine()
                imgui.SetCursorPosX(145)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(150)
                imgui.Text(u8(b))
                imgui.SameLine()
                imgui.SetCursorPosX(275)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(280)
                imgui.Text(u8(c))
                imgui.SameLine()
                imgui.SetCursorPosX(445)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(450)
                if imgui.Link(u8(e)) then
                    setClipboardText(u8(e))
                end
            end
        end

        imgui.End()
    end
end

function onWindowMessage(msg, wparam, lparam)
    if msg == 0x100 or msg == 0x101 then
        if (wparam == keys.VK_ESCAPE and windowleader.v) and not isPauseMenuActive() then
            consumeWindowMessage(true, false)
            if msg == 0x101 then
                windowleader.v = false
            end
        end
    end
end

function imgui.VerticalSeparator()
    local p = imgui.GetCursorScreenPos()
    imgui.GetWindowDrawList():AddLine(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x, p.y + imgui.GetContentRegionMax().y), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.Separator]))
end

function imgui.Link(label, description)

    local size = imgui.CalcTextSize(label)
    local p = imgui.GetCursorScreenPos()
    local p2 = imgui.GetCursorPos()
    local result = imgui.InvisibleButton(label, size)

    imgui.SetCursorPos(p2)

    if imgui.IsItemHovered() then
        if description then
            imgui.BeginTooltip()
            imgui.PushTextWrapPos(600)
            imgui.TextUnformatted(description)
            imgui.PopTextWrapPos()
            imgui.EndTooltip()

        end

        imgui.TextColored(imgui.GetStyle().Colors[imgui.Col.CheckMark], label)
        imgui.GetWindowDrawList():AddLine(imgui.ImVec2(p.x, p.y + size.y), imgui.ImVec2(p.x + size.x, p.y + size.y), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.CheckMark]))

    else
        imgui.TextColored(imgui.GetStyle().Colors[imgui.Col.CheckMark], label)
    end

    return result
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if title:find("Лидеры в сети") then
        list = {}
        for v in string.gmatch(text, '[^\n]+') do
            if not v:find("Организация") then
                table.insert(list, v)
            end
        end
        sampSendDialogResponse(id, 1)
        windowleader.v = true
        return false
    end
end

есть окно, туда выводится фракция звание ник и номер, но к номеру и приписывается АФК. Типо афк появляется только когда чел встаёт в АФК. Как сделать отдельно от номера это?
А ты можешь скрин диалога нормальный прикрепить а не хуйню, по которой ниче не понятно?
 
  • Нравится
Реакции: YarikVL

chapo

tg/inst: @moujeek
Всефорумный модератор
9,099
12,132
Код:
[16:58:38] {cccc99}Организация - Должность - Имя - Телефон{FFFFFF}

[16:58:38] {FFFFFF}Больница Лос-Сантос - Главный врач - Charles_Toreels[22] - 654456 {FFB859}[AFK: 03:10]

[16:58:38] {FFFFFF}Bandidos MC - President - Ramzess_Exslize[101] - 533535

[16:58:38] {FFFFFF}Полиция Лас-Вентурас - Шеф - Matteo_Squirell[177] - 522552

[16:58:38] {FFFFFF}Los Santos Vagos - [ X ] Horizon Legend - Rose_Horizon[204] - 177277

[16:58:38] {FFFFFF}Varios Los Aztecas - Padre - Raymundo_Exslize[292] - 999902

[16:58:38] {FFFFFF}Radio24 - Директор - Artem_Erov[390] - 833333

[16:58:38] {FFFFFF}Больница Сан-Фиерро - Главный врач - Michael_Wane[401] - 666166

[16:58:38] {FFFFFF}Rifa - Падре [10] - Kishiro_Yamaguchi[434] - 557228

[16:58:38] {FFFFFF}Полиция Лос-Сантос - Шеф - Kim_Elmers[447] - 111222 {FFB859}[AFK: 00:16]
Lua:
local List = {}
-- onshowdialog
if title:find('Лидеры в сети') then
    List = {}
    local text = text:gsub('{......}', '') -- говно, но так проще
    for line in text:gmatch('[^\n]+') do
        if line:find('(.+)%s%-%s(.+)%s%-%s(.+)%s%-%s(%d+)') then
            local org, rank, name, phone = line:match('(.+)%s%-%s(.+)%s%-%s(.+)%s%-%s(%d+)')
            table.insert(List, {org = org, rank = rank, name = name, phone = phone})
        end
    end
end

-- imgui
for index, data in ipairs(List) do
    imgui.Text(u8(data.org..': '..data.name..' ('..data.rank..')'))
end
 

Kegwineye.

Участник
Автор темы
478
20
Lua:
local List = {}
-- onshowdialog
if title:find('Лидеры в сети') then
    List = {}
    local text = text:gsub('{......}', '') -- говно, но так проще
    for line in text:gmatch('[^\n]+') do
        if line:find('(.+)%s%-%s(.+)%s%-%s(.+)%s%-%s(%d+)') then
            local org, rank, name, phone = line:match('(.+)%s%-%s(.+)%s%-%s(.+)%s%-%s(%d+)')
            table.insert(List, {org = org, rank = rank, name = name, phone = phone})
        end
    end
end

-- imgui
for index, data in ipairs(List) do
    imgui.Text(u8(data.org..': '..data.name..' ('..data.rank..')'))
end
мне нужно чтобы отдельно АФК отображалось, а то оно прям к номеру стакается
GTA_SA_MP 05.10.2022 15_37_47.png


Посмотреть вложение 171750
как данный диалог поместить в imgui по всякому пробывал хукать, не получается с моими знаниями.

Lua:
local imgui = require('imgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local sampev = require 'lib.samp.events'
local list = {}
local window = imgui.ImBool(false)


local colors = imgui.GetStyle().Colors;
local icol = imgui.Col
local ImVec4 = imgui.ImVec4

function main()
    while not isSampAvailable() do wait(200) end
    imgui.Process = false
    window.v = false  --show window
    while true do
        wait(0)
        imgui.Process = window.v
    end
end


function imgui.OnDrawFrame()
    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2(350.0, 250.0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(280.0, 70.0), imgui.Cond.FirstUseEver)
       
            imgui.Begin(u8'Лидеры в сети', window)
       
        if list[1] ~= nil then
            for i = 1, #list do
               
                local a,b,c,e = list[i]:match("[}](.+)[-](.+)[-](.+)[-](.+)")
                imgui.Button(u8(a))
                imgui.SameLine()
                imgui.Button(u8(b))
                imgui.SameLine()
                imgui.Button(u8(c))
                imgui.SameLine()
                imgui.Button(u8(c))
            end
        end

        imgui.End()
    end
   
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if title:find("Члены организации в сети") then
        list = {}
        for v in string.gmatch(text, '[^\n]+') do
            if not v:find("ID") then
                table.insert(list, v)
            end
        end
        sampSendDialogResponse(id, 1)
        window.v = true
        return false
    end
end

function bluetheme()
    imgui.SwitchContext()


    imgui.GetStyle().WindowPadding = imgui.ImVec2(8, 8)
    imgui.GetStyle().WindowRounding = 16.0
    imgui.GetStyle().FramePadding = imgui.ImVec2(5, 3)
    imgui.GetStyle().ItemSpacing = imgui.ImVec2(4, 4)
    imgui.GetStyle().ItemInnerSpacing = imgui.ImVec2(5, 5)
    imgui.GetStyle().IndentSpacing = 9.0
    imgui.GetStyle().ScrollbarSize = 17.0
    imgui.GetStyle().ScrollbarRounding = 16.0
    imgui.GetStyle().GrabMinSize = 7.0
    imgui.GetStyle().GrabRounding = 6.0
    imgui.GetStyle().ChildWindowRounding = 6.0
    imgui.GetStyle().FrameRounding = 6.0

    colors[icol.Text]                   = ImVec4(0.90, 0.90, 0.90, 1.00);
    colors[icol.TextDisabled]           = ImVec4(0.60, 0.60, 0.60, 1.00);
    colors[icol.WindowBg]               = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.ChildWindowBg]          = ImVec4(0.13, 0.13, 0.13, 1.00);
    colors[icol.PopupBg]                = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.Border]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.BorderShadow]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.FrameBg]                = ImVec4(0.26, 0.46, 0.82, 0.59);
    colors[icol.FrameBgHovered]         = ImVec4(0.26, 0.46, 0.82, 0.88);
    colors[icol.FrameBgActive]          = ImVec4(0.28, 0.53, 1.00, 1.00);
    colors[icol.TitleBg]                = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.TitleBgActive]          = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.TitleBgCollapsed]       = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.MenuBarBg]              = ImVec4(0.26, 0.46, 0.82, 0.75);
    colors[icol.ScrollbarBg]            = ImVec4(0.11, 0.11, 0.11, 1.00);
    colors[icol.ScrollbarGrab]          = ImVec4(0.26, 0.46, 0.82, 0.68);
    colors[icol.ScrollbarGrabHovered]   = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ScrollbarGrabActive]    = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ComboBg]                = ImVec4(0.26, 0.46, 0.82, 0.79);
    colors[icol.CheckMark]              = ImVec4(1.000, 0.000, 0.000, 1.000)
    colors[icol.SliderGrab]             = ImVec4(0.263, 0.459, 0.824, 1.000)
    colors[icol.SliderGrabActive]       = ImVec4(0.66, 0.66, 0.66, 1.00);
    colors[icol.Button]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.ButtonHovered]          = ImVec4(0.26, 0.46, 0.82, 0.59);
    colors[icol.ButtonActive]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.Header]                 = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.HeaderHovered]          = ImVec4(0.26, 0.46, 0.82, 0.74);
    colors[icol.HeaderActive]           = ImVec4(0.26, 0.46, 0.82, 1.00);
    colors[icol.Separator]              = ImVec4(0.37, 0.37, 0.37, 1.00);
    colors[icol.SeparatorHovered]       = ImVec4(0.60, 0.60, 0.70, 1.00);
    colors[icol.SeparatorActive]        = ImVec4(0.70, 0.70, 0.90, 1.00);
    colors[icol.ResizeGrip]             = ImVec4(1.00, 1.00, 1.00, 0.30);
    colors[icol.ResizeGripHovered]      = ImVec4(1.00, 1.00, 1.00, 0.60);
    colors[icol.ResizeGripActive]       = ImVec4(1.00, 1.00, 1.00, 0.90);
    colors[icol.CloseButton]            = ImVec4(0.00, 0.00, 0.00, 1.00);
    colors[icol.CloseButtonHovered]     = ImVec4(0.00, 0.00, 0.00, 0.60);
    colors[icol.CloseButtonActive]      = ImVec4(0.35, 0.35, 0.35, 1.00);
    colors[icol.PlotLines]              = ImVec4(1.00, 1.00, 1.00, 1.00);
    colors[icol.PlotLinesHovered]       = ImVec4(0.90, 0.70, 0.00, 1.00);
    colors[icol.PlotHistogram]          = ImVec4(0.90, 0.70, 0.00, 1.00);
    colors[icol.PlotHistogramHovered]   = ImVec4(1.00, 0.60, 0.00, 1.00);
    colors[icol.TextSelectedBg]         = ImVec4(0.00, 0.00, 1.00, 0.35);
    colors[icol.ModalWindowDarkening]   = ImVec4(0.20, 0.20, 0.20, 0.35);
end
bluetheme()
этот диалог как засунуть в imgui?

Код:
[17:02:40] {cccc99}ID - Уровень - Телефон - Ранг - Выговоры - Имя игрока

[17:02:40] {FFFFFF}{63BD4E}На работе:{FFFFFF}

[17:02:40] 271 - 16 - 778322 - 3 - 0/3 - Azamat_Rock

[17:02:40] 277 - 25 - 696979 - 9 - 0/3 - Thomas_Curtis

[17:02:40] 425 - 55 - 611116 - 5 - 0/3 - Joe_Nash

[17:02:40] {F04245}Не на работе:{FFFFFF}

[17:02:40] 40 - 26 - 600603 - 1 - 0/3 - Kaito_Martinez

[17:02:40] 79 - 29 - 109876 - 1 - 0/3 - Artem_Galustov

[17:02:40] 371 - 25 - 633366 - 1 - 0/3 - Handerson_Onfroy
@chapo
 

chapo

tg/inst: @moujeek
Всефорумный модератор
9,099
12,132
мне нужно чтобы отдельно АФК отображалось, а то оно прям к номеру стакаетсяПосмотреть вложение 171901


этот диалог как засунуть в imgui?

Код:
[17:02:40] {cccc99}ID - Уровень - Телефон - Ранг - Выговоры - Имя игрока

[17:02:40] {FFFFFF}{63BD4E}На работе:{FFFFFF}

[17:02:40] 271 - 16 - 778322 - 3 - 0/3 - Azamat_Rock

[17:02:40] 277 - 25 - 696979 - 9 - 0/3 - Thomas_Curtis

[17:02:40] 425 - 55 - 611116 - 5 - 0/3 - Joe_Nash

[17:02:40] {F04245}Не на работе:{FFFFFF}

[17:02:40] 40 - 26 - 600603 - 1 - 0/3 - Kaito_Martinez

[17:02:40] 79 - 29 - 109876 - 1 - 0/3 - Artem_Galustov

[17:02:40] 371 - 25 - 633366 - 1 - 0/3 - Handerson_Onfroy
@chapo
Lua:
-- onshowdialog
if title:find('Лидеры в сети') then
    List = {}
    local text = text:gsub('{......}', '') -- говно, но так проще
    for line in text:gmatch('[^\n]+') do
        if line:find('(.+)%s%-%s(.+)%s%-%s(.+)%s%-%s(.+)') then
            local org, rank, name, add = line:match('(.+)%s%-%s(.+)%s%-%s(.+)%s%-%s(.+)')
            local phone = add:match('(%d+)')
            if add:find('%d+%s%[AFK:%s(.+)%]') then
                AFK = add:match('%d+%s%[AFK:%s(.+)%]')
            end
            table.insert(List, {org = org, rank = rank, name = name, phone = phone, AFK = AFK or 'none'})
            AFK = nil
        end
    end
end

-- imgui
for index, data in ipairs(List) do
    print(data.org, data.name, data.phone, data.AFK)
    imgui.Text(u8(data.org..': '..data.name..' ('..data.rank..'), AFK: '..data.AFK))
end
 

Kegwineye.

Участник
Автор темы
478
20
Lua:
-- onshowdialog
if title:find('Лидеры в сети') then
    List = {}
    local text = text:gsub('{......}', '') -- говно, но так проще
    for line in text:gmatch('[^\n]+') do
        if line:find('(.+)%s%-%s(.+)%s%-%s(.+)%s%-%s(.+)') then
            local org, rank, name, add = line:match('(.+)%s%-%s(.+)%s%-%s(.+)%s%-%s(.+)')
            local phone = add:match('(%d+)')
            if add:find('%d+%s%[AFK:%s(.+)%]') then
                AFK = add:match('%d+%s%[AFK:%s(.+)%]')
            end
            table.insert(List, {org = org, rank = rank, name = name, phone = phone, AFK = AFK or 'none'})
            AFK = nil
        end
    end
end

-- imgui
for index, data in ipairs(List) do
    print(data.org, data.name, data.phone, data.AFK)
    imgui.Text(u8(data.org..': '..data.name..' ('..data.rank..'), AFK: '..data.AFK))
end
как твой код интегрирровать сюда?
Lua:
-- imgui
for i = 1, #list do
                
                local a,b,c,e,f = list[i]:match("[}](.+)[-](.+)[-](.+)[-](.+)")
                imgui.SetCursorPosX(10)
                if imgui.Text(u8(a)) then end
                imgui.Columns()
                imgui.SameLine()
                imgui.SetCursorPosX(145)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(150)
                imgui.Text(u8(b))
                imgui.SameLine()
                imgui.SetCursorPosX(275)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(280)
                imgui.Text(u8(c))
                imgui.SameLine()
                imgui.SetCursorPosX(445)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(450)
                if imgui.Link(u8(e)) then
                    setClipboardText(u8(e))
                end
            end
            
-- onshowdialog
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if title:find("Лидеры в сети") then
        list = {}
        for v in string.gmatch(text, '[^\n]+') do
            if not v:find("Организация") then
                table.insert(list, v)
            end
        end
        sampSendDialogResponse(id, 1)
        windowleader.v = true
        return false
    end
end
 

chapo

tg/inst: @moujeek
Всефорумный модератор
9,099
12,132
как твой код интегрирровать сюда?
Lua:
-- imgui
for i = 1, #list do
               
                local a,b,c,e,f = list[i]:match("[}](.+)[-](.+)[-](.+)[-](.+)")
                imgui.SetCursorPosX(10)
                if imgui.Text(u8(a)) then end
                imgui.Columns()
                imgui.SameLine()
                imgui.SetCursorPosX(145)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(150)
                imgui.Text(u8(b))
                imgui.SameLine()
                imgui.SetCursorPosX(275)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(280)
                imgui.Text(u8(c))
                imgui.SameLine()
                imgui.SetCursorPosX(445)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(450)
                if imgui.Link(u8(e)) then
                    setClipboardText(u8(e))
                end
            end
           
-- onshowdialog
function sampev.onShowDialog(id, style, title, button1, button2, text)
    if title:find("Лидеры в сети") then
        list = {}
        for v in string.gmatch(text, '[^\n]+') do
            if not v:find("Организация") then
                table.insert(list, v)
            end
        end
        sampSendDialogResponse(id, 1)
        windowleader.v = true
        return false
    end
end
я тебе дал готовый код, он возвращает массив с массивами, в которых записаны данные, я даже показал что надо в имгуи писать
 

Kegwineye.

Участник
Автор темы
478
20
я тебе дал готовый код, он возвращает массив с массивами, в которых записаны данные, я даже показал что надо в имгуи писать
твой код вместе с окном так же открывает и диалог. посоветуй как интегрирровать, я хочу свой диалог оставить. Он более понятен для меня

@chapo
 
Последнее редактирование:
  • Эм
  • Грустно
Реакции: YarikVL и Vespan