LUA скрипт [SpirtHack/Neverlose] Menu Selector | don't trash code.

Searching for myself
Пользователь
Статус
Оффлайн
Регистрация
29 Сен 2021
Сообщения
212
Реакции[?]
69
Поинты[?]
11K
Меня в нанотехнологиях не переиграть.
Тут без таб системы, но делает практически тоже самое, прикрутить сюда табы дело 2ух минут.
Можете юзать/постить куда хотите, было написано за пару минут специально для этой темы
Код:
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)

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
jmp ecx enjoyer
Пользователь
Статус
Оффлайн
Регистрация
19 Фев 2019
Сообщения
378
Реакции[?]
104
Поинты[?]
8K
Меня в нанотехнологиях не переиграть.
Тут без таб системы, но делает практически тоже самое, прикрутить сюда табы дело 2ух минут.
Можете юзать/постить куда хотите, было написано за пару минут специально для этой темы
Код:
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)
кажется, я что-то похожее уже где-то видел....
 
Сверху Снизу