если в основной пример смотреть, то вот строка:GTA V :monkey:
А где изменить активацию? Я тупой.
Мвд хуелпер юзает старую версию + комментирует несколько строчек этой либы.Не ток там в МВДхелпере а ещё и в других
Не МВД хелпер,а script PatrulМвд хуелпер юзает старую версию + комментирует несколько строчек этой либы.
local pie_mode = imgui.ImBool(true) -- режим PieMenu
local pie_keyid = 2 -- 0 ЛКМ, 1 ПКМ, 2 СКМ
local pie_elements =
{
{name = 'Сказать привет', action = function() sampSendChat('Привет.') end, next = nil},
{name = 'Сказать пока', action = function() sampSendChat('Пока.') end, next = nil},
{name = 'Сказать что-то', action = function() end, next = {
{name = 'Сказать как дела', action = function() sampSendChat('Как дела.') end, next = nil},
{name = 'Сказать ку-ку', action = function() sampSendChat('Ку-ку.') end, next = nil},
{name = 'Сказать дароу', action = function() sampSendChat('Дароу.') end, next = nil}
}}
}
if pie_mode.v then
if imgui.IsMouseClicked(pie_keyid) then imgui.OpenPopup('PieMenu') end
if pie.BeginPiePopup('PieMenu', pie_keyid) then
for k, v in ipairs(pie_elements) do
if v.next == nil then if pie.PieMenuItem(u8(v.name)) then v.action() end
elseif type(v.next) == 'table' then drawPieSub(v) end
end
pie.EndPiePopup()
end
end
imgui.ShowCursor = (pie_mode.v and imgui.IsMouseDown(pie_keyid))
function drawPieSub(v)
if pie.BeginPieMenu(u8(v.name)) then
for i, l in ipairs(v.next) do
if l.next == nil then
if pie.PieMenuItem(u8(l.name)) then l.action() end
elseif type(l.next) == 'table' then
drawPieSub(l)
end
end
pie.EndPieMenu()
end
end
Привет. Решил склепать что-нибудь с помощью данной либы, но столкнулся с проблемой, что нужно вручную прописывать названия для элементов, а также функции, да и создавать саб-меню в некоторых моментах было просто не удобно. Было принято решение создать массив, который работал бы примерно также, как в реализации FYP'овских диалогов - на самом деле очень интересный механизм. В конечном итоге всё было написано и имело работоспособный вид. Начнём.
Сначала, как и всегда, в начале кода создаём переменные:
Как мы видим, у нас есть три переменные. Переменная pie_mode отвечает за активность нашего меню. Если ровнять эту переменную к false, то меню просто напросто не будет появляться. Потом идёт pie_keyid, которая равна два. Эта переменная задаёт кнопку мыши, по которой будет открываться меню. После идёт массив pie_elements, который содержит все настройки элементов меню. Всё просто: name - название текущего элемента, action - функция текущего элемента, next - следующие элементы, если речь идёт о саб-меню. Кстати, если next содержит в себе таблицу, то action не выполняется, так что функцию можно оставить пустой. Теперь переходим в main и добавляем в одно из условий imgui.Process переменную pie_mode.v, чтобы ImGUI был активен - думаю, что это понятно. Переходим в imgui.onDrawFrame - тут самое интересное. Добавляем в самый конец функции это:Lua:local pie_mode = imgui.ImBool(true) -- режим PieMenu local pie_keyid = 2 -- 0 ЛКМ, 1 ПКМ, 2 СКМ local pie_elements = { {name = 'Сказать привет', action = function() sampSendChat('Привет.') end, next = nil}, {name = 'Сказать пока', action = function() sampSendChat('Пока.') end, next = nil}, {name = 'Сказать что-то', action = function() end, next = { {name = 'Сказать как дела', action = function() sampSendChat('Как дела.') end, next = nil}, {name = 'Сказать ку-ку', action = function() sampSendChat('Ку-ку.') end, next = nil}, {name = 'Сказать дароу', action = function() sampSendChat('Дароу.') end, next = nil} }} }
Также не забудьте привести вашу мышку в состояние и указать, что активироваться нужно только, если активен pie_mode.v и зажата кнопка активации. Если у вас уже есть ShowCursor, то добавляем в конец условия.Lua:if pie_mode.v then if imgui.IsMouseClicked(pie_keyid) then imgui.OpenPopup('PieMenu') end if pie.BeginPiePopup('PieMenu', pie_keyid) then for k, v in ipairs(pie_elements) do if v.next == nil then if pie.PieMenuItem(u8(v.name)) then v.action() end elseif type(v.next) == 'table' then drawPieSub(v) end end pie.EndPiePopup() end end
Осталось немного - дописать функцию построения саб-меню. Дописываем в конец скрипта:Lua:imgui.ShowCursor = (pie_mode.v and imgui.IsMouseDown(pie_keyid))
В конечном итоге получаем вот такое вот красивое меню:Lua:function drawPieSub(v) if pie.BeginPieMenu(u8(v.name)) then for i, l in ipairs(v.next) do if l.next == nil then if pie.PieMenuItem(u8(l.name)) then l.action() end elseif type(l.next) == 'table' then drawPieSub(l) end end pie.EndPieMenu() end end
Найдете говнокод - сорян. Уж сильно сгорел с некоторых моментов либы.
Массив, кстати, можно заполнять по ходу выполнения кода. Жду новые MVDHelper'ы.
Потому что нужно подключить imgui.А почему при запуске такая ошибка?
(error) test3.lua: ...to San Andreas + MultiPlayer\moonloader\test3.lua:1: attempt to index global 'imgui' (a nil value)
stack traceback:
Я как и было написано перекинул файлы в папку, работает тестовый "moon imgui demo", а данный скрипт нетПотому что нужно подключить imgui.
Помоги пожалуйста разобраться, MoonImGui.dll и imgui.lua у меня установлены в папку lib, но все равно ничего не работаетПотому что нужно подключить imgui.
Ты немного не по адресу. Сначала разберись как работать с ImGUI, а потом залезай во всякие дополнительные функции.Я как и было написано перекинул файлы в папку, работает тестовый "moon imgui demo", а данный скрипт нет
Помоги пожалуйста разобраться, MoonImGui.dll и imgui.lua у меня установлены в папку lib, но все равно ничего не работает
local imgui = require 'imgui'
Да мне всего-то нужно, чтобы твой код работал, но этого не происходитТы немного не по адресу. Сначала разберись как работать с ImGUI, а потом залезай во всякие дополнительные функции.
Lua:local imgui = require 'imgui'
local imgui = require("imgui")
local pie_mode = imgui.ImBool(true) -- режим PieMenu
local pie_keyid = 1 -- 0 ЛКМ, 1 ПКМ, 2 СКМ
local pie_elements =
{
{name = 'Сказать привет', action = function() sampSendChat('Привет.') end, next = nil},
{name = 'Сказать пока', action = function() sampSendChat('Пока.') end, next = nil},
{name = 'Сказать что-то', action = function() end, next = {
{name = 'Сказать как дела', action = function() sampSendChat('Как дела.') end, next = nil},
{name = 'Сказать ку-ку', action = function() sampSendChat('Ку-ку.') end, next = nil},
{name = 'Сказать дароу', action = function() sampSendChat('Дароу.') end, next = nil}
}}
}
if pie_mode.v then
if imgui.IsMouseClicked(pie_keyid) then imgui.OpenPopup('PieMenu') end
if pie.BeginPiePopup('PieMenu', pie_keyid) then
for k, v in ipairs(pie_elements) do
if v.next == nil then if pie.PieMenuItem(u8(v.name)) then v.action() end
elseif type(v.next) == 'table' then drawPieSub(v) end
end
pie.EndPiePopup()
end
end
imgui.ShowCursor = (pie_mode.v and imgui.IsMouseDown(pie_keyid))
function drawPieSub(v)
if pie.BeginPieMenu(u8(v.name)) then
for i, l in ipairs(v.next) do
if l.next == nil then
if pie.PieMenuItem(u8(l.name)) then l.action() end
elseif type(l.next) == 'table' then
drawPieSub(l)
end
end
pie.EndPieMenu()
end
end