Замена диалоговых окон

Qwick

Участник
Автор темы
13
2
Версия MoonLoader
.026-beta
Где-то видел замену SAMP диалоговых окон на IMGUI и MIMGUI, подскажите пожалуйста как это можно реализовать?
 
Последнее редактирование:
Решение
Где-то видел замену SAMP диалоговых окон на IMGUI и MIMGUI, подскажите пожалуйста как это можно реализовать?
Самый простой способ просто отлавливать входящий РПЦ о появлении диалога и уже в зависимости от этого выводить нужные данные в окно, либо же более сложный способ - самостоятельно ставить хук на самповский адрес и доставать из функции значения

whyega52

Eblang головного мозга
Модератор
2,839
2,779
Где-то видел замену SAMP диалоговых окон на IMGUI и MIMGUI, подскажите пожалуйста как это можно реализовать?
Самый простой способ просто отлавливать входящий РПЦ о появлении диалога и уже в зависимости от этого выводить нужные данные в окно, либо же более сложный способ - самостоятельно ставить хук на самповский адрес и доставать из функции значения
 
  • Вау
  • Нравится
Реакции: Qwick и Lance_Sterling

Qwick

Участник
Автор темы
13
2
Самый простой способ просто отлавливать входящий РПЦ о появлении диалога и уже в зависимости от этого выводить нужные данные в окно, либо же более сложный способ - самостоятельно ставить хук на самповский адрес и доставать из функции значения
Можете привести пример кода к первому способу? Я суть понял, но не мешало бы до конца разобраться в этом.
 

whyega52

Eblang головного мозга
Модератор
2,839
2,779
Можете привести пример кода к первому способу? Я суть понял, но не мешало бы до конца разобраться в этом.
небольшой пример
Lua:
local sampev = require("samp.events")


local dialog = {
    show = false
    info = {}
}


function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    dialog.info = {dialogId = dialogId, style = style, title = title, button1 = button1, button2 = button2, text = text}
    dialog.show = true
end


local mainFrame = imgui.OnFrame(
    function() return dialog.show end,
    function(self)       
        local sw, sh = getScreenResolution()       
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), (sh / 2)), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(300, 300) or imgui.ImVec2(600, 450), imgui.Cond.FirstUseEver)
        if imgui.Begin(u8("##main"), nil, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysUseWindowPadding + imgui.WindowFlags.NoScrollbar + imgui.WindowFlags.NoTitleBar) then
            -- где-то в рендере имгуи
            imgui.Text(dialog.infodialog.infodialog.info.text)
            imgui.Button(dialog.infodialog.info.button1)
            imgui.Button(dialog.info.button2)
            -- и т.д.
        end
    end
)
 
  • Нравится
Реакции: Qwick