Неактивная кнопка | IMGUI

CHAPPLE

Участник
Автор темы
97
15
Версия MoonLoader
.026-beta
Как сделать кнопку серой и неактивной после нажатия?
 
Решение
Как сделать кнопку серой и неактивной после нажатия?

Отвечаю на конкретный вопрос конкретным примером.

Lua:
-- Где то в глобальном пространстве
klikabelna = true

-- Где то в OnDrawFrame....
if imgui.ButtonClickable(klikabelna, "Knopka") then
    klikabelna = false
end

teddy bear

Активный
294
81
 

CHAPPLE

Участник
Автор темы
97
15
Ничего не понял из примера, можешь объяснить?
 

teddy bear

Активный
294
81
Ничего не понял из примера, можешь объяснить?
А чего там не понятного то? Там есть спойлер с кодом, называется "Неактивная кнопка". Перекопирую сюда
1:
imgui = require "imgui"

-- Кликабельная / не кликабельная кнопка
function imgui.ButtonClickable(clickable, ...)
    if clickable then
        return imgui.Button(...)

    else
        local r, g, b, a = imgui.ImColor(imgui.GetStyle().Colors[imgui.Col.Button]):GetFloat4()
        imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(r, g, b, a/2) )
        imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(r, g, b, a/2))
        imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(r, g, b, a/2))
        imgui.PushStyleColor(imgui.Col.Text, imgui.GetStyle().Colors[imgui.Col.TextDisabled])
            imgui.Button(...)
        imgui.PopStyleColor()
        imgui.PopStyleColor()
        imgui.PopStyleColor()
        imgui.PopStyleColor()
    end
end

Пример:
Пример:
local text = "test"

if imgui.Button(text=="test", "Label## ID") then
   print("TEST MESSAGE")
end

OH9Uz0n.png
 

CHAPPLE

Участник
Автор темы
97
15
А чего там не понятного то? Там есть спойлер с кодом, называется "Неактивная кнопка". Перекопирую сюда
1:
imgui = require "imgui"

-- Кликабельная / не кликабельная кнопка
function imgui.ButtonClickable(clickable, ...)
    if clickable then
        return imgui.Button(...)

    else
        local r, g, b, a = imgui.ImColor(imgui.GetStyle().Colors[imgui.Col.Button]):GetFloat4()
        imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(r, g, b, a/2) )
        imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(r, g, b, a/2))
        imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(r, g, b, a/2))
        imgui.PushStyleColor(imgui.Col.Text, imgui.GetStyle().Colors[imgui.Col.TextDisabled])
            imgui.Button(...)
        imgui.PopStyleColor()
        imgui.PopStyleColor()
        imgui.PopStyleColor()
        imgui.PopStyleColor()
    end
end

Пример:
Пример:
local text = "test"

if imgui.Button(text=="test", "Label## ID") then
   print("TEST MESSAGE")
end

Посмотреть вложение 101446
Как раз-таки я всё скопировал, но не понял, как эту кнопку делать не активной....
 

Double Tap Inside

Известный
Проверенный
1,916
1,255
Как раз-таки я всё скопировал, но не понял, как эту кнопку делать не активной....
Если перввм аргументов будет true, то кнопка кликабельна. false некликабельна.
 

Double Tap Inside

Известный
Проверенный
1,916
1,255
Как сделать кнопку серой и неактивной после нажатия?

Отвечаю на конкретный вопрос конкретным примером.

Lua:
-- Где то в глобальном пространстве
klikabelna = true

-- Где то в OnDrawFrame....
if imgui.ButtonClickable(klikabelna, "Knopka") then
    klikabelna = false
end
 

CHAPPLE

Участник
Автор темы
97
15
Отвечаю на конкретный вопрос конкретным примером.

Lua:
-- Где то в глобальном пространстве
klikabelna = true

-- Где то в OnDrawFrame....
if imgui.ButtonClickable(klikabelna, "Knopka") then
    klikabelna = false
end
Можно по подробнее вот об этом?
if imgui.ButtonClickable(klikabelna, "Knopka")
"klikabelna" - ?
"Knopka" - ?
 

Double Tap Inside

Известный
Проверенный
1,916
1,255
Можно по подробнее вот об этом?
if imgui.ButtonClickable(klikabelna, "Knopka")
"klikabelna" - ?
"Knopka" - ?
klikabelna это переменная. Значение этой переменной truе (истина,правда, верно). Бывает противоположнле значени: false (ложь, неверно, ошибочно)

Кроме true истиной может быть строки, числа, таблици итд

Кроме false ложью может быть nil.
.
"Knopka" это значение в виде текста, всем известное как Строка (string). Это и есть название кнопки.
 
  • Нравится
Реакции: CHAPPLE

CHAPPLE

Участник
Автор темы
97
15
Отвечаю на конкретный вопрос конкретным примером.

Lua:
-- Где то в глобальном пространстве
klikabelna = true

-- Где то в OnDrawFrame....
if imgui.ButtonClickable(klikabelna, "Knopka") then
    klikabelna = false
end
Вот что я сделал:

LUA:
                    if imgui.ButtonClickable(klikabelna, u8"Начать", imgui.ImVec2(100, 20)) then
                klikabelna = false

                lua_thread.create(function(RP)
                          sampSendChat("Здравствуйте, я, " .. u8:decode(rang.v) .. " " .. u8:decode(rusname.v) .. " проведу для вас собеседование.")
                                  wait(1650)
                              if not stopRP then
                                sampSendChat("Покажите ваши документы, а именно: паспорт, мед. карту и лицензии.")
                              end
                                  wait(1650)
                              if not stopRP then
                                sampSendChat("/b Покажите документы отыгрывая /me и /do")
                              end
                                  while not isKeyDown(VK_RETURN) do
                                      wait(0)
                                  end
                                  sampSendChat("Хорошо, спасибо.")
                        end)
                    end
                        lua_thread.create(function() while true do wait(0)
                            if isKeyJustPressed(0x22) then
                                stopRP = true
                                            wait(2500)
                                            stopRP = false
                                            if stopRP then wait(100)
                                                sampAddChatMessage("Вы отменили РП отыгровку.", 0xfa9005)

                                            end
                            end
                        end
                    end)
Скрипт крашит, логи:

[16:51:25.206018] (error) SobesHelper: D:\Games\Arizona V2\moonloader\lib\imgui_addons.lua:210: attempt to index local 'bool' (a nil value)
stack traceback:
D:\Games\Arizona V2\moonloader\lib\imgui_addons.lua:210: in function 'ToggleButton'
D:\Games\Arizona V2\moonloader\SobesHelper.lua:302: in function 'OnDrawFrame'
D:\Games\Arizona V2\moonloader\lib\imgui.lua:1378: in function <D:\Games\Arizona V2\moonloader\lib\imgui.lua:1367>
[16:51:25.213906] (error) SobesHelper: Script died due to an error. (1483C8F4)
 
Последнее редактирование:

Double Tap Inside

Известный
Проверенный
1,916
1,255
Скрипт крашит, логи:
Ты скинул не весь текст ошибки, именно где причина была указана - ты обрезал. В любом случае, если ты будешь делать такую рандомную табуляцию ты в своем коде никогда не поймешь где, что, откуда и где же была ошибка. Так шо скинь весь тект ошибки.

Вот так бы код оформил я:

Lua:
        if imgui.ButtonClickable(klikabelna, u8"Начать", imgui.ImVec2(100, 20)) then
            klikabelna = false

            lua_thread.create(function(RP)
                sampSendChat("Здравствуйте, я, " .. u8:decode(rang.v) .. " " .. u8:decode(rusname.v) .. " проведу для вас собеседование.")
                wait(1650)
                
                if not stopRP then
                    sampSendChat("Покажите ваши документы, а именно: паспорт, мед. карту и лицензии.")
                end
                
                wait(1650)
                
                if not stopRP then
                    sampSendChat("/b Покажите документы отыгрывая /me и /do")
                end

                while not isKeyDown(VK_RETURN) do
                    wait(0)
                end
                
                sampSendChat("Хорошо, спасибо.")
            end)
            
            lua_thread.create(function()
                while true do
                    wait(0)
                    
                    if isKeyJustPressed(0x22) then
                        stopRP = true
                        wait(2500)
                        stopRP = false
                    end
                    
                    if stopRP then
                        wait(100)
                        sampAddChatMessage("Вы отменили РП отыгровку.", 0xfa9005)
                    end
                end
            end)
 

CHAPPLE

Участник
Автор темы
97
15
Ты скинул не весь текст ошибки, именно где причина была указана - ты обрезал. В любом случае, если ты будешь делать такую рандомную табуляцию ты в своем коде никогда не поймешь где, что, откуда и где же была ошибка. Так шо скинь весь тект ошибки.

Вот так бы код оформил я:

Lua:
        if imgui.ButtonClickable(klikabelna, u8"Начать", imgui.ImVec2(100, 20)) then
            klikabelna = false

            lua_thread.create(function(RP)
                sampSendChat("Здравствуйте, я, " .. u8:decode(rang.v) .. " " .. u8:decode(rusname.v) .. " проведу для вас собеседование.")
                wait(1650)
              
                if not stopRP then
                    sampSendChat("Покажите ваши документы, а именно: паспорт, мед. карту и лицензии.")
                end
              
                wait(1650)
              
                if not stopRP then
                    sampSendChat("/b Покажите документы отыгрывая /me и /do")
                end

                while not isKeyDown(VK_RETURN) do
                    wait(0)
                end
              
                sampSendChat("Хорошо, спасибо.")
            end)
          
            lua_thread.create(function()
                while true do
                    wait(0)
                  
                    if isKeyJustPressed(0x22) then
                        stopRP = true
                        wait(2500)
                        stopRP = false
                    end
                  
                    if stopRP then
                        wait(100)
                        sampAddChatMessage("Вы отменили РП отыгровку.", 0xfa9005)
                    end
                end
            end)
[16:50:57.637691] (system) Session started.
[16:50:57.638666] (debug) Module handle: 6B220000

MoonLoader v.026.5-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137

Copyright (c) 2016, BlastHack Team
https://www.blast.hk/moonloader/

[16:50:57.638666] (info) Working directory: D:\Games\Arizona V2\moonloader
[16:50:57.638666] (debug) FP Control: 0009001F
[16:50:57.638666] (debug) Game: GTA SA 1.0.0.0 US
[16:50:57.638666] (system) Installing pre-game hooks...
[16:50:57.642653] (system) Hooks installed.
[16:51:00.540000] (debug) Initializing opcode handler table
[16:51:00.540000] (debug) package.path = D:\Games\Arizona V2\moonloader\lib\?.lua;D:\Games\Arizona V2\moonloader\lib\?\init.lua;D:\Games\Arizona V2\moonloader\?.lua;D:\Games\Arizona V2\moonloader\?\init.lua;.\?.lua;D:\Games\Arizona V2\moonloader\lib\?.luac;D:\Games\Arizona V2\moonloader\lib\?\init.luac;D:\Games\Arizona V2\moonloader\?.luac;D:\Games\Arizona V2\moonloader\?\init.luac;.\?.luac
[16:51:00.540000] (debug) package.cpath = D:\Games\Arizona V2\moonloader\lib\?.dll;
[16:51:00.545984] (system) Loading script 'D:\Games\Arizona V2\moonloader\arizona_trash_chat.lua'...
[16:51:00.548976] (debug) New script: 0F59AEDC
[16:51:00.630765] (system) {ff4500}ATChat: Loaded successfully.
[16:51:00.630765] (system) Loading script 'D:\Games\Arizona V2\moonloader\AutoReboot.lua'...
[16:51:00.631754] (debug) New script: 0F59ABCC
[16:51:00.632752] (system) ML-AutoReboot: Loaded successfully.
[16:51:00.633749] (system) Loading script 'D:\Games\Arizona V2\moonloader\bypasser.lua'...
[16:51:00.633749] (debug) New script: 0F59B064
[16:51:00.649708] (system) bypasser.lua: Loaded successfully.
[16:51:00.649708] (system) Loading script 'D:\Games\Arizona V2\moonloader\cam.set.lua'...
[16:51:00.649708] (debug) New script: 0F59B1EC
[16:51:00.659680] (system) cam.set.lua: Loaded successfully.
[16:51:00.659680] (system) Loading script 'D:\Games\Arizona V2\moonloader\check-moonloader-updates.lua'...
[16:51:00.659680] (debug) New script: 0F599C7C
[16:51:00.665663] (system) Check MoonLoader Updates: Loaded successfully.
[16:51:00.665663] (system) Loading script 'D:\Games\Arizona V2\moonloader\ReloadScripts.lua'...
[16:51:00.665663] (debug) New script: 0F59A114
[16:51:00.666661] (system) ReloadScripts.lua: Loaded successfully.
[16:51:00.666661] (system) Loading script 'D:\Games\Arizona V2\moonloader\reload_all.lua'...
[16:51:00.666661] (debug) New script: 0F59A29C
[16:51:00.668656] (system) ML-ReloadAll: Loaded successfully.
[16:51:00.668656] (system) Loading script 'D:\Games\Arizona V2\moonloader\SF Integration.lua'...
[16:51:00.668656] (debug) New script: 01C82A8C
[16:51:00.671648] (system) SF Integration: Loaded successfully.
[16:51:00.671648] (system) Loading script 'D:\Games\Arizona V2\moonloader\SobesHelper.lua'...
[16:51:00.671648] (debug) New script: 1483C8F4
[16:51:00.703563] (system) SobesHelper: Loaded successfully.
[16:51:02.291850] (system) Installing post-load hooks...
[16:51:02.291850] (system) Hooks installed.
[16:51:03.270869] (script) {ff4500}ATChat: {FF4500}Arizona Trash Chat {ffffff}- Удаляем мусор из чата. {ff4500}Автор: {FFD700}tedj_ble$$ave
[16:51:25.206018] (error) SobesHelper: D:\Games\Arizona V2\moonloader\lib\imgui_addons.lua:210: attempt to index local 'bool' (a nil value)
stack traceback:
D:\Games\Arizona V2\moonloader\lib\imgui_addons.lua:210: in function 'ToggleButton'
D:\Games\Arizona V2\moonloader\SobesHelper.lua:302: in function 'OnDrawFrame'
D:\Games\Arizona V2\moonloader\lib\imgui.lua:1378: in function <D:\Games\Arizona V2\moonloader\lib\imgui.lua:1367>
[16:51:25.213906] (error) SobesHelper: Script died due to an error. (1483C8F4)
 

Double Tap Inside

Известный
Проверенный
1,916
1,255
@Chapplov Вижу ты решил использовать imgui_addons.

\lib\imgui_addons.lua:210: attempt to index local 'bool' (a nil value)
\lib\imgui_addons.lua:210: не удалось проиндексировать локальную переменную 'bool' (потому что она значения nil)

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

Я открыл 210 строку imgui_addons модуля и увидел, что оно пытается получить
bool.v, через точку. Но у типа данных "nil" нет никаких методов или свойств на которые можно ссылаться, этот тип считается Ничем.

Оказывается, что вторым аргументом в функции:
module.ToggleButton = function(str_id, bool)

идет imgui.ImBool(false/true), а не nil/false/true.

Вывод, надо создать переменную для этого переключателя. Я это делаю в глобальном пространстве или в какой-то таблице:
perekluchalka = imgui.ImBool(false)

-- где то в ОнДравФрейм
imgui_addons.ToggleButton(u8("Название"), perekluchalka)
 
  • Нравится
Реакции: Snoopcheg

Double Tap Inside

Известный
Проверенный
1,916
1,255
Из-за этого крашит скрипт?
(Error) \lib\imgui_addons.lua:210: attempt to index local 'bool' (a nil value)
(Ошибка) \lib\imgui_addons.lua:210: не удалось проиндексировать локальную переменную 'bool' (потому что она значения nil)


1624022794057.png
 

CHAPPLE

Участник
Автор темы
97
15
(Error) \lib\imgui_addons.lua:210: attempt to index local 'bool' (a nil value)
(Ошибка) \lib\imgui_addons.lua:210: не удалось проиндексировать локальную переменную 'bool' (потому что она значения nil)


Посмотреть вложение 101542
Убрал полностью imgui addons
Вот логи:
[17:25:42.987987] (error) SobesHelper: D:\Games\Arizona V2\moonloader\SobesHelper.lua:302: attempt to call field 'ButtonClickable' (a nil value)
stack traceback:
D:\Games\Arizona V2\moonloader\SobesHelper.lua:302: in function 'OnDrawFrame'
D:\Games\Arizona V2\moonloader\lib\imgui.lua:1378: in function <D:\Games\Arizona V2\moonloader\lib\imgui.lua:1367>
[17:25:43.000952] (error) SobesHelper: Script died due to an error. (241DF2BC)
Могу скинуть полный код....