Реализация выыполнения команды по кнопке в imgui с несколькими параметрами(аргументами)

Alkoigel

Участник
Автор темы
116
15
Всем привет. Пытаюсь написать свой первый скрипт. Использую mimgui графику. Скрипт должен упростить работу следящих за гетто админов на одном сервере.

На данный момент имею вот это:
mimgui часть:
function imgui.OnDrawFrame()
    imgui.SetNextWindowSize(imgui.ImVec2(500, 300), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))

    imgui.Begin("Ghetto Helper", main_window_state) -- название окна


    imgui.RadioButton(u8"Грув", checked_band, 2)            -- название круга, переменная,
    imgui.SameLine()
    imgui.RadioButton(u8"Баллас", checked_band, 3)            -- название круга, переменная,
    imgui.SameLine()
    imgui.RadioButton(u8"Вагос", checked_band, 4)            -- название круга, переменная,
    imgui.SameLine()
    imgui.RadioButton(u8"Ацтек", checked_band, 5)            -- название круга, переменная,
    imgui.SameLine()
    imgui.RadioButton(u8"Рифа", checked_band, 6)            -- название круга, переменная,

    imgui.Separator()

    imgui.Checkbox(u8"Наказание 1/3", checked_NakNumber)            -- название квадрата, переменная.
    imgui.Checkbox(u8"Наказание 2/3", checked_NakNumber_2)            -- название квадрата, переменная.
    imgui.Checkbox(u8"Наказание 3/3", checked_NakNumber_3)            -- название квадрата, переменная.

    imgui.Combo(u8"Причина", combo_select, arr_cheat, #arr_cheat)

    imgui.End()
end
Выглядит это Вот так:
1623194793255.png

Так же имею массив
Lua:
local arr_cheat = {"Aimbot", "WallHack", "Spread", "Speedhack", "Saim", "DMG", "SK", "Provo na SK", "Fly", "AirBreak", "Flycar"}

Нужна помощь.
Как мне реализовать следующее:
Ставится галочка на одну из бан и один из видов наказаний (Наказание 1/3 и т.д.)
После чего выбирается наказание. В зависимости от нарушения - jail / ban.

То есть скрипт собирает информацию из этой менюшки, после чего выводит samdSendChat(/ban[или джаил] id причину и какое это наказание по счёту.

Буду очень благодарен.

Lua:
require "lib.moonloader" -- подключение библиотеки
local keys = require "vkeys"
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local tag = "[My First Script]:" -- локальная переменная
local label = 0
local main_color = 0x5A90CE
local main_color_text = "{5A90CE}"
local white_color = "{FFFFFF}"
local arr_cheat = {"Aimbot", "WallHack", "Spread", "Speedhack", "Saim", "DMG", "SK", "Provo na SK", "Fly", "AirBreak", "Flycar"}

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)


-- чекбоксы
    local checked_NakNumber        = imgui.ImBool(false)
    local checked_NakNumber_2    = imgui.ImBool(false)
    local checked_NakNumber_3    = imgui.ImBool(false)
--

-- радиокнопки
    local checked_band        = imgui.ImInt(1)
 
--

--комбобоксы
    local combo_select         =imgui.ImInt(0)
--

local sw, sh = getScreenResolution()

function SetStyle()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.ChildWindowRounding = 4.0
    colors[clr.PopupBg]                = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.ComboBg]                = colors[clr.PopupBg]
    colors[clr.Button]                 = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.ButtonHovered]          = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ButtonActive]           = ImVec4(0.06, 0.53, 0.98, 1.00)
    colors[clr.TitleBg]                = ImVec4(0.04, 0.04, 0.04, 1.00)
    colors[clr.TitleBgActive]          = ImVec4(0.16, 0.29, 0.48, 1.00)
    colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 0.51)
    colors[clr.CloseButton]            = ImVec4(0.41, 0.41, 0.41, 0.50)-- (0.1, 0.9, 0.1, 1.0)
    colors[clr.CloseButtonHovered]     = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.CloseButtonActive]      = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.TextSelectedBg]         = ImVec4(0.26, 0.59, 0.98, 0.35)
    colors[clr.Text]                   = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.FrameBg]                = ImVec4(0.16, 0.29, 0.48, 0.54)
    colors[clr.FrameBgHovered]         = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.FrameBgActive]          = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.MenuBarBg]              = ImVec4(0.14, 0.14, 0.14, 1.00)
    colors[clr.ScrollbarBg]            = ImVec4(0.02, 0.02, 0.02, 0.53)
    colors[clr.ScrollbarGrab]          = ImVec4(0.31, 0.31, 0.31, 1.00)
    colors[clr.ScrollbarGrabHovered]   = ImVec4(0.41, 0.41, 0.41, 1.00)
    colors[clr.ScrollbarGrabActive]    = ImVec4(0.51, 0.51, 0.51, 1.00)
    colors[clr.CheckMark]              = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Header]                 = ImVec4(0.26, 0.59, 0.98, 0.31)
    colors[clr.HeaderHovered]          = ImVec4(0.26, 0.59, 0.98, 0.80)
    colors[clr.HeaderActive]           = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.24, 0.52, 0.88, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.26, 0.59, 0.98, 1.00)
end
SetStyle()

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampRegisterChatCommand("imgui", cmd_imgui)
    sampRegisterChatCommand("check", cmd_check)
    _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    nick = sampGetPlayerNickname(id)

    imgui.Process = false
    --sampAddChatMessage("Скрипт imgui перезагружен", -1)

    while true do
        wait(0)
        if isKeyJustPressed(VK_F3) then
            cmd_imgui()
        end
        if isKeyJustPressed(VK_F4) then
            cmd_check()
        end

        if main_window_state.v == false then
            imgui.Process = false
        end
        -- Блок выполняющийся бесконечно (пока самп активен)

    end
end

function cmd_imgui(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

function cmd_check(arg)
    sampAddChatMessage(checked_band.v, -1)
end

function imgui.OnDrawFrame()
    imgui.SetNextWindowSize(imgui.ImVec2(500, 300), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))

    imgui.Begin("Ghetto Helper", main_window_state) -- название окна


    imgui.RadioButton(u8"Грув", checked_band, 2)            -- название круга, переменная,
    imgui.SameLine()
    imgui.RadioButton(u8"Баллас", checked_band, 3)            -- название круга, переменная,
    imgui.SameLine()
    imgui.RadioButton(u8"Вагос", checked_band, 4)            -- название круга, переменная,
    imgui.SameLine()
    imgui.RadioButton(u8"Ацтек", checked_band, 5)            -- название круга, переменная,

    imgui.Separator()

    imgui.Checkbox(u8"Наказание 1/3", checked_NakNumber)            -- название квадрата, переменная.
    imgui.Checkbox(u8"Наказание 2/3", checked_NakNumber_2)            -- название квадрата, переменная.
    imgui.Checkbox(u8"Наказание 3/3", checked_NakNumber_3)            -- название квадрата, переменная.

    arr_cheat = {"Aimbot", "WallHack", "Spread", "Speedhack", "Saim", "DMG", "SK", "Provo na SK", "Fly", "AirBreak", "Flycar"}

    imgui.Combo(u8"Причина", combo_select, arr_cheat, #arr_cheat)



    imgui.End()
end


--[[
    radiobutton - круглешки, выбрать 1 пункт
    checkbox - поставить галочку на чекбокс
    combobox - список в котором выбрать пункт

                if imgui.Button("press Me") then
                    sampAddChatMessage(u8:decode(text_buffer.v), -1)
                end

]]
 
Последнее редактирование:
Решение
Что было изменено/добавлено:
- Заменил чекбоксы "Наказание 1/3" и т.д на Радио батоны(( Как по мне это лучше так как надо выбрать только одно из них. ))
- Добавил возможность вписать ник или ид игрока.
- Добавил возможность выбрать что выдать: Бан, Варн, Деморган.
- Добавил возможность выбрать количество дней/минут бана/деморгана(( При выборе Радио Батона "Warn" данная возможность убирается потому что она там не нужна как по мне. ))
- Добавил кнопку "Наказать" которая наказывает игрока по вставленным.
-Добавил тему для скрипта(( взял из одного из своих скриптов ))
Кажется все.

Задание для тебя (( Для саморазвития )):
Добавь возможность отправки формы, (( при выборе Радио Батона Наказание/Отправка формы будет отправляться или форма или...

ARMOR

Модератор по раксампу
Модератор
4,936
6,735
Что было изменено/добавлено:
- Заменил чекбоксы "Наказание 1/3" и т.д на Радио батоны(( Как по мне это лучше так как надо выбрать только одно из них. ))
- Добавил возможность вписать ник или ид игрока.
- Добавил возможность выбрать что выдать: Бан, Варн, Деморган.
- Добавил возможность выбрать количество дней/минут бана/деморгана(( При выборе Радио Батона "Warn" данная возможность убирается потому что она там не нужна как по мне. ))
- Добавил кнопку "Наказать" которая наказывает игрока по вставленным.
-Добавил тему для скрипта(( взял из одного из своих скриптов ))
Кажется все.

Задание для тебя (( Для саморазвития )):
Добавь возможность отправки формы, (( при выборе Радио Батона Наказание/Отправка формы будет отправляться или форма или сразу наказание )) Задание не слишком сложное так что я уверен что ты справишься.

UPD: Поправил размеры imgui окна.
И да, не mimgui a imgui
Библиотеки отличаются
 

Вложения

  • test.lua
    13.6 KB · Просмотры: 12
Последнее редактирование:
  • Нравится
Реакции: Alkoigel