Исходник mimgui hotkey - 027, 026 moonloader

dmitry.karle

Известный
Автор темы
410
108
Представляю к вашему вниманию свою библиотеку хоткеев для moonloader 027 и для 026 с готовым и приятным GUI для глаза (mimgui + moonmonet). Вроде бы ещё не было библиотеки для moonloader 027 , но теперь она есть и работает нормально, и не выбивает таблицу.

Под основной код был взят код: https://www.blast.hk/threads/178867/
И переделан под 027.

xqPukJkZ_0M.jpg


Для установки библиотеки:
moonloader/lib

Как пользоваться:

Lua:
local hotkey = require 'mimgui_hotkey'
local imgui = require 'mimgui'
local inicfg = require 'inicfg'
local config = inicfg.load({
    bindhotkey = {
        hotkey1 = '18, 49', --две клавиши
        hotkey2 = '45', --одна клавиша
        hotkey3 = '', --пустая клавиша
    },
}, 'inifile.ini')
inicfg.save(config, 'inifile.ini')

function main()
repeat wait(0) until isSampAvailable()
t1 = hotkey.RegisterHotKey('t1', false, stringToKeys(config.bindhotkey.hotkey1), function() sampAddChatMessage('hotkey1', -1) end)
t2 = hotkey.RegisterHotKey('t2', false, stringToKeys(config.bindhotkey.hotkey2), function() sampAddChatMessage('hotkey2', -1) end)
t3 = hotkey.RegisterHotKey('t3', false, stringToKeys(config.bindhotkey.hotkey3), function() sampAddChatMessage('hotkey3', -1) end)
    while true do wait(0)
    end
end


--во фрейме
if t1:ShowHotKey(imgui.ImVec2(150, 25)) then
    if config.bindhotkey.hotkey1 ~= keysToString(t1:GetHotKey()) then
        config.bindhotkey.hotkey1 = keysToString(t1:GetHotKey())
        inicfg.save(config, 'inifile.ini')
    end
    t1:EditHotKey(t1:GetHotKey())
end; imgui.SameLine(nil, 5); imgui.Text(u8'Хоткеи 1')
if t2:ShowHotKey(imgui.ImVec2(150, 25)) then
    if config.bindhotkey.hotkey2 ~= keysToString(t2:GetHotKey()) then
        config.bindhotkey.hotkey2 = keysToString(t2:GetHotKey())
        inicfg.save(config, 'inifile.ini')
    end
    t2:EditHotKey(t2:GetHotKey())
end; imgui.SameLine(nil, 5); imgui.Text(u8'Хоткеи 2')
if t3:ShowHotKey(imgui.ImVec2(150, 25)) then
    if config.bindhotkey.hotkey3 ~= keysToString(t3:GetHotKey()) then
        config.bindhotkey.hotkey3 = keysToString(t3:GetHotKey())
        inicfg.save(config, 'inifile.ini')
    end
    t3:EditHotKey(t3:GetHotKey())
end; imgui.SameLine(nil, 5); imgui.Text(u8'Хоткеи 3')
 

Вложения

  • mimgui_hotkey.lua
    17.6 KB · Просмотры: 84

XRLM

Против ветра рождённый
Модератор
1,631
1,281
Бинды на клавиши мыши есть?
 
  • Клоун
Реакции: watson

dmitry.karle

Известный
Автор темы
410
108
Бинды на клавиши мыши есть?
Хотел сделать, на быковые клавиши, они в библиотеки vkeys есть, но чёт они не хотели ставиться на тот момент и забил на эти клавиши. Причём если вручную ставить, то всё работает
 

AngelMAILS228

Известный
89
12
u8 забыли
HOTKEY = {
Text = {
WaitForKey = u8'Нажмите любую клавишу...',
NoKey = u8'< Свободно >'
},
в скриптах потом знаки вопроса лезут, а так годная штука! красиво
 

dmitry.karle

Известный
Автор темы
410
108
u8 забыли
HOTKEY = {
Text = {
WaitForKey = u8'Нажмите любую клавишу...',
NoKey = u8'< Свободно >'
},
в скриптах потом знаки вопроса лезут, а так годная штука! красиво
Не так критично. Что в мэйне можно использовать, что напрямую в библиотеке.
Я лично в function main() у себя использовал
Lua:
HOTKEY.Text.NoKey = u8'Не назначено'; HOTKEY.Text.WaitForKey = u8'Нажмите клавишу...'
 

kyrtion

Известный
1,320
485
Баг нашел, походу первый. Я кое-что нашел в код у тебя, некоторые функция еще не зарегана, а хотя еще стоит - это лучше закладывать функции в таблице и тогда будут работать идеально.

например:
1761407444286.png


второй баг - это автоматическое определение "Не установлено" после того как я нажал 2 раза и отпустил (ESC), а также также когда я собирался менять хоткей, но я передумал и выбрал другой хоткей - получил "Не установлено". Может что-то не так?

Нашел нормальный способ получение цвета не заморачивая левые цветы и форматы кнопки, а также размер кнопки не стандартно. Пишешь 120 и 0, - в прозрачную кнопку фиг вернет с размером - пришлось костылить: ставить кнопку, но без альфы на всего.
еще я увидел баг с SameLine перед хоткея решил кое-что исправить:
кстати сам увидел что имгуи может брать цвета и оставлять альфа без изменений, если empty то есть пустой то должно изменить
1761479381226.png


полный код, чисто хоткей с лабелом (если не нужно label, укажи что если нету пусть не покажет sameline и text)
1761479468700.png


вот это нормальный код, попробуй исправить :D

Вот что получилось

1761479872233.png
 
Последнее редактирование:

dmitry.karle

Известный
Автор темы
410
108
некоторые функция еще не зарегана
Не хочу срать в этой теме обычными сообщениями, но скажу так:

1. Библиотека создавалась на базе mimgui + для адекатной работы с 027 moonloader.

2. В стилях/оформлении библиотеки (хоткеевв) использовался moonmonet, у каждого свой дизайн. То что у тебя альфа там выёбывается - вопросы к своей функции со стилями/палитре, но за всё время работы с хоткеями и переписки библиотки я проблем не обнаружил, и юзеры тоже.

3. Можешь модернизировать библиотеку самостоятельно. Прежде чем, я публиковал данную библиотеку, то я её проверял как отдельную библиотеку на работоспособность (изначально она у меня шла напрямую в самом коде) и главное рабочий конфиг с нормальной регой для таблицы в moonloader 027, то что там на 026 какие-то доработки, хотя на 026 у меня юзеры были и у них проблем не было на 026, не знаю что ты там уже наделал в библиотеке.

4. Баг с imgui.SameLine() перед хоткеями? Конкретно опиши в чём баг, я предоставил код ранее с использованием хоткеев и там тоже используются imgui.SameLine() и проблем никаких нет + приложен скриншот с самим оформлением хоткеев, то что ты предоставил и то что у меня на скрине - разницу не вижу. Текст после поля с хоткеем сидит на том же месте что и у тебя, возможно разница в самом шрифте. Не так критично выставить корректировку по позиции текста, но я отталкивался от своего проекта + от исходного кода самой библиотеки которая была взята под основу и переделана на обе версии 026 + 027 moonloader.

РАБОТАЕТ - НЕ ТРОГАЙ!!!
 

kyrtion

Известный
1,320
485
РАБОТАЕТ - НЕ ТРОГАЙ!!!
сильно

Текст после поля с хоткеем сидит на том же месте что и у тебя, возможно разница в самом шрифте
в invisiblebutton ставится по размеру, не по дефолту. если указываешь 120,0 то размер высоты точно ставит 0 и это влияет на SameLine. Я заменил на кнопку с Alpha с значением 0.0 - SameLine ставится на своем месте. Там высота отличается, но это странно

Библиотека создавалась на базе mimgui + для адекатной работы с 027 moonloader.
Ну я решил это исправить для 0.26, как такое предложение? :D

В стилях/оформлении библиотеки (хоткеевв) использовался moonmonet, у каждого свой дизайн. То что у тебя альфа там выёбывается - вопросы к своей функции со стилями/палитре, но за всё время работы с хоткеями и переписки библиотки я проблем не обнаружил, и юзеры тоже.
Ну понимаешь что ты там не в том же стили. Например, цвет кнопки должна была совпадать если брать пример из текущей стили мимгуи.
Далее меняешь только альфы, но не нужно умножить всё в 0.5 раз.

1761569087968.png


Можно вопрос?
1. Почему либ должно создавать глобальную функцию жсон?
2. Тот же вопрос - глобальный хоткей. Для хоткея достаточно вызывать require и создает кэши, сделает ссылку если повторно вызовет (как и делаю в moonly)
3. Почему Lua LLS ругается? Ведь видишь что некоторые функции не созданы чем раньше.
4. У тебя же с примером показано, но почему именно нужно проверить на название бинда и изменить? Ну можно было бы засунуть это в либ, проще говоря нажал - сохрани и больше ничего.
5. Насчет стили я и так использую MoonMonet, как и видишь что стоит палитра у меня в фрейм (видео, скрин). Я тестил между обычной кнопки и хоткей - цвет отличается (кроме если не задано хоткей), почему так странно? Я понимаю но хочу узнать твой ответ, от любопытства.
 
Последнее редактирование: