Гайд Mimgui для чайников. Описание, пояснения, шаблоны

Tony Spatulata

Новичок
6
1
@Tony Spatulata ты не подключил ffi, а ещё в начале куча лишнего
Lua:
require 'lib.moonloader'
local imgui = require 'mimgui'
local ffi = require 'ffi'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8

local new = imgui.new
local WinState = new.bool() -- создаём буффер для открытия окна
local exampleBuf = new.char[256]()

imgui.OnFrame(function() return WinState[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) -- отвечает за положение окна на экране
        imgui.SetNextWindowSize(imgui.ImVec2(900, 680), imgui.Cond.Always) -- отвечает за размер окна
        imgui.Begin(u8'Основное', WinState, imgui.WindowFlags.NoResize) -- отвечает за отображение окна, его заголовок и флаги
        if imgui.CollapsingHeader(u8'Гайд по использованию') then
            imgui.TextWrapped(u8'Гайд потом')
            imgui.Separator()
           
        end
        local w = {
            first = 120,
            second = 120,
        }
        -- == Первая строка
        imgui.Columns(3) -- 3 количество столбцов
        imgui.Text(u8'Семья') imgui.SetColumnWidth(1, w.first) -- первый столбик
        imgui.NextColumn()
        imgui.Text(u8'Номер бизнеса') imgui.SetColumnWidth(-1, 100) -- второй столбик
        imgui.NextColumn()
        imgui.Text(u8'Выдача') imgui.SetColumnWidth(-1, 110)
        imgui.Columns(1)
        imgui.Separator()
        -- == Вторая строка
        imgui.Columns(3)
        imgui.Text (u8'Континенталь') imgui.SetColumnWidth(-1, w.first)
        imgui.NextColumn()
        if imgui.InputText('Example',exampleBuf,256) then
            peremenaya = u8:decode(ffi.string(exampleBuf))
        end
        imgui.NextColumn()
        if imgui.Button('send') then
            sampAddChatMessage(peremenaya,-1)
        end
        end
)
function main()
    sampRegisterChatCommand('cmid', function() WinState[0] = not WinState[0] end)
    wait(-1)
end
Cпасибо огромное!
 
  • Нравится
Реакции: MLycoris

Tony Spatulata

Новичок
6
1
Привет друг, как сделать задержку между сообщениями при нажатии на кнопку, чтобы цифра 3 вылетала спустя 3 секунды
if imgui.Button('1') then
sampAddChatMessage('1')
sampAddChatMessage('3' )
end
 

ChromiusJ

x B x A x R x
Друг
4,895
3,183
  • Нравится
Реакции: Tony Spatulata и MLycoris

Sheba

Участник
142
11
Тема классаня но есть проблема когда делаю инпут текст делаб локальную крч все как у тебя и потом вывожу ее в сампсенд чат вот так

йцухъпщдхц:
local inputField = new.char[256]()



function certificate(id_driver)
    lua_thread.create(function()
        sampSendChat('Здраствуйте вас беспокоит Сотрудник' ..inputField.. 'Пожалуйста покажите ваш паспорт')
        wait(500)
        sampSendChat('/showbadre' ..id_driver.. '')
    end)
end


imgui.OnFrame(function() return WinState[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(245, 280), imgui.Cond.Always)
        imgui.Begin(u8'Основное', WinState, imgui.WindowFlags.NoResize)
        if imgui.CollapsingHeader(u8'Пример списка') then
            if imgui.Button('Button') then
                sampAddChatMessage('Вы нажали кнопку    ',-1)
            end
            imgui.Separator()
        end
        

imgui.InputText(u8"Ваш текст", inputField, 256)
      
        imgui.End()
    end)


это не весь код а та часть в которой возникает ошибка именно когда я вожу команду что бы функция сертификейт включилась скрипт крашится хз почему все работало пока я не сделал что бы имя назначалось через инпут текст
 

MLycoris

Режим чтения
Автор темы
Проверенный
1,808
1,853
Тема классаня но есть проблема когда делаю инпут текст делаб локальную крч все как у тебя и потом вывожу ее в сампсенд чат вот так

йцухъпщдхц:
local inputField = new.char[256]()



function certificate(id_driver)
    lua_thread.create(function()
        sampSendChat('Здраствуйте вас беспокоит Сотрудник' ..inputField.. 'Пожалуйста покажите ваш паспорт')
        wait(500)
        sampSendChat('/showbadre' ..id_driver.. '')
    end)
end


imgui.OnFrame(function() return WinState[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(245, 280), imgui.Cond.Always)
        imgui.Begin(u8'Основное', WinState, imgui.WindowFlags.NoResize)
        if imgui.CollapsingHeader(u8'Пример списка') then
            if imgui.Button('Button') then
                sampAddChatMessage('Вы нажали кнопку    ',-1)
            end
            imgui.Separator()
        end
       

imgui.InputText(u8"Ваш текст", inputField, 256)
     
        imgui.End()
    end)


это не весь код а та часть в которой возникает ошибка именно когда я вожу команду что бы функция сертификейт включилась скрипт крашится хз почему все работало пока я не сделал что бы имя назначалось через инпут текст
скинь что пишет при краше, яж хз что тут может быть, тем более в кусочке кода
 

Hinаta

Известный
784
356
local inputField = new.char[256]()
sampSendChat('Здраствуйте вас беспокоит Сотрудник' ..inputField.. 'Пожалуйста покажите ваш паспорт')
Мне кажется, выводить в чат такое не обязательно)
Используй для отправки в чат
Lua:
u8:decode(ffi.string(inputField))

Ну и команду хочу подметить, она /showbadge называется
 
  • Нравится
Реакции: MLycoris
13
4
А как работать с ползунком, например:
надо сделать авторекламу на MonetLoader (Мобильный мунлоадер и там запускаеться не все т.к. разрабы разные) и мне нужна кнопка которая 1 раз отправляет в чат сообщение которое вводиться в спец. поле, и галочка которой нужен ползунок который будет по кд отправлять в чат то что было в поле а для /vr и /ad чтобы автоматом кидало на станцию (сффм лсфм лвфм) и так чтоы это было все отдельно тип для рекламы в ад 1 строка и для вип чата ниже

обьясняю я конечно как бог
 
13
4
jVW8hr0.png


тип такого

скрин не мой если что

KVWA6Dk.png


даже так
 
  • Bug
Реакции: Hinаta

MLycoris

Режим чтения
Автор темы
Проверенный
1,808
1,853

тип такого

скрин не мой если что
Полузнок в котором настраиваются секунды это imgui.SliderInt
Поле в котором вписывается текст это imgui.InputText
Ещё слева от поля ввода есть чекбокс imgui.Checkbox
о них можешь в теме почитать, вот простой пример авторекламы

Lua:
local imgui = require 'mimgui'
local ffi = require 'ffi'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8

local WinState = imgui.new.bool(true)
local bufStatus = imgui.new.bool() -- чекбокс
local bufTextAd = imgui.new.char[512]('') -- inputText
local bufSeconds = imgui.new.int(0) -- sliderInt

imgui.OnFrame(function() return WinState[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(245, 270), imgui.Cond.Always)
    imgui.Begin('##Window', WinState, imgui.WindowFlags.NoResize)
    imgui.Checkbox('##Checkbox',bufStatus)
    imgui.SameLine()
    imgui.InputText('##Text',bufTextAd,512)
    imgui.SliderInt(u8'Сек',bufSeconds,5,60)
    imgui.End()
end)

function main()
    sampRegisterChatCommand('autoad', function() WinState[0] = not WinState[0] end)
    while true do wait(0)
        if bufStatus[0] then
            sampSendChat(u8:decode(ffi.string(bufTextAd)))
            wait(bufSeconds[0]*1000)
        end
    end
end
 
  • Вау
Реакции: minxty
13
4
Полузнок в котором настраиваются секунды это imgui.SliderInt
Поле в котором вписывается текст это imgui.InputText
Ещё слева от поля ввода есть чекбокс imgui.Checkbox
о них можешь в теме почитать, вот простой пример авторекламы

Lua:
local imgui = require 'mimgui'
local ffi = require 'ffi'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8

local WinState = imgui.new.bool(true)
local bufStatus = imgui.new.bool() -- чекбокс
local bufTextAd = imgui.new.char[512]('') -- inputText
local bufSeconds = imgui.new.int(0) -- inputInt

imgui.OnFrame(function() return WinState[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(245, 270), imgui.Cond.Always)
    imgui.Begin('##Window', WinState, imgui.WindowFlags.NoResize)
    imgui.Checkbox('##Checkbox',bufStatus)
    imgui.SameLine()
    imgui.InputText('##Text',bufTextAd,512)
    imgui.SliderInt(u8'Сек',bufSeconds,5,60)
    imgui.End()
end)

function main()
    sampRegisterChatCommand('autoad', function() WinState[0] = not WinState[0] end)
    while true do wait(0)
        if bufStatus[0] then
            sampSendChat(u8:decode(ffi.string(bufTextAd)))
            wait(bufSeconds[0]*1000)
        end
    end
end
спасибо

UFHALzm.jpg
 
Последнее редактирование:
  • Нравится
Реакции: MLycoris

MLycoris

Режим чтения
Автор темы
Проверенный
1,808
1,853
Немного обновил гайд, поэтому ап
1. Добавлена инфа по следующим функциям:
  • imgui.VSliderInt & imgui.VSliderFloat
  • imgui.SliderInt2-4 & imgui.SliderFloat2-4
  • imgui.ProgressBar
  • imgui.Dummy
  • imgui.NewLine
  • imgui.Indent
2. Добавлен пункт 3.3 с цветной кнопкой и цветным сепаратором
 
  • Нравится
Реакции: MrDorlik