Не работает код

why ega

РП игрок
Автор темы
Модератор
2,547
2,238
Версия MoonLoader
.026-beta
Скрипт должен по нажатию ХотКея открывать диалог и выбирать нужный пункт, но работает криво. При нажатие на любые бинды, он просто оставляет открытое меню и не выбирает никакой пункт.



2p2ThdTiFj-1bcIdXQG225K2l6m4nSE0tjcfltBQrwahTRV8nm9seFfWhEz5RwpkTLrhK5Ypw5eaTIxMCK0h7nL9.jpg



1651170053966.png


ega:
script_name('Helper For Mekhanniko') -- название
script_author('Ega') -- автор

require "lib.moonloader" -- подключение moonloader

local sizeX, sizeY = getScreenResolution()

local vkeys = require 'vkeys'

local sampev = require 'lib.samp.events'

local inicfg = require 'inicfg' -- подключение cfg

local imgui = require 'imgui'

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local rkeys = require 'rkeys'
imgui.HotKey = require('imgui_addons').HotKey

local ActiveMenu = {
    v = {vkeys.VK_F12}
}

local Chin = {
    v = {vkeys.VK_1}
}

local Color1 = {
    v = {vkeys.VK_2}
}

local Color2 = {
    v = {vkeys.VK_3}
}

local Azot = {
    v = {vkeys.VK_4}
}

local Gidra = {
    v = {vkeys.VK_5}
}

local Kapital = {
    v = {vkeys.VK_6}
}

local Tun = {
    v = {vkeys.VK_7}
}

local Ton = {
    v = {vkeys.VK_8}
}

local Audio = {
    v = {vkeys.VK_9}
}

local Zamok = {
    v = {vkeys.VK_MENU, vkeys.VK_1}
}

local Signal = {
    v = {vkeys.VK_MENU, vkeys.VK_2}
}

local Cancel = {
    v = {vkeys.VK_DELETE}
}

local bindID = 0

local main_window_state = imgui.ImBool(false)

local text_buffer = imgui.ImBuffer(256)

local directIni = 'moonloader\\config\\settingsmehanniko.ini' -- путь к конфигу

local mainIni = inicfg.load(nil, directIni) -- подключение cfg

local tag = '{0000FF} [Helper For Mekhanniko by Ega] {000000}- ' -- переменная, отвечающая за название скрипта

function main() -- основная функция, используется один раз при запуске игры
    if not isSampfuncsLoaded() or not isSampLoaded() then return end -- если САМП и САМПФУНКС не запущены, остановить скрипт
    while not isSampAvailable() do wait(100) end

    sampAddChatMessage(tag .. '{3333ff} Helper For Mekhanniko by Ega {FFFFFF}успешно загружен. ', -1) -- проверка роботоспособности

    imgui.Process = false -- imgui окно отключено

    bindID = rkeys.registerHotKey(ActiveMenu.v, true, function ()
        main_window_state.v = not main_window_state.v
    end)

    bindChin = rkeys.registerHotKey(Chin.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Починить автомобиль")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindColor1 = rkeys.registerHotKey(Color1.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Изменить цвет [1]")
            sampCloseCurrentDialogWithButton(1)
        end
  
    end)

    bindColor2 = rkeys.registerHotKey(Color2.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Изменить цвет [2]")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindAzot = rkeys.registerHotKey(Azot.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Установить азот")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindGidra = rkeys.registerHotKey(Gidra.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Установить гидравлику")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindKapital = rkeys.registerHotKey(Kapital.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Сделать капитальный ремонт")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindTun = rkeys.registerHotKey(Tun.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Убрать весь тюнинг")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindTon = rkeys.registerHotKey(Ton.v, true, function ()
        sampSendChat('/tuning')
  
        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Тонировка")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindAudio = rkeys.registerHotKey(Audio.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Установить аудиосистему")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindZamok = rkeys.registerHotKey(Zamok.v, true, function ()
        sampSendChat('/tuning')
  
        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Повысить уровень замков")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindSignal = rkeys.registerHotKey(Signal.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Установить сигнализацию")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindSignal = rkeys.registerHotKey(Signal.v, true, function ()
        sampSendChat('/cancel')
    end)

    while true do -- бесконечный цикл

        imgui.Process = main_window_state.v -- теперь значение imgui.Process всегда будет задаваться в зависимости от активности основного окна
        wait(0) -- ждать 0 миллисекунд
    end
end

function imgui.OnDrawFrame() -- отрисовка imgui окна

    local tLastKeys = {}

    imgui.Process = main_window_state.v or other_window_state.v

    if not main_window_state.v and not two_window_state.v then
        imgui.Process = false
    end

    if main_window_state.v then
        local resX, resY = getScreenResolution()
        local x, y, z = getCharCoordinates(playerPed)

        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) -- Укажем положение окна по центру и выставим оффсет 0.5, чтобы рендер шёл от середины окна
        imgui.SetNextWindowSize(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver) -- Укажем размер
  
        imgui.Begin('Helper For Mekhanniko', main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysUseWindowPadding)
  
        img = imgui.CreateTextureFromFile(getGameDirectory() .. '\\moonloader\\images\\mouse1.png')
  
        imgui.SetCursorPosX((imgui.GetWindowWidth() - 325))
        imgui.Image(img, imgui.ImVec2(155, 131))

        imgui.SetCursorPosX((imgui.GetWindowWidth() - 350))

        imgui.Text(u8'Активация меню:')

        imgui.SameLine()

        if imgui.HotKey("##active", ActiveMenu, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, ActiveMenu.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(ActiveMenu.v), " + "), -1)
        end

        imgui.SetCursorPosX((imgui.GetWindowWidth() - 315))
        imgui.Text(u8'Основной фунционал:')
  
        if imgui.HotKey("##chin", Chin, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Chin.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Chin.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Починить автомобиль')

        if imgui.HotKey("##color1", Color1, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Color1.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Color1.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Изменить цвет [1]')

        if imgui.HotKey("##color2", Color2, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Color2.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Color2.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Изменить цвет [2]')

        if imgui.HotKey("##azot", Azot, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Azot.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Azot.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Установить азот')

        if imgui.HotKey("##gidra", Gidra, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Gidra.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Gidra.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Установить гидравлику')

        if imgui.HotKey("##kapital", Kapital, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Kapital.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Kapital.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Сделать капитальный ремонт')

        if imgui.HotKey("##tun", Tun, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Tun.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Tun.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Убрать весь тюнинг')

        if imgui.HotKey("##ton", Ton, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Ton.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Ton.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Тонировка')

        if imgui.HotKey("##audio", Audio, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Audio.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Audio.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Установить аудиосистему')

        if imgui.HotKey("##zamok", Zamok, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Zamok.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Zamok.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Повысить уровень замков')

        if imgui.HotKey("##signal", Signal, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Signal.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Signal.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Установить сигнализацию')

        if imgui.HotKey("##cancel", Cancel, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Cancel.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(ActiveMenu.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Отменить предложение')

        imgui.End()
    end
end

function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4

    style.WindowPadding = imgui.ImVec2(15, 15)
    style.WindowRounding = 1.5
    style.FramePadding = imgui.ImVec2(5, 5)
    style.FrameRounding = 4.0
    style.ItemSpacing = imgui.ImVec2(12, 8)
    style.ItemInnerSpacing = imgui.ImVec2(8, 6)
    style.IndentSpacing = 25.0
    style.ScrollbarSize = 15.0
    style.ScrollbarRounding = 9.0
    style.GrabMinSize = 5.0
    style.GrabRounding = 3.0

    colors[clr.Text] = ImVec4(0.80, 0.80, 0.83, 1.00)
    colors[clr.TextDisabled] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.WindowBg] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ChildWindowBg] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.PopupBg] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.Border] = ImVec4(0.80, 0.80, 0.83, 0.88)
    colors[clr.BorderShadow] = ImVec4(0.92, 0.91, 0.88, 0.00)
    colors[clr.FrameBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.FrameBgHovered] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.FrameBgActive] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.TitleBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.TitleBgCollapsed] = ImVec4(1.00, 0.98, 0.95, 0.75)
    colors[clr.TitleBgActive] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.MenuBarBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ScrollbarBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ScrollbarGrab] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.ScrollbarGrabHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.ScrollbarGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ComboBg] = ImVec4(0.19, 0.18, 0.21, 1.00)
    colors[clr.CheckMark] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.SliderGrab] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.SliderGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.Button] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ButtonHovered] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.ButtonActive] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.Header] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.HeaderHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.HeaderActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ResizeGrip] = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.ResizeGripHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.ResizeGripActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.CloseButton] = ImVec4(0.40, 0.39, 0.38, 0.16)
    colors[clr.CloseButtonHovered] = ImVec4(0.40, 0.39, 0.38, 0.39)
    colors[clr.CloseButtonActive] = ImVec4(0.40, 0.39, 0.38, 1.00)
    colors[clr.PlotLines] = ImVec4(0.40, 0.39, 0.38, 0.63)
    colors[clr.PlotLinesHovered] = ImVec4(0.25, 1.00, 0.00, 1.00)
    colors[clr.PlotHistogram] = ImVec4(0.40, 0.39, 0.38, 0.63)
    colors[clr.PlotHistogramHovered] = ImVec4(0.25, 1.00, 0.00, 1.00)
    colors[clr.TextSelectedBg] = ImVec4(0.25, 1.00, 0.00, 0.43)
    colors[clr.ModalWindowDarkening] = ImVec4(1.00, 0.98, 0.95, 0.73)
  end
  apply_custom_style()
 
Последнее редактирование:

ewin

Известный
675
369
Скрипт должен по нажатию ХотКея открывать диалог и выбирать нужный пункт, но работает криво. При нажатие на любые бинды, он просто оставляет открытое меню и не выбирает никакой пункт.



2p2ThdTiFj-1bcIdXQG225K2l6m4nSE0tjcfltBQrwahTRV8nm9seFfWhEz5RwpkTLrhK5Ypw5eaTIxMCK0h7nL9.jpg



Посмотреть вложение 145440

ega:
script_name('Helper For Mekhanniko') -- название
script_author('Ega') -- автор

require "lib.moonloader" -- подключение moonloader

local sizeX, sizeY = getScreenResolution()

local vkeys = require 'vkeys'

local sampev = require 'lib.samp.events'

local inicfg = require 'inicfg' -- подключение cfg

local imgui = require 'imgui'

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local rkeys = require 'rkeys'
imgui.HotKey = require('imgui_addons').HotKey

local ActiveMenu = {
    v = {vkeys.VK_F12}
}

local Chin = {
    v = {vkeys.VK_1}
}

local Color1 = {
    v = {vkeys.VK_2}
}

local Color2 = {
    v = {vkeys.VK_3}
}

local Azot = {
    v = {vkeys.VK_4}
}

local Gidra = {
    v = {vkeys.VK_5}
}

local Kapital = {
    v = {vkeys.VK_6}
}

local Tun = {
    v = {vkeys.VK_7}
}

local Ton = {
    v = {vkeys.VK_8}
}

local Audio = {
    v = {vkeys.VK_9}
}

local Zamok = {
    v = {vkeys.VK_MENU, vkeys.VK_1}
}

local Signal = {
    v = {vkeys.VK_MENU, vkeys.VK_2}
}

local Cancel = {
    v = {vkeys.VK_DELETE}
}

local bindID = 0

local main_window_state = imgui.ImBool(false)

local text_buffer = imgui.ImBuffer(256)

local directIni = 'moonloader\\config\\settingsmehanniko.ini' -- путь к конфигу

local mainIni = inicfg.load(nil, directIni) -- подключение cfg

local tag = '{0000FF} [Helper For Mekhanniko by Ega] {000000}- ' -- переменная, отвечающая за название скрипта

function main() -- основная функция, используется один раз при запуске игры
    if not isSampfuncsLoaded() or not isSampLoaded() then return end -- если САМП и САМПФУНКС не запущены, остановить скрипт
    while not isSampAvailable() do wait(100) end

    sampAddChatMessage(tag .. '{3333ff} Helper For Mekhanniko by Ega {FFFFFF}успешно загружен. ', -1) -- проверка роботоспособности

    imgui.Process = false -- imgui окно отключено

    bindID = rkeys.registerHotKey(ActiveMenu.v, true, function ()
        main_window_state.v = not main_window_state.v
    end)

    bindChin = rkeys.registerHotKey(Chin.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Починить автомобиль")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindColor1 = rkeys.registerHotKey(Color1.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Изменить цвет [1]")
            sampCloseCurrentDialogWithButton(1)
        end
 
    end)

    bindColor2 = rkeys.registerHotKey(Color2.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Изменить цвет [2]")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindAzot = rkeys.registerHotKey(Azot.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Установить азот")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindGidra = rkeys.registerHotKey(Gidra.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Установить гидравлику")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindKapital = rkeys.registerHotKey(Kapital.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Сделать капитальный ремонт")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindTun = rkeys.registerHotKey(Tun.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Убрать весь тюнинг")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindTon = rkeys.registerHotKey(Ton.v, true, function ()
        sampSendChat('/tuning')
 
        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Тонировка")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindAudio = rkeys.registerHotKey(Audio.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Установить аудиосистему")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindZamok = rkeys.registerHotKey(Zamok.v, true, function ()
        sampSendChat('/tuning')
 
        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Повысить уровень замков")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindSignal = rkeys.registerHotKey(Signal.v, true, function ()
        sampSendChat('/tuning')

        if sampIsDialogActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Установить сигнализацию")
            sampCloseCurrentDialogWithButton(1)
        end

    end)

    bindSignal = rkeys.registerHotKey(Signal.v, true, function ()
        sampSendChat('/cancel')
    end)

    while true do -- бесконечный цикл

        imgui.Process = main_window_state.v -- теперь значение imgui.Process всегда будет задаваться в зависимости от активности основного окна
        wait(0) -- ждать 0 миллисекунд
    end
end

function imgui.OnDrawFrame() -- отрисовка imgui окна

    local tLastKeys = {}

    imgui.Process = main_window_state.v or other_window_state.v

    if not main_window_state.v and not two_window_state.v then
        imgui.Process = false
    end

    if main_window_state.v then
        local resX, resY = getScreenResolution()
        local x, y, z = getCharCoordinates(playerPed)

        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) -- Укажем положение окна по центру и выставим оффсет 0.5, чтобы рендер шёл от середины окна
        imgui.SetNextWindowSize(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver) -- Укажем размер
 
        imgui.Begin('Helper For Mekhanniko', main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysUseWindowPadding)
 
        img = imgui.CreateTextureFromFile(getGameDirectory() .. '\\moonloader\\images\\mouse1.png')
 
        imgui.SetCursorPosX((imgui.GetWindowWidth() - 325))
        imgui.Image(img, imgui.ImVec2(155, 131))

        imgui.SetCursorPosX((imgui.GetWindowWidth() - 350))

        imgui.Text(u8'Активация меню:')

        imgui.SameLine()

        if imgui.HotKey("##active", ActiveMenu, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, ActiveMenu.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(ActiveMenu.v), " + "), -1)
        end

        imgui.SetCursorPosX((imgui.GetWindowWidth() - 315))
        imgui.Text(u8'Основной фунционал:')
 
        if imgui.HotKey("##chin", Chin, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Chin.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Chin.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Починить автомобиль')

        if imgui.HotKey("##color1", Color1, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Color1.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Color1.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Изменить цвет [1]')

        if imgui.HotKey("##color2", Color2, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Color2.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Color2.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Изменить цвет [2]')

        if imgui.HotKey("##azot", Azot, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Azot.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Azot.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Установить азот')

        if imgui.HotKey("##gidra", Gidra, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Gidra.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Gidra.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Установить гидравлику')

        if imgui.HotKey("##kapital", Kapital, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Kapital.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Kapital.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Сделать капитальный ремонт')

        if imgui.HotKey("##tun", Tun, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Tun.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Tun.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Убрать весь тюнинг')

        if imgui.HotKey("##ton", Ton, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Ton.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Ton.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Тонировка')

        if imgui.HotKey("##audio", Audio, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Audio.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Audio.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Установить аудиосистему')

        if imgui.HotKey("##zamok", Zamok, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Zamok.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Zamok.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Повысить уровень замков')

        if imgui.HotKey("##signal", Signal, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Signal.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(Signal.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Установить сигнализацию')

        if imgui.HotKey("##cancel", Cancel, tLastKeys, 100) then
            rkeys.changeHotKey(bindID, Cancel.v)
            sampAddChatMessage(tag .. "{ffffff}Успешно сохранено! Старое значение: {ffff00}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. " {ffffff}| Новое: {ffff00}" .. table.concat(rkeys.getKeysName(ActiveMenu.v), " + "), -1)
        end

        imgui.SameLine()

        imgui.Text(u8'Отменить предложение')

        imgui.End()
    end
end

function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4

    style.WindowPadding = imgui.ImVec2(15, 15)
    style.WindowRounding = 1.5
    style.FramePadding = imgui.ImVec2(5, 5)
    style.FrameRounding = 4.0
    style.ItemSpacing = imgui.ImVec2(12, 8)
    style.ItemInnerSpacing = imgui.ImVec2(8, 6)
    style.IndentSpacing = 25.0
    style.ScrollbarSize = 15.0
    style.ScrollbarRounding = 9.0
    style.GrabMinSize = 5.0
    style.GrabRounding = 3.0

    colors[clr.Text] = ImVec4(0.80, 0.80, 0.83, 1.00)
    colors[clr.TextDisabled] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.WindowBg] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ChildWindowBg] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.PopupBg] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.Border] = ImVec4(0.80, 0.80, 0.83, 0.88)
    colors[clr.BorderShadow] = ImVec4(0.92, 0.91, 0.88, 0.00)
    colors[clr.FrameBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.FrameBgHovered] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.FrameBgActive] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.TitleBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.TitleBgCollapsed] = ImVec4(1.00, 0.98, 0.95, 0.75)
    colors[clr.TitleBgActive] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.MenuBarBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ScrollbarBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ScrollbarGrab] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.ScrollbarGrabHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.ScrollbarGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ComboBg] = ImVec4(0.19, 0.18, 0.21, 1.00)
    colors[clr.CheckMark] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.SliderGrab] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.SliderGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.Button] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ButtonHovered] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.ButtonActive] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.Header] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.HeaderHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.HeaderActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ResizeGrip] = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.ResizeGripHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.ResizeGripActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.CloseButton] = ImVec4(0.40, 0.39, 0.38, 0.16)
    colors[clr.CloseButtonHovered] = ImVec4(0.40, 0.39, 0.38, 0.39)
    colors[clr.CloseButtonActive] = ImVec4(0.40, 0.39, 0.38, 1.00)
    colors[clr.PlotLines] = ImVec4(0.40, 0.39, 0.38, 0.63)
    colors[clr.PlotLinesHovered] = ImVec4(0.25, 1.00, 0.00, 1.00)
    colors[clr.PlotHistogram] = ImVec4(0.40, 0.39, 0.38, 0.63)
    colors[clr.PlotHistogramHovered] = ImVec4(0.25, 1.00, 0.00, 1.00)
    colors[clr.TextSelectedBg] = ImVec4(0.25, 1.00, 0.00, 0.43)
    colors[clr.ModalWindowDarkening] = ImVec4(1.00, 0.98, 0.95, 0.73)
  end
  apply_custom_style()
перенеси проверку на диалоговое окно в хук onShowDialog, у тебя скрипт вводит команду в следующий тик проверяет на присутствие диалогового окна, а сервер не успел отправить запрос/клиент не успел обработать запрос
 
  • Нравится
Реакции: why ega

why ega

РП игрок
Автор темы
Модератор
2,547
2,238
поставил задержку под пинг, но еще один вопрос, как сделать так, чтобы скрипт не работал, когда курсор на экране, т.к. когда добовляю
sampIsCursorActive(), то он скрипт перестает работать и
с sampIsCursorActive():
        if sampIsDialogActive() and not sampIsCursorActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Починить автомобиль")
            sampCloseCurrentDialogWithButton(1)
        end
при нужном диалоге.
 

ewin

Известный
675
369
поставил задержку под пинг, но еще один вопрос, как сделать так, чтобы скрипт не работал, когда курсор на экране, т.к. когда добовляю
sampIsCursorActive(), то он скрипт перестает работать и
с sampIsCursorActive():
        if sampIsDialogActive() and not sampIsCursorActive() then
            sampSetCurrentDialogListItem(0)
            sampSetCurrentDialogEditboxText("Починить автомобиль")
            sampCloseCurrentDialogWithButton(1)
        end
при нужном диалоге.
Lua:
if not isCursorActive() then -- не работает, если курсор активен
    --func
end

p.s работает только с мун 0.27+