замена самповских диалогов

recxvery

Участник
Автор темы
90
27
Версия MoonLoader
.026-beta
как можно нормально заменить самповский диалог на mimgui, не перекрывая его, ибо фрейм прозрачный ?
 

recxvery

Участник
Автор темы
90
27
Под "не перекрывая" ты имеешь ввиду пропускать клики "сквозь" мимгуеишное окно?
у меня есть диалог, который мне надо заменить на мимгуи и с этой фигней взаимодействовать, вот тут какой-то пример из скрипта дабл тапа нашел
184779
 

Rezbirp

Известный
72
69
Как пример:

1709936361732.png
1709936386590.png
1709936424585.png


Lua:
local sampev = require("lib.samp.events")
local imgui = require("mimgui")
local ffi = require("ffi")

local encoding = require("encoding")
encoding.default = 'CP1251'

local u8 = encoding.UTF8

local sw, sh = getScreenResolution()

local settingsImgui =
{
    renderWindowDialog = imgui.new.bool(false),
    dialogId = -1,
    dialogStyle = -1,
    dialogTitle = nil,
    dialogButton1 = nil,
    dialogButton2 = nil,
    dialogText = nil,
    dialogInputUserText = imgui.new.char[128]("")
}

local targetDialogTitle = {
    "{BFBBBA}{E88813}Репорт",
    "{BFBBBA}Покупка предмета"
}

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    
    for key, value in ipairs(targetDialogTitle) do
        if (value == title) then
            
            settingsImgui.dialogId = dialogId
            settingsImgui.dialogStyle = style
            settingsImgui.dialogTitle = title:gsub("{.-}", "")
            settingsImgui.dialogButton1 = button1
            settingsImgui.dialogButton2 = button2
            settingsImgui.dialogText = text:gsub("{.-}", "")
            imgui.StrCopy(settingsImgui.dialogInputUserText, "")
            settingsImgui.renderWindowDialog[0] = true
            
            return false
        end
    end
    
    settingsImgui.renderWindowDialog[0] = false
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

local newFrameSettingsIcons = imgui.OnFrame(
    function() return settingsImgui.renderWindowDialog[0] end,
    function(player)
    imgui.SetNextWindowSize(imgui.ImVec2(600, 500), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2(sw/2, sh/2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin(u8(settingsImgui.dialogTitle),settingsImgui.renderWindowDialog)
    
        imgui.Text(u8(settingsImgui.dialogText))
        
        if settingsImgui.dialogStyle == 1 then
            imgui.SetNextItemWidth(imgui.GetWindowSize().x - 10)
            imgui.InputText("##dialogInputUserText", settingsImgui.dialogInputUserText, ffi.sizeof(settingsImgui.dialogInputUserText))
            
            local text10 = "10"
            if imgui.Button(u8(text10), imgui.ImVec2(imgui.GetWindowSize().x/2 - 5 , 20)) then
                imgui.StrCopy(settingsImgui.dialogInputUserText, ffi.string(settingsImgui.dialogInputUserText) .. text10)
            end
            imgui.SameLine()
            local textTemp = "temp"
            if imgui.Button(textTemp, imgui.ImVec2(imgui.GetWindowSize().x/2 - 5 , 20)) then
                imgui.StrCopy(settingsImgui.dialogInputUserText, ffi.string(settingsImgui.dialogInputUserText) .. textTemp)
            end
            
            local sizeButtonSend = imgui.ImVec2(70, 20)
            imgui.SetCursorPosX((imgui.GetWindowSize().x - sizeButtonSend.x) / 2)
            if imgui.Button(u8"Отправить", sizeButtonSend) then
                sampSendDialogResponse(settingsImgui.dialogId, 1, nil, ffi.string(settingsImgui.dialogInputUserText))
                settingsImgui.renderWindowDialog[0] = false
            end
            
            local sizeButtonClose = imgui.ImVec2(60, 20)
            imgui.SetCursorPosX((imgui.GetWindowSize().x - sizeButtonClose.x) / 2)
            if imgui.Button(u8"Закрыть", sizeButtonClose) then
                sampSendDialogResponse(settingsImgui.dialogId, 0, nil, nil)
                settingsImgui.renderWindowDialog[0] = false
            end
        end
        
    imgui.End()
    end
)