Lua ImGui Push-уведомления | Re:Global Notification

Kegwineye.

Участник
478
20
не выводит уведомление


Lua:
local imgui = require 'imgui'
local key = require 'vkeys'
local checkboxone = imgui.ImBool(false)
local checkboxdva = imgui.ImBool(false)
local checkboxtri = imgui.ImBool(false)
local checkboxchetiri = imgui.ImBool(false)
local checkboxpyat = imgui.ImBool(false)
local bNotf, notf = pcall(import, "imgui_notf.lua")

-- îäíî èç îñíîâíûõ îòëè÷èé îò îðèãèíàëüíîãî àïè
-- âñå ïåðåìåííûå, çíà÷åíèÿ êîòîðûõ çàïèñûâàþòñÿ â ImGui ïî óêàçàòåëþ, ìîãóò èñïîëüçîâàòüñÿ òîëüêî ÷åðåç ñïåöèàëüíûå òèïû
local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  local resX, resY = getScreenResolution()
  local sizeX, sizeY = 500, 300
  if main_window_state.v then -- ÷òåíèå è çàïèñü çíà÷åíèÿ òàêîé ïåðåìåííîé îñóùåñòâëÿåòñÿ ÷åðåç ïîëå v (èëè Value)
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2 - sizeX / 2, resY / 2 - sizeY / 2), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowSize(imgui.ImVec2(250, 400), imgui.Cond.FirstUseEver) -- ìåíÿåì ðàçìåð
    -- íî äëÿ ïåðåäà÷è çíà÷åíèÿ ïî óêàçàòåëþ - îáÿçàòåëüíî íàïðÿìóþ
    -- òóò main_window_state ïåðåäà¸òñÿ ôóíêöèè imgui.Begin, ÷òîáû ìîæíî áûëî îòñëåäèòü çàêðûòèå îêíà íàæàòèåì íà êðåñòèê
    imgui.Begin('My window', nil, imgui.WindowFlags.NoMove + imgui.WindowFlags.NoResize)
   if imgui.Checkbox('Press me1', checkboxone) then
    if bNotf then
    notf.addNotification(u8("Уведомление!"), 4, 1)
   end
     end-- à âîò è êíîïêà ñ äåéñòâèå
    imgui.SameLine()
    imgui.Checkbox('Press me2', checkboxdva) -- à âîò è êíîïêà ñ äåéñòâèåì
    imgui.Checkbox('Press me3', checkboxtri) -- à âîò è êíîïêà ñ äåéñòâèåì
    imgui.SameLine()
    imgui.Checkbox('Press me4', checkboxchetiri) -- à âîò è êíîïêà ñ äåéñòâèåì
    imgui.NewLine()
    imgui.Checkbox('Press me5', checkboxpyat) -- à âîò è êíîïêà ñ äåéñòâèåì

    imgui.End()
  end
end

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('hel', function()
        main_window_state.v = true
    end)
    while true do
        wait(0)
        imgui.Process = main_window_state.v -- òåïåðü çíà÷åíèå imgui.Process âñåãäà áóäåò çàäàâàòüñÿ â çàâèñèìîñòè îò àêòèâíîñòè îñíîâíîãî îêíà
        if wasKeyPressed(key.VK_X) then -- àêòèâàöèÿ ïî íàæàòèþ êëàâèøè X
            main_window_state.v = false -- ïåðåêëþ÷àåì ñòàòóñ àêòèâíîñòè îêíà, íå çàáûâàåì ïðî .v
        end
    end
end

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

function notf()
    addNotification(text, time, style)
-- Текст принимает как есть, для кирилицы используйте библиотеку encoding
-- Время можно указывать с милисекундами, например 5.543
-- Стили:
-- 1 - Черный, простые сообщения
-- 2 - Синий/голубой - Информационные сообщения
-- 3 - Красный - Ошибки
-- В качестве параметра принимается таблица пользовательского стиля, к примеру:
notf.addNotification("Test", 10,
{
        text = imgui.ImColor(255, 255, 255, 255):GetVec4(), -- Цвет текста
        rightBox = imgui.ImColor(190, 40, 40, 255):GetU32(), -- Цвет полоски справа
        mainBox = {
            imgui.ImColor(170, 20, 20, 170):GetU32(), -- Левый верхний угол
            imgui.ImColor(170, 20, 20, 235):GetU32(), -- Правый верхний
            imgui.ImColor(170, 20, 20, 235):GetU32(), -- Левый нижний
            imgui.ImColor(170, 20, 20, 170):GetU32(), -- Правый нижний
        }
    })
-- Цвет будет переливаться между указанными.-- body
end

@AnWu
 
Последнее редактирование:

biscuitt

Известный
185
14
1K3gt8jyVwo.jpg


можно ли как-то добавить окну авторесайз по ширине? В тексте нет ни одного переноса строки, нужно чтобы всё было в одну строку
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,769
11,213
Было бы круто все геймтексты заменить такими уведомлениями
Lua:
local sampev = require 'lib.samp.events'
local bNotf, notf = pcall(import, "imgui_notf.lua")

function sampev.onDisplayGameText(style, time, text)
    if bNotf then
        notf.addNotification(u8(text), time / 1000, 1)
        return false
    end
end
 

umeHHo oH

Участник
162
24
Lua:
local sampev = require 'lib.samp.events'
local bNotf, notf = pcall(import, "imgui_notf.lua")

function sampev.onDisplayGameText(style, time, text)
    if bNotf then
        notf.addNotification(u8(text), time / 1000, 1)
        return false
    end
end
(error) gametext.lua: C:\Games\GTA San Andreas\moonloader\gametext.lua:6: attempt to call global 'u8' (a nil value)
stack traceback:
C:\Games\GTA San Andreas\moonloader\gametext.lua:6: in function 'callback'
...ames\GTA San Andreas\moonloader\lib\samp\events\core.lua:77: in function 'process_event'
...ames\GTA San Andreas\moonloader\lib\samp\events\core.lua:100: in function 'process_packet'
...ames\GTA San Andreas\moonloader\lib\samp\events\core.lua:127: in function <...ames\GTA San Andreas\moonloader\lib\samp\events\core.lua:126>
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,769
11,213
(error) gametext.lua: C:\Games\GTA San Andreas\moonloader\gametext.lua:6: attempt to call global 'u8' (a nil value)
stack traceback:
C:\Games\GTA San Andreas\moonloader\gametext.lua:6: in function 'callback'
...ames\GTA San Andreas\moonloader\lib\samp\events\core.lua:77: in function 'process_event'
...ames\GTA San Andreas\moonloader\lib\samp\events\core.lua:100: in function 'process_packet'
...ames\GTA San Andreas\moonloader\lib\samp\events\core.lua:127: in function <...ames\GTA San Andreas\moonloader\lib\samp\events\core.lua:126>
Lua:
function sampev.onDisplayGameText(style, time, text)
    if bNotf then
        notf.addNotification(text, time / 1000, 1)
        return false
    end
end
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,769
11,213
1639171622280.png

Lua:
local sampev = require 'lib.samp.events'
local bNotf, notf = pcall(import, "imgui_notf.lua")

function sampev.onDisplayGameText(style, time, text)
    if bNotf then
        notf.addNotification(clear(text), time / 1000, 1)
        return false
    end
end

function clear(text)
    text = text:gsub('~n~', '\n')
    text = text:gsub('~%l~', '')
    return text
end
 

umeHHo oH

Участник
162
24

TrixTM

Участник
76
22
не выводит уведомление


Lua:
local imgui = require 'imgui'
local key = require 'vkeys'
local checkboxone = imgui.ImBool(false)
local checkboxdva = imgui.ImBool(false)
local checkboxtri = imgui.ImBool(false)
local checkboxchetiri = imgui.ImBool(false)
local checkboxpyat = imgui.ImBool(false)
local bNotf, notf = pcall(import, "imgui_notf.lua")

-- îäíî èç îñíîâíûõ îòëè÷èé îò îðèãèíàëüíîãî àïè
-- âñå ïåðåìåííûå, çíà÷åíèÿ êîòîðûõ çàïèñûâàþòñÿ â ImGui ïî óêàçàòåëþ, ìîãóò èñïîëüçîâàòüñÿ òîëüêî ÷åðåç ñïåöèàëüíûå òèïû
local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  local resX, resY = getScreenResolution()
  local sizeX, sizeY = 500, 300
  if main_window_state.v then -- ÷òåíèå è çàïèñü çíà÷åíèÿ òàêîé ïåðåìåííîé îñóùåñòâëÿåòñÿ ÷åðåç ïîëå v (èëè Value)
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2 - sizeX / 2, resY / 2 - sizeY / 2), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowSize(imgui.ImVec2(250, 400), imgui.Cond.FirstUseEver) -- ìåíÿåì ðàçìåð
    -- íî äëÿ ïåðåäà÷è çíà÷åíèÿ ïî óêàçàòåëþ - îáÿçàòåëüíî íàïðÿìóþ
    -- òóò main_window_state ïåðåäà¸òñÿ ôóíêöèè imgui.Begin, ÷òîáû ìîæíî áûëî îòñëåäèòü çàêðûòèå îêíà íàæàòèåì íà êðåñòèê
    imgui.Begin('My window', nil, imgui.WindowFlags.NoMove + imgui.WindowFlags.NoResize)
   if imgui.Checkbox('Press me1', checkboxone) then
    if bNotf then
    notf.addNotification(u8("Уведомление!"), 4, 1)
   end
     end-- à âîò è êíîïêà ñ äåéñòâèå
    imgui.SameLine()
    imgui.Checkbox('Press me2', checkboxdva) -- à âîò è êíîïêà ñ äåéñòâèåì
    imgui.Checkbox('Press me3', checkboxtri) -- à âîò è êíîïêà ñ äåéñòâèåì
    imgui.SameLine()
    imgui.Checkbox('Press me4', checkboxchetiri) -- à âîò è êíîïêà ñ äåéñòâèåì
    imgui.NewLine()
    imgui.Checkbox('Press me5', checkboxpyat) -- à âîò è êíîïêà ñ äåéñòâèåì

    imgui.End()
  end
end

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('hel', function()
        main_window_state.v = true
    end)
    while true do
        wait(0)
        imgui.Process = main_window_state.v -- òåïåðü çíà÷åíèå imgui.Process âñåãäà áóäåò çàäàâàòüñÿ â çàâèñèìîñòè îò àêòèâíîñòè îñíîâíîãî îêíà
        if wasKeyPressed(key.VK_X) then -- àêòèâàöèÿ ïî íàæàòèþ êëàâèøè X
            main_window_state.v = false -- ïåðåêëþ÷àåì ñòàòóñ àêòèâíîñòè îêíà, íå çàáûâàåì ïðî .v
        end
    end
end

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

function notf()
    addNotification(text, time, style)
-- Текст принимает как есть, для кирилицы используйте библиотеку encoding
-- Время можно указывать с милисекундами, например 5.543
-- Стили:
-- 1 - Черный, простые сообщения
-- 2 - Синий/голубой - Информационные сообщения
-- 3 - Красный - Ошибки
-- В качестве параметра принимается таблица пользовательского стиля, к примеру:
notf.addNotification("Test", 10,
{
        text = imgui.ImColor(255, 255, 255, 255):GetVec4(), -- Цвет текста
        rightBox = imgui.ImColor(190, 40, 40, 255):GetU32(), -- Цвет полоски справа
        mainBox = {
            imgui.ImColor(170, 20, 20, 170):GetU32(), -- Левый верхний угол
            imgui.ImColor(170, 20, 20, 235):GetU32(), -- Правый верхний
            imgui.ImColor(170, 20, 20, 235):GetU32(), -- Левый нижний
            imgui.ImColor(170, 20, 20, 170):GetU32(), -- Правый нижний
        }
    })
-- Цвет будет переливаться между указанными.-- body
end

@AnWu
îñí÷èé òïèîñ?
îò îðèèé îò îðèãèíîëüçîâà...
û çâþò
 

XRLM

Известный
2,539
854
Функция:
Lua:
addNotification(text, time, style)
-- Текст принимает как есть, для кирилицы используйте библиотеку encoding
-- Время можно указывать с милисекундами, например 5.543
-- Стили:
-- 1 - Черный, простые сообщения
-- 2 - Синий/голубой - Информационные сообщения
-- 3 - Красный - Ошибки
-- В качестве параметра принимается таблица пользовательского стиля, к примеру:
notf.addNotification("Test", 10,
{
        text = imgui.ImColor(255, 255, 255, 255):GetVec4(), -- Цвет текста
        rightBox = imgui.ImColor(190, 40, 40, 255):GetU32(), -- Цвет полоски справа
        mainBox = {
            imgui.ImColor(170, 20, 20, 170):GetU32(), -- Левый верхний угол
            imgui.ImColor(170, 20, 20, 235):GetU32(), -- Правый верхний
            imgui.ImColor(170, 20, 20, 235):GetU32(), -- Левый нижний
            imgui.ImColor(170, 20, 20, 170):GetU32(), -- Правый нижний
        }
    })
-- Цвет будет переливаться между указанными.
Код:
[ML] (error) imgui_notf.lua: ...86)\a gta bh\Private GTA Benzo\moonloader\imgui_notf.lua:223: stack index 1, expected userdata, received nil: value is not a valid userdata (bad argument into 'void(const structImVec4&, const char*)')
stack traceback:
    [C]: in function 'TextColored'
    ...86)\a gta bh\Private GTA Benzo\moonloader\imgui_notf.lua:223: in function 'onRenderNotification'
    ...86)\a gta bh\Private GTA Benzo\moonloader\imgui_notf.lua:163: in function 'OnDrawFrame'
    ...x86)\a gta bh\Private GTA Benzo\moonloader\lib\imgui.lua:1378: in function <...x86)\a gta bh\Private GTA Benzo\moonloader\lib\imgui.lua:1367>
[ML] (error) imgui_notf.lua: Script died due to an error. (1346450C)
 

#SameLine

Активный
417
37
у меня все на кирилице и нет иероглифов, кроме этого скрипта, скопировал пример, выводит иероглифы