из-за чего краш?

Kegwineye.

Участник
Автор темы
478
20
GTA_ San Andreas 05.10.2022 21_18_22.png


суть в названии
 
Решение
Куда уж точнее, у тебя не установлена папка resource и шрифты
ошибка с отсутсвием шрифта выглядит по другому, там дллка триггериится вроде бы на имгуишную функцию создания шрифта, тут скорее всего проблема возникла из за того что нет imgui.End() для imgui.Begin()
или нет imgui.EndChild() для imgui.BeginChild()

upd. я идиот потому что не додумался до этого раньше:
1. ищем в инете imgui.cpp версии 1.52(именнo такая версия в имгуи)
2. смотрим на номер строки в ошибке (2787) и ищем эту строку в imgui.cpp, читаем код и понимаем в чем проблема https://github.com/Twinklebear/zed-vive-mr/blob/master/imgui-1.52/imgui.cpp#L2785

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,776
11,234
Куда уж точнее, у тебя не установлена папка resource и шрифты
ошибка с отсутсвием шрифта выглядит по другому, там дллка триггериится вроде бы на имгуишную функцию создания шрифта, тут скорее всего проблема возникла из за того что нет imgui.End() для imgui.Begin()
или нет imgui.EndChild() для imgui.BeginChild()

upd. я идиот потому что не додумался до этого раньше:
1. ищем в инете imgui.cpp версии 1.52(именнo такая версия в имгуи)
2. смотрим на номер строки в ошибке (2787) и ищем эту строку в imgui.cpp, читаем код и понимаем в чем проблема https://github.com/Twinklebear/zed-vive-mr/blob/master/imgui-1.52/imgui.cpp#L2785
 

Kegwineye.

Участник
Автор темы
478
20
5.

ошибка с отсутсвием шрифта выглядит по другому, там дллка триггериится вроде бы на имгуишную функцию создания шрифта, тут скорее всего проблема возникла из за того что нет imgui.End() для imgui.Begin()
или нет imgui.EndChild() для imgui.BeginChild()

upd. я идиот потому что не додумался до этого раньше:
1. ищем в инете imgui.cpp версии 1.52(именнo такая версия в имгуи)
2. смотрим на номер строки в ошибке (2787) и ищем эту строку в imgui.cpp, читаем код и понимаем в чем проблема https://github.com/Twinklebear/zed-vive-mr/blob/master/imgui-1.52/imgui.cpp#L2785
так-с,
IM_ASSERT(g.CurrentWindowStack.Size == 1); // Mismatched Begin()/End() calls
if (g.CurrentWindow && !g.CurrentWindow->Accessed)
g.CurrentWindow->Active = false;
ImGui::End();
и что мне делать?
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,776
11,234
5.


так-с,
IM_ASSERT(g.CurrentWindowStack.Size == 1); // Mismatched Begin()/End() calls
if (g.CurrentWindow && !g.CurrentWindow->Accessed)
g.CurrentWindow->Active = false;
ImGui::End();
и что мне делать?
тебе же черным по белому написано что «begin && end mismatch".
и зачем ты создал тему еще раз, если вчера тебе уже ответили и ты даже поставил решение?
 

Kegwineye.

Участник
Автор темы
478
20
тебе же черным по белому написано что «begin && end mismatch".
и зачем ты создал тему еще раз, если вчера тебе уже ответили и ты даже поставил решение?
я понял как исправить, благодарю.

тебе же черным по белому написано что «begin && end mismatch".
и зачем ты создал тему еще раз, если вчера тебе уже ответили и ты даже поставил решение?
почему {screen}, {my:id}, {my:nick} не работает?

Lua:
local imgui = require('imgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local sampev = require 'lib.samp.events'
local keys = require 'vkeys'
local list = {}
local inicfg = require 'inicfg'
local fontsize = nil
local menu = 0
local slider = imgui.ImFloat(0)
local fa = require 'fAwesome5' -- ICONS LIST: https://fontawesome.com/v5.15/icons?d=gallery&s=solid&m=free
        
local localwindow = imgui.ImBool(false)
local windowleader = imgui.ImBool(false)
local newfindwindow = imgui.ImBool(false)
local statisticwindowlite = imgui.ImBool(false)
local statisticwindowhight = imgui.ImBool(false)


local mainlocalcolor = '{0000CD}'
local window = imgui.ImBool(false)
local binder_delay = imgui.ImInt(2500)
local text_binder = imgui.ImBuffer(65536)
local binder_name = imgui.ImBuffer(35)

local colors = imgui.GetStyle().Colors;
local icol = imgui.Col
local ImVec4 = imgui.ImVec4

local cfg = inicfg.load({
    Binds_Name = {},
    Binds_Action = {},
    Binds_Deleay = {},
}, "Onfroy Family Helper")

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('opw', openmainwindow)
    sampRegisterChatCommand('leaders', function() sampSendChat("/leaders") ; windowleader.v = not windowleader.v end)
    sampRegisterChatCommand('stats', function() statisticwindowhight.v = not statisticwindowhight.v end)
    imgui.Process = false
    localwindow.v = false
    windowleader.v = false  --show window on start
    while true do
        wait(0)
        imgui.Process = localwindow.v or windowleader.v or statisticwindowhight.v
    end
end

function openmainwindow()
    localwindow.v = not localwindow.v
end

function imgui.OnDrawFrame()
    if localwindow.v then
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 700, 500 -- WINDOW SIZE
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2 - sizeX / 2, resY / 2 - sizeY / 2), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        imgui.Begin('Window Title', localwindow, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoResize)
            imgui.SetCursorPosX(70)
            imgui.SetCursorPosY(450)
            imgui.PushFont(fontsizefa25)
            imgui.Text(fa.ICON_FA_QUESTION_CIRCLE ..'')
            imgui.PopFont()
            imgui.Tooltip(u8'Актуальная версия скрипта 0.1')
            imgui.SetCursorPosX(240)
            imgui.SetCursorPosY(5)
            imgui.PushFont(fontsize)
            imgui.TextColoredRGB(mainlocalcolor ..'ONFROY HELPER')
            imgui.PopFont()
            imgui.SetCursorPosY(10)
            imgui.SetCursorPosX(650)
            if imgui.Button(fa.ICON_FA_TIMES ..'', imgui.ImVec2(40, 40)) then localwindow.v = not localwindow.v end
            imgui.SetCursorPosY(10)
            imgui.PushStyleVar(imgui.StyleVar.FrameRounding, 5)
            imgui.SetCursorPosY(10)
            if imgui.Button(u8"Основные", imgui.ImVec2(180, 40)) then menu = 1 end
            imgui.SetCursorPosY(60)
            if imgui.Button(u8"Другое", imgui.ImVec2(180, 40)) then menu = 2 end
            imgui.SetCursorPosY(110)
            if imgui.Button(u8"Улучшения", imgui.ImVec2(180, 40)) then menu = 3 end
            imgui.SetCursorPosY(160)
            if imgui.Button(u8"Биндер", imgui.ImVec2(180, 40)) then menu = 4 end
            imgui.PopStyleVar(1)
            imgui.SameLine()
        if menu == 0 then
            imgui.SetCursorPosY(60)
            imgui.BeginChild("child2", imgui.ImVec2(480, 430), false)
            imgui.CenterText(u8"Добро пожаловать на открытое бета-тестирование хелпера от семьи Onfroy!")
            imgui.Text(u8" Мы играем на проекте Online RP 02, приглашаем вас к себе на второй сервер\n   При регестрации указывай ник Handerson_Onfroy, а так же /mn - 11 - #onfroy")
            imgui.EndChild()
        end
            imgui.SameLine()
        if menu == 1 then
            imgui.SetCursorPosY(60)
            imgui.BeginChild("child2", imgui.ImVec2(480, 430), false)
            imgui.Text("1")
            imgui.EndChild()
        end
        imgui.SameLine()
        if menu == 2 then
            imgui.SetCursorPosY(60)
            imgui.BeginChild("child2", imgui.ImVec2(480, 430), false)
            imgui.Text("2")
            imgui.EndChild()
        end
        imgui.SameLine()
        if menu == 3 then
            imgui.SetCursorPosY(60)
            imgui.BeginChild("child2", imgui.ImVec2(480, 430), false)
            imgui.Text("3")
            imgui.EndChild()
        end
        imgui.SameLine()
        if menu == 4 then
            imgui.SetCursorPosY(60)
            imgui.BeginChild("child2", imgui.ImVec2(480, 430), false)
            imgui.CenterTextColoredRGB('Меню ваших биндов')
            imgui.Separator()
            if #cfg.Binds_Name > 0 then
            for key_bind, name_bind in pairs(cfg.Binds_Name) do
            if imgui.Button(u8(name_bind)..'##'..key_bind, imgui.ImVec2(312, 30)) then
            play_bind(key_bind)
            
            end
            imgui.SameLine()
            if imgui.Button(fa.ICON_FA_PEN..'##'..key_bind, imgui.ImVec2(30, 30)) then
            EditOldBind = true
            name_old_bild = cfg.Binds_Name[key_bind]
            getpos = key_bind
            binder_delay.v = cfg.Binds_Deleay[key_bind]
            local returnwrapped = tostring(cfg.Binds_Action[key_bind]):gsub('~', '\n')
            text_binder.v = u8(returnwrapped)
            binder_name.v = tostring(u8(cfg.Binds_Name[key_bind]))
            imgui.OpenPopup(u8'Биндер')
            end
            imgui.SameLine()
            if imgui.Button(fa.ICON_FA_TRASH..'##'..key_bind, imgui.ImVec2(30, 30)) then
            GHsms('Бинд {0000CD}«'..cfg.Binds_Name[key_bind]..'»{FFFFFF} удалён!')
            table.remove(cfg.Binds_Name, key_bind)
            table.remove(cfg.Binds_Action, key_bind)
            table.remove(cfg.Binds_Deleay, key_bind)
            inicfg.save(cfg, 'Onfroy Family Helper.ini')
            end
            end
            else
            imgui.CenterTextColoredRGB('Здесь пока нету Ваших биндов.')
            imgui.CenterTextColoredRGB('Их можно создать!')
            imgui.SetCursorPosX((imgui.GetWindowWidth() - 25) / 2)
            end
            imgui.Separator()
            if imgui.Button(fa.ICON_FA_PLUS_CIRCLE..u8' Создать бинд', imgui.ImVec2(-1,30)) then
            imgui.OpenPopup(u8'Биндер')
            binder_delay.v = 2500
            end


            if imgui.BeginPopupModal(u8'Биндер', false, imgui.WindowFlags.NoResize + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoTitleBar) then
            imgui.BeginChild("##EditBinder", imgui.ImVec2(630, 367), true)
            imgui.PushItemWidth(150)
            imgui.InputInt(u8("Задержка между строками в миллисекундах"), binder_delay); imgui.SameLine(); imgui.Vopros(); imgui.Hint(u8'Не больше 60.000 ms!\n(1 sec = 1000 ms)')
            imgui.PopItemWidth()
            if binder_delay.v <= 0 then
            binder_delay.v = 1
            elseif binder_delay.v >= 60001 then
            binder_delay.v = 60000
            end
            imgui.SameLine()
            if imgui.Button(u8'Локальные тэги##LocalTag', imgui.ImVec2(140,20)) then
            imgui.OpenPopup(u8'Локальные тэги')
            end
            localtag()
            imgui.InputTextMultiline("##EditMultiline", text_binder, imgui.ImVec2(-1, 250))
            imgui.Text(u8'Название бинда (обязательно):'); imgui.SameLine()
            imgui.PushItemWidth(200)
            imgui.InputText("##binder_name", binder_name)
            imgui.PopItemWidth()

            if #binder_name.v > 0 and #text_binder.v > 0 then
            imgui.SameLine()
            if imgui.Button(u8'Сохранить##bind1', imgui.ImVec2(-1,20)) then
            if not EditOldBind then
            refresh_text = text_binder.v:gsub("\n", "~")
            table.insert(cfg.Binds_Name, u8:decode(binder_name.v))
            table.insert(cfg.Binds_Action, u8:decode(refresh_text))
            table.insert(cfg.Binds_Deleay, binder_delay.v)
            if inicfg.save(cfg, 'Onfroy Family Helper.ini') then
            GHsms('Бинд {0000CD}«'..u8:decode(binder_name.v)..'»{FFFFFF} успешно добавлен!')
            binder_name.v, text_binder.v = '', ''
            end
            imgui.CloseCurrentPopup()
            else
            refresh_text = text_binder.v:gsub("\n", "~")
            table.insert(cfg.Binds_Name, getpos, u8:decode(binder_name.v))
            table.insert(cfg.Binds_Action, getpos, u8:decode(refresh_text))
            table.insert(cfg.Binds_Deleay, getpos, binder_delay.v)
            table.remove(cfg.Binds_Name, getpos + 1)
            table.remove(cfg.Binds_Action, getpos + 1)
            table.remove(cfg.Binds_Deleay, getpos + 1)
            if inicfg.save(cfg, 'Onfroy Family Helper.ini') then
            GHsms('Бинд {0000CD}«'..name_old_bild..'»{FFFFFF} успешно отредактирован!')
            binder_name.v, text_binder.v = '', ''
            end
            EditOldBind = false
            imgui.CloseCurrentPopup()
            end
            end
            else
            imgui.SameLine()
            imgui.DisableButton(u8'Сохранить##bind2', imgui.ImVec2(-1,20))
            imgui.Hint(u8'Заполнены не все пункты!')
            end

            if imgui.Button(u8'Закрыть', imgui.ImVec2(-1,20)) then
            if not EditOldBind then
            imgui.CloseCurrentPopup()
            binder_name.v, text_binder.v = '', ''
            else
            EditOldBind = false
            imgui.CloseCurrentPopup()
            binder_name.v, text_binder.v = '', ''
            end
            end
            imgui.EndChild()
            imgui.EndPopup()
        end
            imgui.End()
        end
        imgui.End()
    end
    if windowleader.v then
        imgui.SetNextWindowPos(imgui.ImVec2(350.0, 250.0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(280.0, 70.0), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Лидеры в сети', windowleader, imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoTitleBar)
        if list[1] ~= nil then
            imgui.SetCursorPosX(40)
            imgui.Text(u8'Организация')
            imgui.SameLine()
            imgui.SetCursorPosX(185)
            imgui.Text(u8'Звание')
            imgui.SameLine()
            imgui.SetCursorPosX(340)
            imgui.Text(u8'Ник')
            imgui.SameLine()
            imgui.SetCursorPosX(450)
            imgui.Text(u8'Номер')
            imgui.Separator()
            imgui.Separator()
            for i = 1, #list do
                
                local a,b,c,e,f = list[i]:match("[}](.+)[-](.+)[-](.+)[-](.+)")
                imgui.SetCursorPosX(10)
                if imgui.Text(u8(a)) then end
                imgui.Columns()
                imgui.SameLine()
                imgui.SetCursorPosX(145)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(150)
                imgui.Text(u8(b))
                imgui.SameLine()
                imgui.SetCursorPosX(275)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(280)
                imgui.Text(u8(c))
                imgui.SameLine()
                imgui.SetCursorPosX(445)
                imgui.VerticalSeparator()
                imgui.SetCursorPosX(450)
                if imgui.Link(u8(e)) then
                    setClipboardText(u8(e))
                end
            end
        end

        imgui.End()
    end
    if statisticwindowhight.v then
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 500, 700 -- WINDOW SIZE
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2 - sizeX / 2, resY / 2 - sizeY / 2), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        imgui.Begin('##huyna', statisticwindowhight, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoResize)
        imgui.End()
    end
end

function imgui.Vopros()
    imgui.TextDisabled(fa.ICON_FA_QUESTION_CIRCLE)
end

function imgui.Hint(text, delay, action)
    if imgui.IsItemHovered() then
        if go_hint == nil then go_hint = os.clock() + (delay and delay or 0.0) end
        local alpha = (os.clock() - go_hint) * 5 -- скорость появления
        if os.clock() >= go_hint then
            imgui.PushStyleVar(imgui.StyleVar.WindowPadding, imgui.ImVec2(10, 10))
            imgui.PushStyleVar(imgui.StyleVar.Alpha, (alpha <= 1.0 and alpha or 1.0))
            imgui.PushStyleColor(imgui.Col.PopupBg, imgui.GetStyle().Colors[imgui.Col.PopupBg])
            imgui.BeginTooltip()
            imgui.PushTextWrapPos(700)
            imgui.TextColored(imgui.GetStyle().Colors[imgui.Col.ButtonActive], fa.ICON_FA_INFO_CIRCLE..u8' Подсказка:')
            imgui.TextUnformatted(text)
            if action ~= nil then
                imgui.TextColored(imgui.GetStyle().Colors[imgui.Col.TextDisabled], '\n'..fa.ICON_FA_SHARE..' '..action)
            end
            if not imgui.IsItemVisible() and imgui.GetStyle().Alpha == 1.0 then go_hint = nil end
            imgui.PopTextWrapPos()
            imgui.EndTooltip()
            imgui.PopStyleColor()
            imgui.PopStyleVar(2)
        end
    end
end

function imgui.TextColoredRGB(text)
    local style = imgui.GetStyle()
    local colors = style.Colors
    local ImVec4 = imgui.ImVec4

    local explode_argb = function(argb)
        local a = bit.band(bit.rshift(argb, 24), 0xFF)
        local r = bit.band(bit.rshift(argb, 16), 0xFF)
        local g = bit.band(bit.rshift(argb, 8), 0xFF)
        local b = bit.band(argb, 0xFF)
        return a, r, g, b
    end

    local getcolor = function(color)
        if color:sub(1, 6):upper() == 'SSSSSS' then
            local r, g, b = colors[1].x, colors[1].y, colors[1].z
            local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
            return ImVec4(r, g, b, a / 255)
        end
        local color = type(color) == 'string' and tonumber(color, 16) or color
        if type(color) ~= 'number' then return end
        local r, g, b, a = explode_argb(color)
        return imgui.ImColor(r, g, b, a):GetVec4()
    end

    local render_text = function(text_)
        for w in text_:gmatch('[^\r\n]+') do
            local text, colors_, m = {}, {}, 1
            w = w:gsub('{(......)}', '{%1FF}')
            while w:find('{........}') do
                local n, k = w:find('{........}')
                local color = getcolor(w:sub(n + 1, k - 1))
                if color then
                    text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
                    colors_[#colors_ + 1] = color
                    m = n
                end
                w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
            end
            if text[0] then
                for i = 0, #text do
                    imgui.TextColored(colors_[i] or colors[1], u8(text[i]))
                    imgui.SameLine(nil, 0)
                end
                imgui.NewLine()
            else imgui.Text(u8(w)) end
        end
    end

    render_text(text)
end

function imgui.DisableButton(text, size)
    imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0.0, 0.0, 0.0, 0.2))
    imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(0.0, 0.0, 0.0, 0.2))
    imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(0.0, 0.0, 0.0, 0.2))
    local button = imgui.Button(text, size)
    imgui.PopStyleColor(3)
    return button
end

function imgui.CenterTextColoredRGB(text)
    local width = imgui.GetWindowWidth()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local ImVec4 = imgui.ImVec4

    local explode_argb = function(argb)
    local a = bit.band(bit.rshift(argb, 24), 0xFF)
    local r = bit.band(bit.rshift(argb, 16), 0xFF)
    local g = bit.band(bit.rshift(argb, 8), 0xFF)
    local b = bit.band(argb, 0xFF)
    return a, r, g, b
    end

    local getcolor = function(color)
    if color:sub(1, 6):upper() == 'SSSSSS' then
    local r, g, b = colors[1].x, colors[1].y, colors[1].z
    local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
    return ImVec4(r, g, b, a / 255)
    end
    local color = type(color) == 'string' and tonumber(color, 16) or color
    if type(color) ~= 'number' then return end
    local r, g, b, a = explode_argb(color)
    return imgui.ImColor(r, g, b, a):GetVec4()
    end

    local render_text = function(text_)
    for w in text_:gmatch('[^\r\n]+') do
    local textsize = w:gsub('{.-}', '')
    local text_width = imgui.CalcTextSize(u8(textsize))
    imgui.SetCursorPosX( width / 2 - text_width .x / 2 )
    local text, colors_, m = {}, {}, 1
    w = w:gsub('{(......)}', '{%1FF}')
    while w:find('{........}') do
    local n, k = w:find('{........}')
    local color = getcolor(w:sub(n + 1, k - 1))
    if color then
    text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
    colors_[#colors_ + 1] = color
    m = n
    end
    w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
    end
    if text[0] then
    for i = 0, #text do
    imgui.TextColored(colors_[i] or colors[1], u8(text[i]))
    imgui.SameLine(nil, 0)
    end
    imgui.NewLine()
    else
    imgui.Text(u8(w))
    end
    end
    end
    render_text(text)
end

function imgui.CenterText(text)
    imgui.SetCursorPosX(imgui.GetWindowSize().x / 2 - imgui.CalcTextSize(text).x / 2)
    imgui.Text(text)
end

function onWindowMessage(msg, wparam, lparam)
    if msg == 0x100 or msg == 0x101 then
        if (wparam == keys.VK_ESCAPE and windowleader.v) and not isPauseMenuActive() then
            consumeWindowMessage(true, false)
            if msg == 0x101 then
                windowleader.v = false
            end
        end
    end
end

function imgui.VerticalSeparator()
    local p = imgui.GetCursorScreenPos()
    imgui.GetWindowDrawList():AddLine(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x, p.y + imgui.GetContentRegionMax().y), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.Separator]))
end

function imgui.Link(label, description)

    local size = imgui.CalcTextSize(label)
    local p = imgui.GetCursorScreenPos()
    local p2 = imgui.GetCursorPos()
    local result = imgui.InvisibleButton(label, size)

    imgui.SetCursorPos(p2)

    if imgui.IsItemHovered() then
        if description then
            imgui.BeginTooltip()
            imgui.PushTextWrapPos(600)
            imgui.TextUnformatted(description)
            imgui.PopTextWrapPos()
            imgui.EndTooltip()

        end

        imgui.TextColored(imgui.GetStyle().Colors[imgui.Col.CheckMark], label)
        imgui.GetWindowDrawList():AddLine(imgui.ImVec2(p.x, p.y + size.y), imgui.ImVec2(p.x + size.x, p.y + size.y), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.CheckMark]))

    else
        imgui.TextColored(imgui.GetStyle().Colors[imgui.Col.CheckMark], label)
    end

    return result
end

if sampevcheck then
    function sampev.onSendChat(msg)
        if msg:find('{my:name}') then
            local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
            local returnMsg = msg:gsub('{my:name}', rpNick(myid))
            sampSendChat(returnMsg)
            return false
        end
        if msg:find('{my:id}') then
            local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
            local returnMsg = msg:gsub('{my:id}', myid)
            sampSendChat(returnMsg)
            return false
        end
        if msg:find('{my:rank}') then
            local returnMsg = msg:gsub('{my:rank}', cfg.Settings.rank)
            sampSendChat(returnMsg)
            return false
        end
        if msg:find('{time}') then
            local returnMsg = msg:gsub('{time}', '/time')
            sampSendChat(returnMsg)
            return false
        end
        if msg:find('{screen}') then
            Screen()
            local returnMsg = msg:gsub('{screen}', '')
            sampSendChat(returnMsg)
            return false
        end
    end
end

function rpNick(id)
    local nick = sampGetPlayerNickname(id)
    if nick:match('_') then return nick:gsub('_', ' ') end
    return nick
end

function imgui.Tooltip(text)
    if imgui.IsItemHovered() then
       imgui.BeginTooltip()
       imgui.Text(text)
       imgui.EndTooltip()
    end
end

function GHsms(text)
    sampAddChatMessage("{0000CD}[Onfroy Family Helper] {FFFFFF}"..text, 0x0000CD)
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if title:find("Лидеры в сети") then
        list = {}
        for v in string.gmatch(text, '[^\n]+') do
            if not v:find("Организация") then
                table.insert(list, v)
            end
        end
        sampSendDialogResponse(id, 1)
        windowleader.v = true
        return false
    end
end

local fa_font = nil
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })
function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig()
        font_config.MergeMode = true
        
        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fa-solid-900.ttf', 13.0, font_config, fa_glyph_ranges)
        if fontsize == nil then
            fontsizefa25 = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fa-solid-900.ttf', 25.0, font_config2, fa_glyph_ranges)
            fontsize = imgui.GetIO().Fonts:AddFontFromFileTTF(getFolderPath(0x14) .. '\\trebucbd.ttf', 55.0, nil, imgui.GetIO().Fonts:GetGlyphRangesCyrillic()) -- вместо 30 любой нужный размер
        end
    end
end

if not doesFileExist(getWorkingDirectory()..'/config/Medical Helper.ini') then
    if inicfg.save(cfg, 'Onfroy Family Helper.ini') then log('Директория "Onfroy Family Helper.ini" была создана!') end
end
if not doesFileExist(getWorkingDirectory() .. "/resource/fonts/fa-solid-900.ttf") then
    GHsms("Отсутствует файл шрифта fa-solid-900.ttf. Пытаюсь его установить.")
    createDirectory(getWorkingDirectory() .. "/resource/fonts/")
    DownloadFile('https://github.com/FortAwesome/Font-Awesome/raw/master/webfonts/fa-solid-900.ttf', getWorkingDirectory().."/resource/fonts/fa-solid-900.ttf")
    GHsms('Шрифт "fa-solid-900.ttf" готов! Перезапускаю скрипт.')
    thisScript():reload()
    return false
end

function Screen()
    lua_thread.create(function()
        wait(500)
        setVirtualKeyDown(VK_F8, true)
        wait(10)
        setVirtualKeyDown(VK_F8, false)
    end)
end

function localtag()
if imgui.BeginPopupModal(u8'Локальные тэги', false, imgui.WindowFlags.NoResize + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoTitleBar) then
    imgui.CenterTextColoredRGB('Тэги:')
    --
    if imgui.Button('{my:name}') then setClipboardText('{my:name}'); GHsms('Тэг "{my:name}" скопирован в буфер обмена!') else imgui.Hint(u8'Нажмите, чтобы скопировать') end; imgui.SameLine(); imgui.TextColoredRGB('Выведет Ваше имя в РП формате')
    --
    if imgui.Button('{my:id}') then setClipboardText('{my:id}'); GHsms('Тэг "{my:id}" скопирован в буфер обмена!') else imgui.Hint(u8'Нажмите, чтобы скопировать') end; imgui.SameLine(); imgui.TextColoredRGB('Выведет Ваш Ид')
    --
    if imgui.Button('{time}') then setClipboardText('{time}'); GHsms('Тэг "{time}" скопирован в буфер обмена!') else imgui.Hint(u8'Нажмите, чтобы скопировать.\nВ биндере использовать на новой строчке!') end; imgui.SameLine(); imgui.TextColoredRGB('Напишет "/time" в чат')
    --
    if imgui.Button('{screen}') then setClipboardText('{screen}'); GHsms('Тэг "{screen}" скопирован в буфер обмена!') else imgui.Hint(u8'Нажмите, чтобы скопировать.\nВ биндере советую использовать в строчке с текстом, иначе будет пустая строка в чате!') end; imgui.SameLine(); imgui.TextColoredRGB('Делает скриншот экрана (F8)')
    --
    if imgui.Button(u8'Закрыть##LocalTag', imgui.ImVec2(-1,20)) then
        imgui.CloseCurrentPopup()
    end
    imgui.EndPopup()
end
end

function play_bind(num)
    lua_thread.create(function()
        if num ~= -1 then
            for bp in cfg.Binds_Action[num]:gmatch('[^~]+') do
                sampSendChat(u8:decode(tostring(bp)))
                wait(cfg.Binds_Deleay[num])
            end
            num = -1
        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 = 6.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()
 
Последнее редактирование: