- Версия MoonLoader
- .026-beta
Скрипт должен по нажатию ХотКея открывать диалог и выбирать нужный пункт, но работает криво. При нажатие на любые бинды, он просто оставляет открытое меню и не выбирает никакой пункт.
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()
Последнее редактирование: