Помогите с ини и имгуи

Nelit

Потрачен
Автор темы
252
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Версия MoonLoader
.026-beta
У меня есть много полей, как сделать что-бы когда человек не введёт хотя бы в одно поле, оно выдало ошибку. Я сделал, но оно работает частично, то есть вополняется проверка введено ли, выдаёт ошибку и сохраняет, а мне надо что-бы просто дало ошибку.
КОд​
Lua:
script_name("[ARP] Gnews-Assistant")
script_author("Jesus_McWood")

require "lib.moonloader"

local inicfg = require 'inicfg'
local imgui = require 'imgui'

local directIni = 'moonloader/Gnews-Assistant/config.ini'
local mainIni = inicfg.load(nil, directIni)

local tag = "{FFD700}[Gnews-Assistant]"
local main_color = "0xFFD700"

local main_window = imgui.ImBool(false)
local settings_window = imgui.ImBool(false)
local info_window = imgui.ImBool(false)
local gnews_window = imgui.ImBool(false)
local pred_window = imgui.ImBool(false)
local pred2_window = imgui.ImBool(false)
local pred3_window = imgui.ImBool(false)
local pred4_window = imgui.ImBool(false)

local tag_buffer = imgui.ImBuffer(10)
local avans_buffer = imgui.ImBuffer(10)
local location_buffer = imgui.ImBuffer(10000)
local org_buffer = imgui.ImBuffer(10)
local treb_buffer = imgui.ImBuffer(10000)
local gps_buffer = imgui.ImBuffer(50)

local fa = require 'fAwesome5'
local fa_font = nil
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })

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

local sw, sh = getScreenResolution()
local ImVec2 = imgui.ImVec2

local table1

local shablon = {
    config = {
    org="LSPD", -- Организация
    tag="МВД", -- Тэг
    avans="10.000", -- Аванс
    location="в холле департамента Los-Santos", -- Локация
    gps="GPS 3-3", -- ГПС
    treb="3 года в штате, лицензии и быть законопослушным" -- Требования
}
}

function CustomStyle()
  imgui.SwitchContext()
  local style = imgui.GetStyle()
  local colors = style.Colors
  local clr = imgui.Col
  local ImVec4 = imgui.ImVec4
  style.WindowPadding = imgui.ImVec2(9, 5)
  style.WindowRounding = 10
  style.ChildWindowRounding = 10
  style.FramePadding = imgui.ImVec2(5, 3)
  style.FrameRounding = 6.0
  style.ItemSpacing = imgui.ImVec2(9.0, 3.0)
  style.ItemInnerSpacing = imgui.ImVec2(9.0, 3.0)
  style.IndentSpacing = 21
  style.ScrollbarSize = 6.0
  style.ScrollbarRounding = 13
  style.GrabMinSize = 17.0
  style.GrabRounding = 16.0
  style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
  style.ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
  colors[clr.Text]                   = ImVec4(0.90, 0.90, 0.90, 1.00)
  colors[clr.TextDisabled]           = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.WindowBg]               = ImVec4(0.00, 0.00, 0.00, 1.00)
  colors[clr.ChildWindowBg]          = ImVec4(0.00, 0.00, 0.00, 1.00)
  colors[clr.PopupBg]                = ImVec4(0.00, 0.00, 0.00, 1.00)
  colors[clr.Border]                 = ImVec4(0.82, 0.77, 0.78, 1.00)
  colors[clr.BorderShadow]           = ImVec4(0.35, 0.35, 0.35, 0.66)
  colors[clr.FrameBg]                = ImVec4(1.00, 1.00, 1.00, 0.28)
  colors[clr.FrameBgHovered]         = ImVec4(0.68, 0.68, 0.68, 0.67)
  colors[clr.FrameBgActive]          = ImVec4(0.79, 0.73, 0.73, 0.62)
  colors[clr.TitleBg]                = ImVec4(0.00, 0.00, 0.00, 1.00)
  colors[clr.TitleBgActive]          = ImVec4(0.46, 0.46, 0.46, 1.00)
  colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 1.00)
  colors[clr.MenuBarBg]              = ImVec4(0.00, 0.00, 0.00, 0.80)
  colors[clr.ScrollbarBg]            = ImVec4(0.00, 0.00, 0.00, 0.60)
  colors[clr.ScrollbarGrab]          = ImVec4(1.00, 1.00, 1.00, 0.87)
  colors[clr.ScrollbarGrabHovered]   = ImVec4(1.00, 1.00, 1.00, 0.79)
  colors[clr.ScrollbarGrabActive]    = ImVec4(0.80, 0.50, 0.50, 0.40)
  colors[clr.ComboBg]                = ImVec4(0.24, 0.24, 0.24, 0.99)
  colors[clr.CheckMark]              = ImVec4(0.99, 0.99, 0.99, 0.52)
  colors[clr.SliderGrab]             = ImVec4(1.00, 1.00, 1.00, 0.42)
  colors[clr.SliderGrabActive]       = ImVec4(0.76, 0.76, 0.76, 1.00)
  colors[clr.Button]                 = ImVec4(0.51, 0.51, 0.51, 0.60)
  colors[clr.ButtonHovered]          = ImVec4(0.68, 0.68, 0.68, 1.00)
  colors[clr.ButtonActive]           = ImVec4(0.67, 0.67, 0.67, 1.00)
  colors[clr.Header]                 = ImVec4(0.72, 0.72, 0.72, 0.54)
  colors[clr.HeaderHovered]          = ImVec4(0.92, 0.92, 0.95, 0.77)
  colors[clr.HeaderActive]           = ImVec4(0.82, 0.82, 0.82, 0.80)
  colors[clr.Separator]              = ImVec4(0.73, 0.73, 0.73, 1.00)
  colors[clr.SeparatorHovered]       = ImVec4(0.81, 0.81, 0.81, 1.00)
  colors[clr.SeparatorActive]        = ImVec4(0.74, 0.74, 0.74, 1.00)
  colors[clr.ResizeGrip]             = ImVec4(0.80, 0.80, 0.80, 0.30)
  colors[clr.ResizeGripHovered]      = ImVec4(0.95, 0.95, 0.95, 0.60)
  colors[clr.ResizeGripActive]       = ImVec4(1.00, 1.00, 1.00, 0.90)
  colors[clr.CloseButton]            = ImVec4(0.45, 0.45, 0.45, 0.50)
  colors[clr.CloseButtonHovered]     = ImVec4(0.70, 0.70, 0.90, 0.60)
  colors[clr.CloseButtonActive]      = ImVec4(0.70, 0.70, 0.70, 1.00)
  colors[clr.PlotLines]              = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.PlotLinesHovered]       = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.PlotHistogram]          = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.PlotHistogramHovered]   = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.TextSelectedBg]         = ImVec4(1.00, 1.00, 1.00, 0.35)
  colors[clr.ModalWindowDarkening]   = ImVec4(0.88, 0.88, 0.88, 0.35)
end

CustomStyle()

function imgui.BeforeDrawFrame()
  if fa_font == nil then
      local font_config = imgui.ImFontConfig()
      font_config.MergeMode = true

      fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/lib/resource/fonts/fa-solid-900.ttf', 14, font_config, fa_glyph_ranges)
  end
end

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

    -- wait(7000)
    sampAddChatMessage(tag .. " {FFD700}Gnews-Assistant {FFFFFF}успешно запущен. Автор: {FFD700}Jesus_McWood", 0xFFD700)
    sampAddChatMessage(tag .. " {FFFFFF}Скрипт создан для игроков сервера {FFD700}Advance Role Play", 0xFFD700)
    sampAddChatMessage(tag .. " {FFFFFF}Наш сайт - {FFD700}https://www.scriptscorporated.site/", 0xFFD700)

    sampRegisterChatCommand("gnews", cmd_gnews)

    table1 = inicfg.load(nil, directIni)

    while true do
      wait(0)

      table1 = inicfg.load(nil, directIni)

      if isKeyDown(VK_MENU) and isKeyJustPressed(VK_E) then
          main_window.v = not main_window.v
      end

      imgui.Process = main_window.v or settings_window.v or info_window.v or gnews_window.v or pred_window.v or pred2_window.v or pred3_window.v or pred4_window.v

    end
end

function cmd_gnews()
  gnews_window.v = not gnews_window.v
end

function imgui.OnDrawFrame()

  if main_window.v then -- Главное меню
    imgui.ShowCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(305, 160), imgui.Cond.FirstUseEver) 
    imgui.Begin(u8'Gnews-Assistant | Главное меню', main_window, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar)

    if imgui.Button(u8"Главная " .. fa.ICON_FA_HOME, imgui.ImVec2(140, 38)) then
      main_window.v = true
      sampAddChatMessage(tag .. " {FFFFFF}Вы и так на главной странице!", main_color)
    end

    imgui.SameLine()

    if imgui.Button(u8"Информация " .. fa.ICON_FA_QUESTION_CIRCLE, imgui.ImVec2(140, 38)) then
      main_window.v = false
      info_window.v = not info_window.v
    end

    if imgui.Button(u8"Подача новостей " .. fa.ICON_FA_NEWSPAPER, imgui.ImVec2(140, 38)) then
      main_window.v = false
      gnews_window.v = not gnews_window.v
    end

    imgui.SameLine()

    if imgui.Button(u8"Настройки " .. fa.ICON_FA_COGS, imgui.ImVec2(140, 38)) then
      main_window.v = false
      settings_window.v = not settings_window.v
    end

    if imgui.Button(u8"Перезапустить " .. fa.ICON_FA_SYNC_ALT, imgui.ImVec2(140, 38)) then
      lua_thread.create(function()
        main_window.v = false
        sampAddChatMessage(tag .. " {FFFFFF}Перезапускаем скрипт", 0xFFD700)
          wait(1100)
        thisScript():reload()
      end)
    end

    imgui.SameLine()

    if imgui.Button(u8"Закрыть " .. fa.ICON_FA_WINDOW_CLOSE, imgui.ImVec2(140, 38)) then
      main_window.v = false
    end

    imgui.End()
  end

  if settings_window.v then -- Меню настроек
    imgui.ShowCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(475, 285), imgui.Cond.FirstUseEver) 
    imgui.Begin(u8'Gnews-Assistant | Настройки', settings_window, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar)

    imgui.PushItemWidth(200)
    imgui.InputText(u8"Требования (c мал. буквы!)", treb_buffer)
    imgui.PopItemWidth()

    imgui.SameLine()
    imgui.TextQuestion(u8'Пример отображения в чате: МВД | Требования: 3 года в штате, лицензии и быть законопослушным.')

    imgui.PushItemWidth(200)
    imgui.InputText(u8"Локация проведения (c мал. буквы!)", location_buffer)
    imgui.PopItemWidth()

    imgui.SameLine()
    imgui.TextQuestion(u8'Пример отображения в чате: МВД | Собеседование пройдет в холле департамента Los-Santos. GPS 3-3.')

    imgui.PushItemWidth(100)
    imgui.InputText(u8"Введите сумму аванса (без знака $. Ствьте , вместо .)", avans_buffer)
    imgui.PopItemWidth()

    imgui.SameLine()
    imgui.TextQuestion(u8'Пример отображения в чате: МВД | Текст сообщения. Аванс: 10.000$')

    imgui.PushItemWidth(100)
    imgui.InputText(u8"Ваша организация (CAPS-LOCK-ом)", org_buffer)
    imgui.PopItemWidth()

    imgui.PushItemWidth(100)
    imgui.InputText(u8"GPS", gps_buffer)
    imgui.PopItemWidth()

    imgui.SameLine()
    imgui.TextQuestion(u8'Пример как указать: GPS 3-3')

    imgui.PushItemWidth(50)
    imgui.InputText(u8"Тэг организации в /gnews", tag_buffer)
    imgui.PopItemWidth()

    imgui.SameLine()
    imgui.TextQuestion(u8'Пример отображения в чате: МВД | Текст сообщения')
    imgui.Text("")
    imgui.Separator()
    imgui.Text("")

    table1.config.org = org_buffer.v
    table1.config.tag = tag_buffer.v
    table1.config.avans = avans_buffer.v
    table1.config.location = location_buffer.v
    table1.config.gps = gps_buffer.v
    table1.config.treb = treb_buffer.v

    if imgui.Button(u8"Сохранить " .. fa.ICON_FA_SAVE, imgui.ImVec2(460, 38)) then
      if org_buffer.v == "" then
        sampAddChatMessage(tag .. " {FF0000}Ошибка! {FFFFFF}Вы не заполнили одно из полей.")
      end
      if org_buffer.v == org_buffer.v then
        if inicfg.save(table1, directIni) then
            lua_thread.create(function()
              sampAddChatMessage(tag .. " {FFFFFF}Сохраняем настройки", main_color)
              wait(1000)
              sampAddChatMessage(tag .. " {FFFFFF}Настройки {32CD32}сохранены", main_color)
              settings_window.v = false
          end)
        end
      end
  end

    if imgui.Button(u8"Главная " .. fa.ICON_FA_HOME, imgui.ImVec2(460, 38)) then
      settings_window.v = false
      main_window.v = true
    end

    imgui.End()
  end

  if info_window.v then -- Меню информация
    imgui.ShowCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(405, 263), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Gnews-Assistant | Информация', info_window, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar)

    if imgui.TreeNode(u8'Разработчики') then
      imgui.Separator()
      imgui.Text(u8"Программист: Jesus_McWood")
      imgui.Separator()
      imgui.Text(u8"Дизайнер: Jesus_McWood")
      imgui.Separator()
      imgui.Text(u8"Адаптация: Jesus_McWood")
      imgui.Separator()
      imgui.Text(u8"Руководство: Jesus_McWood")
      imgui.Separator()
      imgui.Text(u8"Идея: Jesus_McWood")
      imgui.Separator()
      imgui.TreePop()
    end

    if imgui.TreeNode(u8'Список изменений (Change Log)') then
      imgui.Separator()
      imgui.Text(u8"[04.12.20]: Релиз скрипта")
      imgui.Separator()
        imgui.TreePop()
    end

    if imgui.TreeNode(u8'О скрипте') then
      imgui.Separator()
      imgui.Text(u8"Привет мой друг, сейчас я расскажу тебе о лучшем на \nAdvance Role Play помощнике собеседований. \nСкрипт поможет абсолютно каждому лидеру и заместителю. \nМы будем часто пополнять его новыми обновлениями. \n\nПриятной игры на Advance Role Play")
      imgui.Separator()
        imgui.TreePop()
    end

    if imgui.Button(u8"Главная " .. fa.ICON_FA_HOME, imgui.ImVec2(390, 38)) then
      info_window.v = false
      main_window.v = true
    end

    imgui.End()
  end

  if gnews_window.v then -- Меню подачи
    imgui.ShowCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(385, 170), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Gnews-Assistant | Подача новостей', gnews_window, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar)

    if imgui.Button(u8"Сообщить о начале \nсобеседования", imgui.ImVec2(180, 45)) then
        gnews_window.v = false
        pred_window.v = not pred_window.v
    end

    imgui.SameLine()

    if imgui.Button(u8"Сообщить о продолжении \nсобеседования", imgui.ImVec2(180, 45)) then
      gnews_window.v = false
      pred2_window.v = not pred2_window.v
    end

    if imgui.Button(u8"Сообщить о конце \nсобеседования", imgui.ImVec2(180, 45)) then
        gnews_window.v = false
        pred3_window.v = not pred3_window.v
    end

    if imgui.Button(u8"Сообщить о ДОД", imgui.ImVec2(180, 45)) then
      gnews_window.v = false
      pred4_window.v = not pred4_window.v
    end

    imgui.Separator()

    if imgui.Button(u8"Главная " .. fa.ICON_FA_HOME, imgui.ImVec2(370, 38)) then
      gnews_window.v = false
      main_window.v = true
    end

    imgui.End()
  end

  if pred_window.v then -- Предпросмотр
    imgui.ShowCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(385, 80), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Gnews-Assistant', pred_window, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar)

    if imgui.Button(u8"Объявить", imgui.ImVec2(180, 45)) then
      pred_window.v = false
      lua_thread.create(function()
        sampSendChat("/n "..u8:decode(mainIni.config.tag).." | Уважаемые жители! Сейчас пройдет собеседование в "..u8:decode(mainIni.config.org)..".")
            wait(1000)
        sampSendChat("/n "..u8:decode(mainIni.config.tag).." | Требования: "..u8:decode(mainIni.config.treb)..".")
            wait(1000)
        sampSendChat("/n "..u8:decode(mainIni.config.tag).." | Собеседование пройдет "..u8:decode(mainIni.config.location)..".") --  Аванс: "..u8:decode(mainIni.config.avans)..".")
      end)
    end
  imgui.SameLine()
  if imgui.Button(u8"Не объявлять", imgui.ImVec2(180, 45)) then
    pred_window.v = false
    gnews_window.v = not gnews_window.v
  end

    imgui.End()
  end

  if pred2_window.v then -- Предпросмотр
    imgui.ShowCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(385, 80), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Gnews-Assistant', pred2_window, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar)

    if imgui.Button(u8"Объявить", imgui.ImVec2(180, 45)) then
      pred2_window.v = false
      lua_thread.create(function()
        sampSendChat("/n "..u8:decode(mainIni.config.tag).." | Собеседование в "..u8:decode(mainIni.config.org).." продолжается. Аванс: "..u8:decode(mainIni.config.avans).."$ ")
      end)
    end
  imgui.SameLine()
  if imgui.Button(u8"Не объявлять", imgui.ImVec2(180, 45)) then
    pred2_window.v = false
    gnews_window.v = not gnews_window.v
  end

    imgui.End()
  end

  if pred3_window.v then -- Предпросмотр
    imgui.ShowCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(385, 80), imgui.Cond.FirstUseEver)
    imgui.Begin(u8'Gnews-Assistant', pred3_window, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar)

    if imgui.Button(u8"Объявить", imgui.ImVec2(180, 45)) then
      pred3_window.v = false
      lua_thread.create(function()
        sampSendChat("/n "..u8:decode(mainIni.config.tag).." | Собеседование в "..u8:decode(mainIni.config.org).." окончилось")
      end)
    end
  imgui.SameLine()
  if imgui.Button(u8"Не объявлять", imgui.ImVec2(180, 45)) then
    pred3_window.v = false
    gnews_window.v = not gnews_window.v
  end

    imgui.End()
  end
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
 
Последнее редактирование: