При закрытии главного окна imgui, за ним закрываются и дочерние

ANZR

Известный
Автор темы
168
106
Форматирование кода
Версия MoonLoader
Вот сам код. При закрытии главного окна, у меня за ним закрываются и дочерние окна, что мне вообще не надо

script_name('CNN Helper')
script_version('0.8')
script_author('ANONIM')

local hook = require 'lib.samp.events'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
memory = require ('memory')
require 'lib.samp.events'
require 'moonloader'
local bind = require 'lib.samp.events'
local imgui = require 'imgui' -- загружаем библиотеку
local inicfg = require ('inicfg')

local ini = inicfg.load({
Main = {
on_programm = false,
day_time = false
}
}, '..\\config\\[CNN Helper] settings.ini')



-- imgui
local main_window_state = imgui.ImBool(false) -- Статус нашего окна (изначальне он выключен)
local PRO = imgui.ImBool(false) -- Статус нашего второго (изначальне он выключен)
local on_programm = imgui.ImBool(ini.Main.on_programm) -- Статус нашего чекбокса (изначальне он выключен)
local Sokr = imgui.ImBool(false)
local Zam = imgui.ImBool(false)
local day_time = imgui.ImBool(ini.Main.day_time) -- Статус нашего чекбокса (изначальне он выключен)
sw, sh = getScreenResolution()








function main ()
while true do
wait (0)
if wasKeyPressed(0x58) and not sampIsCursorActive() then -- Если нажата кнопка Х то наше окно Закрывается/Открывается
main_window_state.v = not main_window_state.v -- Переводим статус main_window_state в противоположное
end
imgui.Process = main_window_state.v
end
end


function imgui.OnDrawFrame()



if main_window_state.v then -- Если main_window_state активен, то открывается наш imgui

imgui.SetNextWindowPos(imgui.ImVec2(sw / 1.190, sh / 3), imgui.Cond.FirstUseEver, imgui.ImVec2(0, 0)) -- Распологаем по центру окно
imgui.SetNextWindowSize(imgui.ImVec2(300, 300), imgui.Cond.FirstUseEver) -- Устанавливаем размер окна
imgui.Begin ('CNN Helper', main_window_state)
if imgui.CollapsingHeader(u8'Функции') then -- Подразделение Настройки
if imgui.Checkbox(u8'Активировать автоловлю объявлений', on_programm) then -- Если чекбокс включен, то выполняем действие...
isPressed = on_programm.v -- Передаем значение on_programm в isPressed
end
if imgui.Checkbox(u8'Счетчик объявлений', day_time) then
DayTime = day_time.v -- Передаем значение on_programm в

end
if imgui.Button (u8"Открыть таблцу П.Р.О", PRO.v) then
PRO.v = not PRO.v
end
end
imgui.End() -- конец imgui
end





if PRO.v then -- Таблица с П.Р.О
imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 3), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.2)) -- Распологаем по центру окно
imgui.SetNextWindowSize(imgui.ImVec2(850, 500), imgui.Cond.FirstUseEver)
imgui.Begin(u8'Правила П.Р.О', PRO)
if imgui.CollapsingHeader(u8'Общие правила') then
imgui.Text(u8"1.1 • При отклонении объявления, в скобках, нужно обязательно указать причину отклонения для отправителя.")
imgui.Text(u8"1.2 • Если в объявлении при продаже не указана цена или есть такие слова, как «торг, цены в SMS, договор», то пишем «Цена: договорная»")
imgui.Text(u8"1.2.1 • Если в объявлении при продаже указана цена то пишем «Цена: Сумма»")
imgui.Text(u8"1.3 • Если в объявлении при покупке не указана цена, то редактируем как «Бюджет: свободный.")
imgui.Text(u8"1.3.1 • Если в объявлении при покупке указана цена, то редактируем как ")
imgui.Text(u8"1.4 • Запрещены сокращения, кроме общепринятых, таких как:")
if imgui.Button (u8"Открыть таблицу сокращений") then
Sokr.v = not Sokr.v
end
imgui.Text(u8"1.5 • Такие сокращения, как к, кк, тыс, тысяч и др, необходимо заменять на полную сумму.")
imgui.Text(u8"1.6 • Слово Гетто заменяется на бедный район,опасный район (без кавычек, с маленькой буквы).")
imgui.Text(u8"1.7 • Если в объявлении при покупке чего-либо не указано местоположение, то следует писать «в любой точке штата».")
imgui.Text(u8"1.8 • Запрещено редактировать объявления людей с опечатками в документах (NonRP nick)")
imgui.Text(u8"1.9 • Если в объявлении вас ставят перед выбором отклоняйте объявление с причиной:Нарушение ПРО (Уточните)")
imgui.Text(u8"1.10 • Слово «gps» / «жпс» заменяется на «Навигатор»")
imgui.Text(u8"1.11 Слово Мафия заменяется на:")
if imgui.Button (u8"Открыть таблицу заменок") then
Zam.v = not Zam.v
end
imgui.Text(u8"1.11 • Изменено редактирование денег. Если приходят объявление в стоимости которых указано 1.000.000+, то ставим ту сумму в мпн.")
end
if imgui.CollapsingHeader(u8'Недвижимость') then
imgui.Text(u8"2.1 • Названия городов и населённых пунктов писать на русском языке.")
imgui.Text(u8"2.2 • Если при покупке дома не указано его местоположение, то пишем «в любой точке штата»")
imgui.Text(u8"2.3 • При продаже дома необходимо указывать его местоположение, если не указано, то объявление отклоняется с причиной:Нарушение ПРО (укажите местоположение)")
imgui.Text(u8"2.4 • Разрешено редактировать объявления о сдаче комнат в доме, только если указано его местоположение, иначе объявление отклоняется.")
imgui.Text(u8"2.5 • Разрешено редактировать объявления о поиске комнаты под аренду. Пример: Ищу комнату под аренду в любой точке штата. Оплата за сутки: договорная.")
imgui.Text(u8"2.6 • Минимальный бюджет для покупки дома 300.000")
imgui.Text(u8"2.7 • Если в объявлении есть дополнения, такие как Гараж - (Г) или Подвал - (П), то их следует писать после класса дома в круглых скобочках.")
imgui.Text(u8"2.8 Теперь слово посёлок заменяется на аббревиатуру ПГТ(Посёлок Городского Типа)")
end
if imgui.CollapsingHeader(u8'Предприятие') then
imgui.Text(u8"3.1 • Слово «Бизнес» заменяется на «б.з».")
imgui.Text(u8"3.2 • Минимальный бюджет для покупки предприятия 900.000$.")
imgui.Text(u8"3.3 • При покупке предприятия не обязательно указывать его местоположение.")
imgui.Text(u8"3.4 • При продаже предприятия нужно обязательно указать его навигатор / примерное его местоположение.")
imgui.Text(u8"3.5 • При продаже предприятия обязательно нужно указать его название, если его не указали, то отклоняем.")
end
if imgui.CollapsingHeader(u8'Реклама') then
imgui.Text(u8"4.1 • Разрешено редактировать объявления с рекламными слоганами разного вида. Пример: Название - лучшая служба такси в штате. Звоните по номеру: *номер*.")
imgui.Text(u8"4.2 • Запрещена реклама предприятия, в которой гражданин ставится в заведомо ложное положение путём сомнительных акций.")
imgui.Text(u8"4.3 • Строго запрещено менять текст рекламных объявлений на свой.")
imgui.Text(u8"4.4 • При рекламе предприятия должно быть указано его название, иначе объявление отклоняется по причине : ПРО (Укажите название предприятия). ")
imgui.Text(u8"4.5 • При рекламе/продаже АЗС должно быть указано её местоположение.")
imgui.Text(u8"4.6 • В объявлениях о рекламе АЗС нужно обязательно указывать цену за литр.")
imgui.Text(u8"4.7 • Разрешена реклама выездного лицензера от Автошколы.")
imgui.Text(u8"4.8 • Запрещено рекламировать шахту, ферму и прочие работы.")
imgui.Text(u8"4.9 • Запрещено конкретное упоминание личностей в объявлениях.")
imgui.Text(u8"5.0 Разрешена реклама бизнесов, за исключением тех в которых есть азартные игры(бар)")
end
if imgui.CollapsingHeader(u8'Транспорт') then
imgui.Text(u8"5.1 • При редактировании объявлений с покупкой/продажей автомобиля/мотоцикла используем словосочетание а.м/авто/м.ц/мото марки/модели")
imgui.Text(u8"5.2 • При продаже/покупки автомобиля должна быть указана его марка.")
imgui.Text(u8"5.3 • Если при покупке не указана марка/модель автомобиля/мотоцикла, то редактируем как любой марки/любой модели.")
imgui.Text(u8"5.4 • Запрещено редактировать объявления, в которых при покупке/продаже указано несуществующее название транспорта.")
imgui.Text(u8"5.5 • Разрешено указывать наклейку при продаже транспорта.")
imgui.Text(u8"5.6 • Если в объявлении есть дополнения, такие как (FT) или Твин-Турбо - (TT), то их следует писать после марки транспорта в круглых скобочках.")
imgui.Text(u8"5.7 • Если в объявлении указывают, что транспорт с нагнетателем, то пишем после марки авто (Н)")
imgui.Text(u8"5.8 Еcли машина фулл комплектации(ТТ+Н), то после названия ставим аббревиатуру [ФТ](ФуллТюннинг)")
end
if imgui.CollapsingHeader(u8'Работа') then
imgui.Text(u8"6.1 • Разрешены объявления о проведении набора в банду, где слово «банда» заменяется на «баскетбольный клуб(БК)».")
imgui.Text(u8"6.2 • Разрешены объявления о проведении собеседования в ресторан, посольство, ЧОП, Байк-Клуб (Мафии).")
imgui.Text(u8"6.3 • Запрещено редактировать объявления, в которых идет речь о трудоустройстве в государственные и нелегальные организации. (Наказание - выговор)")
imgui.Text(u8"6.4 • Запрещены объявления о проведении набора в государственные организации.")
end
if imgui.CollapsingHeader(u8'Прочее/Разрешенное') then
imgui.Text(u8"7.1 • Разрешена реклама такси/механиков/развозчиков топлива/адвокатов.")
imgui.Text(u8"7.2 • Разрешены объявления о поиске друзей в дискорде/девушки/парня.")
end
if imgui.CollapsingHeader(u8'Прочее/Запрещенное') then
imgui.Text(u8"8.1 • Запрещено редактировать объявления, в которых идет речь о покупке/продаже оружия, а так же макетов оружия, пейнтбольного снаряжения и т.д.")
imgui.Text(u8"8.2 • Запрещено редактировать объявления, в которых идет речь о покупке/продаже наркотиков, а так же чая и т.д.")
imgui.Text(u8"8.3 • Запрещено выпускать объявления в которых есть посторонние и вредоносные ресурсы, пиар знаменитых личностей и т.д.")
imgui.Text(u8"8.4 • Запрещены объявления об ожидании объявлений, например СМИ не курит, СМИ не пьет, а объявлений ждет")
imgui.Text(u8"8.6 • Запрещены любые объявления, в которых идёт речь о проведении любых мероприятий от граждан штата.")
imgui.Text(u8"8.7 • Запрещена любая реклама об азартных играх(казино, бар)")
imgui.Text(u8"8.8 • Запрещено призывать к нарушению закона, суициду и прочим преступлениям, которые не корректны для нашего общества.")
end
if imgui.CollapsingHeader(u8'Ресурсы') then
imgui.Text(u8"9.1 • Запрещено редактировать объявления со словом крафт. ")
imgui.Text(u8"9.2 • Разрешено указывать количество продаваемого ресурса при продаже или же покупке. ")
imgui.Text(u8"9.3 • При продаже ресурсов обязательно нужно указать его название, если его не указали, то отклоняем объявление по причине:Нарушение ПРО")
end
imgui.End()
end








if Sokr.v then
imgui.SetNextWindowPos(imgui.ImVec2(sw / 3, sh / 3), imgui.Cond.FirstUseEver, imgui.ImVec2(2, 0)) -- Распологаем по центру окно
imgui.SetNextWindowSize(imgui.ImVec2(400, 250), imgui.Cond.FirstUseEver) -- Устанавливаем размер окна
imgui.Begin (u8'Сокращения', Sokr)
imgui.Text(u8"город – г.")
imgui.Text(u8"деревня – ПГТ ")
imgui.Text(u8"авто - а.м.")
imgui.Text(u8"мотоцикл - м.ц.")
imgui.Text(u8"бизнес - б.з.")
imgui.Text(u8"аксессуары - а.с ")
imgui.Text(u8"Воздушный транспорт - в.с")
imgui.Text(u8"Водный транспорт - в.т")
imgui.Text(u8"Трейлер - д.к (дом на колесах)")
imgui.Text(u8"Всё, что не входит в списки выше(например:Велосипед) - т.с")
imgui.Text(u8"Телефон - т.ф")
imgui.End()
end

if Zam.v then
imgui.SetNextWindowPos(imgui.ImVec2(sw / 4, sh / 1.76), imgui.Cond.FirstUseEver, imgui.ImVec2(3, 0)) -- Распологаем по центру окно
imgui.SetNextWindowSize(imgui.ImVec2(200, 130), imgui.Cond.FirstUseEver) -- Устанавливаем размер окна
imgui.Begin (u8"Замена", Zam)
imgui.Text(u8"РМ - ЧОП Русские Мишки")
imgui.Text(u8"Yakudza - Суши бар Якудза")
imgui.Text(u8"Warlock MC - Байкерский клуб")
imgui.Text(u8"LCN - Гольф Клуб ЛКН")
imgui.End()
end

if DayTime then -- Счетчик объявлений
imgui.SetNextWindowPos(imgui.ImVec2(sw / 1.190, sh / 3), imgui.Cond.FirstUseEver, imgui.ImVec2(0, -2.1))
imgui.SetNextWindowSize(imgui.ImVec2(260, 150), imgui.Cond.FirstUseEver) -- Устанавливаем размер окна
imgui.Begin(u8'Счетчик объявлений', day_time)
imgui.Text(u8"Кол-во объявлений за сегодня: ")
imgui.Text(u8"Всего объявлений: ")
imgui.End() -- конец imgui
end


end


function hook.onServerMessage(color, text)

if isPressed then -- Если чекбокс isPressed активен, то выполняем...
if text:find('На обработку объявлений пришло сообщение от: (.-)') and not sampIsCursorActive() then
sampAddChatMessage('Detected', -1)
sampSendChat("/newsredak")

end
end

end

function hook.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
if dialogId == 556 then
setVirtualKeyDown(13, false)
end
end



function onScriptTerminate() -- Сохранение настроек при выходе из игры
ini.Main.on_programm = on_programm.v
ini.Main.day_time = day_time.v
inicfg.save(ini, '..\\config\\[CNN Helper] settings.ini')
end





function apply_custom_style() -- Стиль окна имгуи
imgui.SwitchContext()
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
local ImVec4 = imgui.ImVec4

style.WindowRounding = 2.0
style.WindowTitleAlign = imgui.ImVec2(0.5, 0.84)
style.ChildWindowRounding = 2.0
style.FrameRounding = 2.0
style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
style.ScrollbarSize = 13.0
style.ScrollbarRounding = 0
style.GrabMinSize = 8.0
style.GrabRounding = 1.0
-- style.Alpha =
-- style.WindowPadding =
-- style.WindowMinSize =
-- style.FramePadding =
-- style.ItemInnerSpacing =
-- style.TouchExtraPadding =
-- style.IndentSpacing =
-- style.ColumnsMinSpacing = ?
-- style.ButtonTextAlign =
-- style.DisplayWindowPadding =
-- style.DisplaySafeAreaPadding =
-- style.AntiAliasedLines =
-- style.AntiAliasedShapes =
-- style.CurveTessellationTol =

colors[clr.Text] = ImVec4(1.00, 1.00, 1.00, 1.00)
colors[clr.TextDisabled] = ImVec4(0.50, 0.50, 0.50, 1.00)
colors[clr.WindowBg] = ImVec4(0.06, 0.06, 0.06, 0.94)
colors[clr.ChildWindowBg] = ImVec4(1.00, 1.00, 1.00, 0.00)
colors[clr.PopupBg] = ImVec4(0.08, 0.08, 0.08, 0.94)
colors[clr.ComboBg] = colors[clr.PopupBg]
colors[clr.Border] = ImVec4(0.43, 0.43, 0.50, 0.50)
colors[clr.BorderShadow] = ImVec4(0.00, 0.00, 0.00, 0.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.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.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.SliderGrab] = ImVec4(0.24, 0.52, 0.88, 1.00)
colors[clr.SliderGrabActive] = ImVec4(0.26, 0.59, 0.98, 1.00)
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.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.Separator] = colors[clr.Border]
colors[clr.SeparatorHovered] = ImVec4(0.26, 0.59, 0.98, 0.78)
colors[clr.SeparatorActive] = ImVec4(0.26, 0.59, 0.98, 1.00)
colors[clr.ResizeGrip] = ImVec4(0.26, 0.59, 0.98, 0.25)
colors[clr.ResizeGripHovered] = ImVec4(0.26, 0.59, 0.98, 0.67)
colors[clr.ResizeGripActive] = ImVec4(0.26, 0.59, 0.98, 0.95)
colors[clr.CloseButton] = ImVec4(0.41, 0.41, 0.41, 0.50)
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.PlotLines] = ImVec4(0.61, 0.61, 0.61, 1.00)
colors[clr.PlotLinesHovered] = ImVec4(1.00, 0.43, 0.35, 1.00)
colors[clr.PlotHistogram] = ImVec4(0.90, 0.70, 0.00, 1.00)
colors[clr.PlotHistogramHovered] = ImVec4(1.00, 0.60, 0.00, 1.00)
colors[clr.TextSelectedBg] = ImVec4(0.26, 0.59, 0.98, 0.35)
colors[clr.ModalWindowDarkening] = ImVec4(0.80, 0.80, 0.80, 0.35)
end
apply_custom_style()
 

eenz

Известный
203
102
Lua:
function main ()
while true do
wait (0)
if wasKeyPressed(0x58) and not sampIsCursorActive() then -- Если нажата кнопка Х то наше окно Закрывается/Открывается
main_window_state.v = not main_window_state.v -- Переводим статус main_window_state в противоположное
end
imgui.Process = main_window_state.v
end
end

function imgui.OnDrawFrame()

if main_window_state.v then -- Если main_window_state активен, то открывается наш imgui

imgui.SetNextWindowPos(imgui.ImVec2(sw / 1.190, sh / 3), imgui.Cond.FirstUseEver, imgui.ImVec2(0, 0)) -- Распологаем по центру окно
imgui.SetNextWindowSize(imgui.ImVec2(300, 300), imgui.Cond.FirstUseEver) -- Устанавливаем размер окна
imgui.Begin ('CNN Helper', main_window_state)

процесс имгуи завязан на переменной главного окна. нужна немного другая логика.

типа
Lua:
if main_window_state.v or Sokr.v or Zam.v (и т.д.) then
imgui.Process = true
else
imgui.Process = false
end