mimgui чайд помогите

Arizona Mobile 3

Потрачен
Автор темы
117
12
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Версия MoonLoader
Другое
добавил чайд в мимгуи помогите настроить размеры и тд крч чтоьы меню в игре выглядило красиво и чайд двигался нормально за ползунком
Lua:
local ffi = require "ffi"
local imgui = require "mimgui"
local encoding = require "encoding"
encoding.default = "CP1251"
local u8 = encoding.UTF8
local new = imgui.new
local faicons = require("fAwesome6")
local new, str = imgui.new, ffi.string



-- вписываем всё необходимое


local playerid = select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))
local name = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(playerPed)))


local tab = 1
local WinState = new.bool()

imgui.OnFrame(function()
    return WinState[0]
end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(500, 700), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin(u8"Zam-Leader Helper", WinState)
    
    imgui.Text(u8'Zam-Leader Helper')
    imgui.Text(u8'Для Arizona Mobile')

    if imgui.Button(faicons("user") .. u8" Главная", imgui.ImVec2(160, 60)) then
        tab = 1
    end

    if imgui.Button(faicons("gear") .. u8" Настройки", imgui.ImVec2(160, 60)) then
        tab = 2
    end

    if imgui.Button(faicons("sliders") .. u8" Биндер", imgui.ImVec2(160, 60)) then
        tab = 3
    end

    if imgui.Button(faicons("desktop") .. u8" Info", imgui.ImVec2(160, 60)) then
        tab = 4
    end

local size = imgui.GetWindowSize();
imgui.SetCursorPos(imgui.ImVec2(175, 33))
if (imgui.BeginChild('content', size - imgui.ImVec2(800, 800), true)) then
 
        if tab == 1 then
        imgui.Text(u8'Ваш ник ' ..name.. ' [  ' ..playerid.. ' ] ')
            -- Содержимое вкладки 1
        elseif tab == 2 then
            -- Содержимое вкладки 2

        elseif tab == 3 then
        
        elseif tab == 4 then
        
        end
        imgui.EndChild();
        end
    imgui.End()
end)

function main()
    sampRegisterChatCommand("lh", function()
        WinState[0] = not WinState[0]
    end)
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
    local config = imgui.ImFontConfig()
    config.MergeMode = true
    config.PixelSnapH = true
    iconRanges = imgui.new.ImWchar[3](faicons.min_range, faicons.max_range, 0)
    imgui.GetIO().Fonts:AddFontFromMemoryCompressedBase85TTF(faicons.get_font_data_base85("solid"), 14, config, iconRanges)
end)
 

kyrtion

Известный
1,025
375
Общем, все что в вашем коде:
1. Меньше лишних переносов пустых строках. (там где строка без значений). Рекомендую оставлять пустым не более 2 строка.
2. Соблюдай табуляция, за несоблюдение вряд ли понравится, и имеют ли смелости нормально прочитать ваш код. Рекомендую указать пробельные табуляция, это решит проблему в гитхаб (если таб, то в гитхаб сделает отступ таба в 2 раза, а это не читабельно).
3. PLAYER_PED или playerPed? Выбираете, используете раз и навсегда. В VSC аддон типизированного MoonLoader предлагает ставить только PLAYER_PED.
4. Убираем дубль переменные new. str не используется переменную, поэтому закомментировал, когда придет время, раскроешь и используешь переменную.
5. Тебе еще понять что такое стиль кода snake-case, тогда в скором времени будешь использовать не playerid, но и playerId.
6. Выбираете кавычки для написание кода, двух кавычки или одну? Если хочешь одно кавычки, то меняете все кавычек в коде. Двухсторонные используется если в строковое значение содержится односторонные кавычки. Например, "Привет, 'игрок'".
7. Переменная player в mimgui не используется, поэтому убираю.
8. Фраза name - это ваши имя, но не игровой никнейм, переименовал в nickname. tab изменил на currentTab - теперь легче соображаешь что это текущая вкладка в числовой значении.
9. Точка запятая в конце строка? Если считаешь это обязательно, вставляешь все точка запятой строка.
10. Все содержимое информация складывал все в таблице.
11. Используйте string.format если используешь много операции ".." для строковое значении.
12. require 'либ' или require('либ')? Используешь раз и навсегда, не дайте пользователям портить в глазах за чтение кода.

Что же в коде связанно с мунлоадером:
1. Когда создаете окно или фрейм мимгуи, то прежде запускать окно, нужно сначала прописывать imgui.OnInitialize, а потом уже запускать окно.
2. Если хочешь чтобы чилд запоминало когда размер окно менялось - тогда нужно указать отступ окно и занять всех размером чилда. Или второй вариант, не давать менять окно, но и ставить автоматический размер окно - указываешь imgui.Begin() в 3 аргументе: imgui.WindowFlags.AlwaysAutoResize

Lua:
local imgui = require('mimgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local fa = require('fAwesome6')
local new = imgui.new
-- local ffi = require 'ffi'
-- local new, str = imgui.new, ffi.string

local details = {
    myPlayerId = select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)),
    myNickname = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))),
    currentTab = 1,
    tabs = {
        { id = 1, title = u8' Главная',    icon = 'user'   , size = { 160, 60 } },
        { id = 2, title = u8' Настройки',  icon = 'gear'   , size = { 160, 60 } },
        { id = 3, title = u8' Биндер',     icon = 'sliders', size = { 160, 60 } },
        { id = 4, title = u8' Информация', icon = 'desktop', size = { 160, 60 } },
    },
    winState = new.bool(true)
}

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil

    local config = imgui.ImFontConfig()
    config.MergeMode = true
    config.PixelSnapH = true
    iconRanges = imgui.new.ImWchar[3](fa.min_range, fa.max_range, 0)
    imgui.GetIO().Fonts:AddFontFromMemoryCompressedBase85TTF(fa.get_font_data_base85('solid'), 14, config, iconRanges)
end)

local windowsFrame = imgui.OnFrame(function() return details.winState[0] end, function()
    -- Стили текущее окно
    local stylesVarWin = {
        imgui.PushStyleVarVec2(imgui.StyleVar.WindowPadding, imgui.ImVec2(30, 29)),
    }
    imgui.PopStyleVar(#stylesVarWin)

    imgui.SetNextWindowPos(imgui.ImVec2(500, 700), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin('Zam-Leader Helper', details.winState --[[, imgui.WindowFlags.AlwaysAutoResize ]])

    imgui.Text('Zam-Leader Helper')
    imgui.Text(u8'Специально для Arizona Mobile')

    for i = 1, #details.tabs do
        if details.tabs[i] then
            if imgui.Button(
                fa(details.tabs[i].icon) .. details.tabs[i].title,
                imgui.ImVec2(details.tabs[i].size[1], details.tabs[i].size[2])
            ) then
                details.currentTab = details.tabs[i].id
                -- Если хочешь чтобы кнопочки соединило в одной строке
                -- Лишнее? Убираете снизу:
                if i ~= #details.tabs then imgui.SameLine() end
            end
        end
    end

    -- Если будет две решетки в заголовки окно, превращает в
    -- идентификатором (ID) фрейм и не будет отобразить строковое значение в чилд
    if imgui.BeginChild('##begin_child_content', imgui.ImVec2( imgui.GetWindowContentRegionMax() ), true) then
        if details.currentTab == 1 then
            imgui.Text( string.format(u8'Ваш игровой никнейм: %s [%d]', details.myNickname, details.myPlayerId) )
        elseif details.currentTab == 2 then
            -- Содержимое вкладки 2
        elseif details.currentTab == 3 then
            -- Содержимое вкладки 3
        elseif details.currentTab == 4 then
            -- Содержимое вкладки 4
        end
        imgui.EndChild()
    end

    imgui.End()
end)

function main()
    sampRegisterChatCommand('lh', function() details.winState[0] = not details.winState[0] end)
end