LUA скрипт [NL] Чуток удобное UI

Участник
Участник
Статус
Оффлайн
Регистрация
29 Дек 2019
Сообщения
381
Реакции
168
Удобность заключается в том, что можно сразу при создании чит вара указывать зависимости для его отображения

Код:
Expand Collapse Copy
local ui = {
    list = { },
}

ui.push = function( element, index, conditions ) --creates CheatVar
    ui.list[ index ] = { }

    ui.list[ index ].element = element

    ui.list[ index ].visible_state = function( )
        if not conditions then
            return true
        end

        for k, v in pairs( conditions ) do
            local cur = ui.list[ v[ 1 ] ].element:Get( ) == v[ 2 ]

            if not cur then
                return false
            end
        end

        return true
    end
end

ui.get = function( index ) --returns CheatVar by its index
    return ui.list[ index ] and ui.list[ index ].element
end

ui.delete = function( index ) --deletes CheatVar by its index
    Menu.DestroyItem( ui.get( index ) )

    ui.list[ index ] = nil
end

ui.visibility_handle = function( ) --handles visibility of all CheatVars, should be called in draw callback
    if not Cheat.IsMenuVisible( ) then --а нахуя нам при зкарытой менюшке)
        return
    end

    for k, v in pairs( ui.list ) do
        v.element:SetVisible( v.visible_state( ) )
    end
end

-------------------------------------------------example-------------------------------------------------

ui.push( Menu.Switch( "General", "Enable", false, "" ), "enable_switch" ) --если нет условий, то элемент всегда видимый, но сам элемент и его индекс - обязательные аргументы к функции

ui.push( Menu.SliderInt( "General", "Value", 2, 1, 4, "" ), "value_slider", {-- добавляемм условия в виде массива с массивами(да, я умный)
    { "enable_switch", true } -- первый элемент массива - индекс в юи системе, второй - истинное значение для этого элемента
} )

ui.push( Menu.Switch( "General", "Result", false, "" ), "result_switch", {
    { "enable_switch", true }, --первое условие
    { "value_slider", 3 }, -- второе условие
} )

local function on_draw( )
    ui.visibility_handle( ) --не забываем заколбечить

    local value_var = ui.get( "value_slider" ) --находим наш чит вар

    if value_var:Get( ) == 4 then --юзаем его как хотим уже как обычно
        print( 1 )
    end
end

Cheat.RegisterCallback( "draw", on_draw ) --херачим в колбек
 
Вот вам не кринжовая реализация


Меня в нанотехнологиях не переиграть.
Тут без таб системы, но делает практически тоже самое, прикрутить сюда табы дело 2ух минут.
Можете юзать/постить куда хотите, было написано за пару минут специально для этой темы
Код:
Expand Collapse Copy
local ui_handler = {}

ui_handler.elements = {}
ui_handler.refs = {}

-- возможно можно как то оптимизировать указав более явные связи между элементами
ui_handler.run_update = function()
    for name, m_table in pairs(ui_handler.refs) do
        if m_table.condition ~= nil then
            m_table.ref:SetVisible(m_table.condition())
        end
    end
end

ui_handler.new = function(unique_name, reference, condition)

    -- опять же "защита" от дурачков которые не могут совладать с аргументами
    if type(unique_name) ~= "string" or type(reference) ~= "userdata" then
        error(unique_name .. " args error")
        return
    end

    -- same
    if condition ~= nil and type(condition) ~= "function" then
        error(unique_name .. " condition arg error")
        return
    end

    -- same
    if ui_handler.refs[unique_name] ~= nil then
        error(unique_name .. " already exists")
        return
    end

    ui_handler.refs[unique_name] = {
        ref = reference,
        name = unique_name,
        condition = condition
    }

    local on_touch_callback = function(new_value)
        ui_handler.elements[unique_name] = new_value

        ui_handler.run_update()
    end

    -- разок апдейтим при инициализации и дальше ставим все это дело на каллбек
    on_touch_callback(reference:Get())
    reference:RegisterCallback(on_touch_callback)

end

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

ui_handler.new("test1_1", Menu.Switch("Hello 1", "White person", false))
ui_handler.new("test1_2", Menu.SliderInt("Hello 1", "White person 2", 10, 0, 15), function()
    return ui_handler.elements["test1_1"]
end)

ui_handler.new("test1_3", Menu.ColorEdit("Hello 1", "White person 3", Color.new(1, 1, 1, 1)), function()
    return ui_handler.elements["test1_1"] and ui_handler.elements["test1_2"] == 15
end)

ui_handler.new("test2_1", Menu.Switch("Hello 2", "Black person", false))
ui_handler.new("test2_2", Menu.SliderInt("Hello 2", "Black person 2", 10, 0, 15), function()
    return ui_handler.elements["test2_1"]
end)

ui_handler.new("test2_3", Menu.ColorEdit("Hello 2", "Black person 3", Color.new(1, 1, 1, 1)), function()
    return ui_handler.elements["test2_1"] and ui_handler.elements["test2_2"] > 10
end)

-- можете удалить, это не нужная часть, тут просто выводятся вообще все значения из списка элементов
Cheat.RegisterCallback("draw", function()
    for k, v in pairs(ui_handler.elements) do
       print(k, ui_handler.elements[k])
    end
end)
 
А, чееее. Поч кринжовая?)
Ущербный нейминг, зачем то все вызывается в драв каллбеке (НАХУЯ??), все ущербно лежит в массиве, последовательность аргументов в функциях тоже шиза, зачем то сделали отдельную функцию для гета элементов

И ЭТО ТОЛЬКО НА 50 СТРОК ИЛИ СКОЛЬКО БЛЯТЬ ТАМ
 
Ущербный нейминг, зачем то все вызывается в драв каллбеке (НАХУЯ??), все ущербно лежит в массиве, последовательность аргументов в функциях тоже шиза, зачем то сделали отдельную функцию для гета элементов

И ЭТО ТОЛЬКО НА 50 СТРОК ИЛИ СКОЛЬКО БЛЯТЬ ТАМ
Чё))) а в какой колбек?)
И почему ущербно ахаха
Завтра сделаю на нл получше)

У тебя ведь почти то же самое)
 
а в какой колбек?)
ну блять например в каллбек уи элементов?)
И почему ущербно ахах
Действительно.
Вы запостили кринж.
Даже независимый эксперт оценил данный пост как кринж.
1646780116965.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
alguém se converte em aimware ou legendware?
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Так и запишем))))
Ну и твоя таб система
Это примордипл...
unknown.png

Вот так выглядит
 
Последнее редактирование:
лучшиий!!!
 
то есть драв коллбек для тебя удобнее, чем коллбек для юи элементов?
у электа на каждый юи элемента ставиться общий колбек) зачем его делать и ставить везде, если можно просто в драв запихнуть с чеком на открытое меню)
 
Назад
Сверху Снизу