imgui heeeeeeeeeeelp

Kegwineye.

Участник
Автор темы
478
20
как сделать чтобы на еск закрывалось а на ввод команды например /hel открывалось ?


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)


-- одно из основных отличий от оригинального апи
-- все переменные, значения которых записываются в ImGui по указателю, могут использоваться только через специальные типы
local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then -- чтение и запись значения такой переменной осуществляется через поле v (или Value)
    imgui.SetNextWindowSize(imgui.ImVec2(150, 200), imgui.Cond.FirstUseEver) -- меняем размер
    -- но для передачи значения по указателю - обязательно напрямую
    -- тут main_window_state передаётся функции imgui.Begin, чтобы можно было отследить закрытие окна нажатием на крестик
    imgui.Begin('My window', main_window_state)
    imgui.Checkbox('Press me1', checkboxone) -- а вот и кнопка с действие
    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 true do
    wait(0)
    imgui.Process = true
    if wasKeyPressed(key.VK_X) then -- активация по нажатию клавиши X
        main_window_state.v = not main_window_state.v -- переключаем статус активности окна, не забываем про .v
    end
    imgui.Process = main_window_state.v -- теперь значение imgui.Process всегда будет задаваться в зависимости от активности основного окна
  end
end
 
Решение
Lua:
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 = not main_window_state.v -- переключаем статус активности окна, не забываем про .v
        end
    end
end

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,778
11,223
Lua:
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 = not main_window_state.v -- переключаем статус активности окна, не забываем про .v
        end
    end
end
 

Kegwineye.

Участник
Автор темы
478
20
@chapo

как сделать окно в центре экрана ?


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)


-- одно из основных отличий от оригинального апи
-- все переменные, значения которых записываются в ImGui по указателю, могут использоваться только через специальные типы
local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then -- чтение и запись значения такой переменной осуществляется через поле v (или Value)
    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)
    imgui.Checkbox('Press me1', checkboxone) -- а вот и кнопка с действие
    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 = not main_window_state.v -- переключаем статус активности окна, не забываем про .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
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,778
11,223
@chapo

как сделать окно в центре экрана ?


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)


-- одно из основных отличий от оригинального апи
-- все переменные, значения которых записываются в ImGui по указателю, могут использоваться только через специальные типы
local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then -- чтение и запись значения такой переменной осуществляется через поле v (или Value)
    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)
    imgui.Checkbox('Press me1', checkboxone) -- а вот и кнопка с действие
    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 = not main_window_state.v -- переключаем статус активности окна, не забываем про .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
поделить разрешение экрана на 2 и вычесть из него размер окна поделенный на 2
 

Kegwineye.

Участник
Автор темы
478
20
@chapo

чапо, как сделать такие уведомления например при нажатии чекбокса "press me1" будет вывадиться такое уведомление ?

20986

ТОЛЬКО пускай пишеться Press me1 активированно ?
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,778
11,223
@chapo

чапо, как сделать такие уведомления например при нажатии чекбокса "press me1" будет вывадиться такое уведомление ?

20986

ТОЛЬКО пускай пишеться Press me1 активированно ?
научись гуглить пожалуйста
 
  • Нравится
Реакции: zTechnology

zTechnology

Известный
1,101
485
не ищет мне нихуя
мозг включить надо, а не в тупую пастить и не понимать, что это, как и зачем...

Lua:
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 = not main_window_state.v -- переключаем статус активности окна, не забываем про .v
        end
    end
end
будет правильней
Lua:
  if wasKeyPressed(key.VK_X) then -- активация по нажатию клавиши X
            main_window_state.v = false -- переключаем статус активности окна, не забываем про .v
        end
 
  • Нравится
Реакции: chapo

Kegwineye.

Участник
Автор темы
478
20
мозг включить надо, а не в тупую пастить и не понимать, что это, как и зачем...


будет правильней
Lua:
  if wasKeyPressed(key.VK_X) then -- активация по нажатию клавиши X
            main_window_state.v = false -- переключаем статус активности окна, не забываем про .v
        end
if bNotf then
notf.addNotification(u8("Уведомление!"), 4, 1)
end засунуть после if imgui.Chechbox ?
 
У

Удалённый пользователь 448549

Гость
@chapo

как сделать окно в центре экрана ?


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)


-- одно из основных отличий от оригинального апи
-- все переменные, значения которых записываются в ImGui по указателю, могут использоваться только через специальные типы
local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then -- чтение и запись значения такой переменной осуществляется через поле v (или Value)
    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)
    imgui.Checkbox('Press me1', checkboxone) -- а вот и кнопка с действие
    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 = not main_window_state.v -- переключаем статус активности окна, не забываем про .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
Lua:
local resX, resY = getScreenResolution() -- https://wiki.blast.hk/ru/moonloader/lua/getScreenResolution

if (main_window_state.v) then
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
end
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,778
11,223
Lua:
local resX, resY = getScreenResolution() -- https://wiki.blast.hk/ru/moonloader/lua/getScreenResolution

if (main_window_state.v) then
    imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
end
оно будет не ровно в центре экрана
 

Kegwineye.

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


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