- 44
- 13
Я решил написать скрипт, облегчающий лидерство в гетто, но как-будто бы он только усложняет.
Идеей было автоматизировать некоторые функции через имгуи, но, например, при автореспавне машин банды, нельзя закрыть менюшку до тех пор, пока цикл не начнет повторятся, так же и с флудом в чат с определенной задержкой.
Так вот, мне нужно сделать так, что бы при запуске функций, которые выполняются в цикле, менюшка спокойно открывалась\закрывалась и скрипт не приостанавливал работу до тех пор, пока включён чекбокс. Для большей наглядности показал проблему в видео -
Ниже оставлю код, с выделенными строками цикла, чекбокса и флота соответственно, для удобства.
Идеей было автоматизировать некоторые функции через имгуи, но, например, при автореспавне машин банды, нельзя закрыть менюшку до тех пор, пока цикл не начнет повторятся, так же и с флудом в чат с определенной задержкой.
Так вот, мне нужно сделать так, что бы при запуске функций, которые выполняются в цикле, менюшка спокойно открывалась\закрывалась и скрипт не приостанавливал работу до тех пор, пока включён чекбокс. Для большей наглядности показал проблему в видео -
Lua:
script_name('Easy Ghetto')
script_author('Shvchuk')
script_description('EASYGHETTO 1.0')
require("lib.moonloader")
local memory = require 'memory'
local q = require 'samp.events'
local imgui = require("imgui")
local encoding = require("encoding")
encoding.default = "CP1251"
u8 = encoding.UTF8
local selecselect_imgui_window = 1
local tag = '[Easy Ghetto]: '
local label = 0
local main_color = 0x8B008B
local main_color_text = '{8B008B}'
local white_color = '{FFFFFF}'
local arr_str = {}
local mem = require "memory"
local sw, sh = getScreenResolution()
local imgExit = nil
local selected_item = imgui.ImInt(0)
local text_buffer = imgui.ImBuffer(256)
local main_window_state = imgui.ImBool(false)
local slider_floodline = imgui.ImInt(0)
local checkbox_floodline = imgui.ImBool(false)
local checkbox_autogrespawn = imgui.ImBool(false)
function main()
while not isSampAvailable() do wait(0) end
msg('Загружен.')
msg('Активация - {8B008B}/eg')
msg('Автор - {8B008B}Shvchuk.')
sampRegisterChatCommand("eg", function()
main_window_state.v = not main_window_state.v
end)
while true do
wait(0)
if checkbox_floodline.v then
sampSendChat(u8:decode(text_buffer.v))
wait(u8:decode(slider_floodline.v))
else
end
if checkbox_autogrespawn.v then
sampSendChat('/grespawn')
wait(120000)
sampSendChat('/f The car will be respawned in 5 second')
wait(1000)
sampSendChat('/f The car will be respawned in 4 second')
wait(1000)
sampSendChat('/f The car will be respawned in 3 second!')
wait(1000)
sampSendChat('/f The car will be respawned in 2 second!')
wait(1000)
sampSendChat('/f The car will be respawned in 1 second!')
wait(1000)
sampSendChat('/f The car will be respawned NOW')
wait(1000)
sampSendChat('/grespawn')
else
end
imgui.Process = main_window_state.v
end
end
function msg(text)
sampAddChatMessage('[EasyGhetto]: {FFFFFF}'.. text,0x8B008B)
end
function imgui.OnDrawFrame()
imgui.SetNextWindowPos(imgui.ImVec2(sw /2, sh /2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.SetNextWindowSize(imgui.ImVec2(640, 480), imgui.Cond.FirstUseEver)
imgui.Begin('EasyGhetto by Shvchuk', main_window_state,imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize)
if imgui.Button(u8'Diamond RP', imgui.ImVec2(195, 35)) then selecselect_imgui_window = 1 end imgui.SameLine() if imgui.Button(u8'Advance RP', imgui.ImVec2(195, 35)) then selecselect_imgui_window = 2 end imgui.SameLine() if imgui.Button(u8'commands', imgui.ImVec2(195, 35)) then selecselect_imgui_window = 3 end
imgui.Text(os.date())
imgui.Separator()
if selecselect_imgui_window == 1 then
imgui.Text(u8 'Diamond RP')
imgui.PushItemWidth(400)
imgui.InputText(u8 'Line', text_buffer)
if imgui.Checkbox(u8"Flood Line", checkbox_floodline) then
if checkbox_floodline.v then
msg("{fae7b5}Flood Line - {50c878}activated")
else
msg("{fae7b5}Flood Line - {ff2b2b}deactivated")
end
end
imgui.SameLine()
imgui.SliderInt('##floodline', slider_floodline, 1000, 5000)
imgui.SameLine()
imgui.TextQuestion(u8'Ползунок меняет задержку между отправкой сообщений из line при включенной функции "FloodLine". 1000 - 1 секунда. Выставить значение больше 5000 можно нажав tab, но делать это крайне не рекомендуется, из-за возможности закрыть/открыть меню скрипта только во время отправки сообщения.')
imgui.Separator()
imgui.Text(u8'Gang War')
if imgui.Button(u8'Capture 1', imgui.ImVec2(120, 30)) then
sampSendChat('/capture 1')
end
imgui.SameLine()
if imgui.Button(u8'Capture 2', imgui.ImVec2(120, 30)) then
sampSendChat('/capture 1')
end
imgui.SameLine()
imgui.TextQuestion(u8'При нажатии кнопки, начнётся захват той территории, на которой Вы стоите.')
imgui.Separator()
imgui.Text(u8'afk capture (перед использованием обязательно читать FAQ к каждой функции.)')
if imgui.Checkbox(u8"Auto Grespawn", checkbox_autogrespawn) then
if checkbox_autogrespawn.v then
msg("{fae7b5}Auto Grespawn - {50c878}activated")
else
msg("{fae7b5}Auto Grespawn - {ff2b2b}deactivated")
end
end
imgui.SameLine()
imgui.TextQuestion(u8'Внимание! использование функции позволит закрыть меню скрипта только при повторном спавне авто, рекомендуется использовать только при отходе из-за компьютера. При активации, каждые 2 минуты будет автоматически респавниться авто с обратным отсчетом в чат банды.')
elseif selecselect_imgui_window == 2 then
imgui.Text(u8'Advance RP')
imgui.Text('soon...')
elseif selecselect_imgui_window == 3 then
imgui.Text('Commands')
imgui.Text('soon...')
end
imgui.End()
end
function isKeyCheckAvailable()
if not isSampLoaded() then
return true
end
if not isSampfuncsLoaded() then
return not sampIsChatInputActive() and not sampIsDialogActive()
end
return not sampIsChatInputActive() and not sampIsDialogActive() and not isSampfuncsConsoleActive()
end
function imgui.TextQuestion(text)
imgui.TextDisabled('(?)')
if imgui.IsItemHovered() then
imgui.BeginTooltip()
imgui.PushTextWrapPos(450)
imgui.TextUnformatted(text)
imgui.PopTextWrapPos()
imgui.EndTooltip()
end
end
function apply_custom_style()
imgui.SwitchContext()
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
local ImVec4 = imgui.ImVec4
local ImVec2 = imgui.ImVec2
style.WindowPadding = ImVec2(15, 15)
style.WindowRounding = 5.0
style.FramePadding = ImVec2(5, 5)
style.FrameRounding = 4.0
style.ItemSpacing = ImVec2(12, 8)
style.ItemInnerSpacing = 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, 0.98)
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()