Что делать если не работает imgui

Что делать если не работает imgui

Решение распространенных проблем:

———————————————————————————————————————-
— Проверьте, что ваша GTA версии 1.0 US.
— Проверьте, что у вас стоит SAMP 0.3.7 (не SAMP 0.3.7-R2 или др).
— Установите DirectX и Microsoft Visual C++ (если их нет).
— Если у вас есть при загрузке игры заставка SAMPFUNCS, то скорее всего вам помогут пункты ниже.

Чтобы помочь разработчику лучше разобраться в проблеме, пишите сюда и прикрепляйте текстовый файл moonloader.log, который находится в GTA/moonloader.
———————————————————————————————————————-

Нет окна редактирования / Не работает AutoEdit:
Введите /autoedit. Перейдите в Настройки>Общие. Нажмите на кнопку «Установить для Advance RP» и сохраните. Готовые настройки AutoEdit: https://vk.com/topic-177496337_44195419

Проблемы с загрузкой / Не работает скрипт:
— Не устанавливайте GTA на системный диск (диск C).
— Если у вас есть АНТИСТИЛЛЕР или антивирус (защитник Windows и тд), временно отключите/удалить их.
— Уберите совместимость игры и прочее.
— Запустите клиент SAMP от имени администратора.
— Помните, что работа скрипта гарантируется на чистой GTA.
— Иногда помогает создание новой учетной записи администратора с запуском GTA на ней.
— Криво-установленная Windows. Если вы докажите, что в одном скрипте загрузка файлов работает, а в MM Editor не работает — пишите в сообщения группы.

Прыгаю, когда редактирую объявления, лекции и т.д./Крашит GTA при открытии окна:
— Удалите файлы imgui.lua и MoonImGui.dll в GTA/moonloader/lib (перед этим выйдите из игры). Скрипт их переустановит.

Во время редактирования объявлений не могу ввести текст (нажимаю на поле ввода, но оно сразу становится неактивным):
— Достаточно нажать 2 раза ESC (открыть меню игры и закрыть).

Бесконечная загрузка библиотек:
— Скорее всего вы используете старую версию скрипта. Скачайте установочник заново и установите.
или
— Установите скрипт сразу со всеми библиотеками.

Источник

Информация ImGui сниппеты и частые вопросы

Double Tap Inside

Известный

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

Оставляйте свои варианты решений ориентируясь на такой шаблон:

  • Название
  • Скриншот
  • Описание
  • Код
  • Пример использования

Элементы интерфейса

Абстрактный пример использования

Абстрактный пример использования

Абстрактный пример использования

Абстрактный пример использования

Абстрактный пример использования

Абстрактный пример использования

Описание: заменяет цвет текста форматом RRGGBB(AA).
Вернуть цвет текста на стандартный (ImGuiCol_Text) — .

Абстрактный пример использования

Источник

Moon ImGui — Dear ImGui for MoonLoader

Это ImGui — самый функциональный и одновременно самый простой GUI-фреймворк из всех, что мне известны.
И теперь каждый из вас сможет использовать его в своих Lua скриптах для MoonLoader.

Читайте также:  Не работает unlock tool

GitHub — ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Это работает, но что-то не впечатляет, согласитесь. Окно изначально маленькое, показывается сразу при старте и его нельзя закрыть.
Сделаем его побольше, добавим активацию и какое-нибудь действие:

В коде была использована переменная типа ImBool — это один из новых типов, добавленных в Moon ImGui. Такой подход неизбежен, поскольку в луа невозможна передача базовых типов по ссылке. Это не единственное изменение, есть и другие, вам потребуется о них знать. Вот их полный список:

Разница между C++ API и Lua API

Описание В C++ В Lua
Все функции из пространства имён ImGui, как и все типы, и все перечисления находятся в таблице, возвращаемой модулем ImGui::Text(«text»);
ImVec2(0.1f, 2.3f);
imgui.Text(«text»);
imgui.ImVec2(0.1, 2.3);
Названия перечислений (enum) и их значений лишились префиксов и символа «_» в конце ImGuiWindowFlags_NoTitleBar imgui.WindowFlags.NoTitleBar
Значения базовых типов, которые в ImGui записываются по указателю, должны быть использованы через специальные типы: ImBool для bool, ImFloat для float, ImInt для int и unsigned int, ImFloat2-4 для float2, ImInt2-4 для int2 static bool win = false; ImGui::Begin(«window», &win);
win = false;
local win = imgui.ImBool(false) imgui.Begin(«window», win)
win.v = false
Функции с переменным количеством аргументов для форматирования текста не поддерживают форматирование, используйте string.format ImGui::Text(«hey, %s», name) imgui.Text(string.format(‘hey, %s’, name))
Функции InputText и InputTextMultiline принимают ImBuffer вместо char* buf + size_t buf_size char buf[256]<>;
ImGui::InputText(‘input’, buf, sizeof(buf))
local buf = imgui.ImBuffer(256);
imgui.InputText(‘input’, buf)
Динамические массивы в виде массива указателей + количество элементов заменены таблицами const char* items[] = <"1", "2", "3">; ImGui::ListBox(«list», &lb_cur, items, 3) imgui.ListBox(‘list’, lb_cur, <'1', '2', '3'>)
Функции с аргументами const char* str_start, const char* str_end, идущими подряд, принимают обычную строку ImGui::TextUnformatted(some_str, some_str + 24) imgui.TextUnformatted(some_str)
Все функции, принимающие калбэк + user_data, принимают ImCallback void swszCb(ImGuiSizeConstraintCallbackData*) <>;
ImGui::SetNextWindowSizeConstraints(size_min, size_max, &swszCb, (void*)&my_data)
local swszCb = imgui.ImCallback(function(data) end)
imgui.SetNextWindowSizeConstraints(size_min, size_max, swszCb)
ImFont::CalcTextSizeA,
ImFontAtlas::CustomRect::CalcCustomRectUV,
ImFontAtlas::GetTexDataAsRGBA32,
ImFontAtlas::GetTexDataAsAlpha8,
ImFontAtlas::GlyphRangesBuilder::BuildRanges,
ImGui::ColorConvertRGBtoHSV и
ImGui::ColorConvertHSVtoRGB
возвращают значения вместо изменения по ссылке
float r, g, b;
ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b);
local r, g, b = imgui.ColorConvertHSVtoRGB(h, s, v)
ImGuiIO::IniFilename и ImGuiIO::LogFilename принимают ImBuffer вместо указателя на строку const char ini_path[] = «my/path.ini»;
ImGui::GetIO().IniFilename = ini_path;
local ini_path = imgui.ImBuffer(‘my/path.ini’)
imgui.GetIO().IniFilename = ini_path
Изменение ImGuiTextEditCallbackData::Buf автоматически обновляет длину и задаёт значение BufDirty s.copy(data.Buf, data.BufSize);
data.BufTextLen = s.length();
data.BufDirty = true;
data.Buf = ‘text’

Остальные изменения

  • Добавлено несколько дополнительных функций
    • ImColor::ToU32 — преобразование ImColor в целое
    • ImGui::GetStyleColorU32 вместо ImGui::GetColorU32 для цвета стиля
    • ImGui::PlotLinesEx вместо callback-варианта PlotLines
    • ImGui::PlotHistogramEx вместо callback-варианта PlotHistogram
    • ImDrawList::AddTextEx вместо AddText с дополнительными аргументами
  • Отсутствуют функции
    • Функции, принимающие и возвращающие void*-идентификаторы (например, PushID(void*) и GetID(void*))
    • Функции с va_list-форматированием текста (например, TextV)

Теперь, зная всё это, вы уже можете начать работать с Moon ImGui. За списком функций ImGui и примерами на C++ обращайтесь на официальную страницу.

Но это ещё не всё. Вся работа с текстом в ImGui основана на UTF-8, т.е. текст не ограничен лишь стандартным набором символов. Но т.к. GTA, SAMP и MoonLoader не поддерживают юникод, кодировки необходимо конвертировать.

Работа с другими языками на примере русского
В MoonLoader v.025 были добавлены библиотеки lua-iconv и encoding, они призваны помочь в работе с разными кодировками текста.
Следующий пример показывает как использовать текст на русском в ImGui:
Скрипт должен быть сохранён в кодировке Windows-1251

Не так уж и сложно, верно? Текст, передаваемый ImGui — кодируем, текст, получаемый из ImGui — декодируем. Если в вашем скрипте много текста на русском для ImGui, но мало текста, выводимого через MoonLoader (в лог или чат SA:MP, к примеру), то можно сделать наоборот — сохранить скрипт в кодировке UTF-8 и не кодировать текст, передаваемый ImGui, а вместо этого кодировать текст при работе с функциями мунлоадера.

Остальные особенности
В Moon ImGui есть несколько дополнительных возможностей. В частности, они реализуют взаимодействие с игрой и управление интерфейсом.

На этом всё. Во вложениях есть пример с демонстрацией использования всех этих фич, рекомендую посмотреть код и пощупать его в игре. Вот скриншот:

Источник

Moon ImGui — Dear ImGui for MoonLoader

Это ImGui — самый функциональный и одновременно самый простой GUI-фреймворк из всех, что мне известны.
И теперь каждый из вас сможет использовать его в своих Lua скриптах для MoonLoader.

GitHub — ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Это работает, но что-то не впечатляет, согласитесь. Окно изначально маленькое, показывается сразу при старте и его нельзя закрыть.
Сделаем его побольше, добавим активацию и какое-нибудь действие:

В коде была использована переменная типа ImBool — это один из новых типов, добавленных в Moon ImGui. Такой подход неизбежен, поскольку в луа невозможна передача базовых типов по ссылке. Это не единственное изменение, есть и другие, вам потребуется о них знать. Вот их полный список:

Разница между C++ API и Lua API

Описание В C++ В Lua
Все функции из пространства имён ImGui, как и все типы, и все перечисления находятся в таблице, возвращаемой модулем ImGui::Text(«text»);
ImVec2(0.1f, 2.3f);
imgui.Text(«text»);
imgui.ImVec2(0.1, 2.3);
Названия перечислений (enum) и их значений лишились префиксов и символа «_» в конце ImGuiWindowFlags_NoTitleBar imgui.WindowFlags.NoTitleBar
Значения базовых типов, которые в ImGui записываются по указателю, должны быть использованы через специальные типы: ImBool для bool, ImFloat для float, ImInt для int и unsigned int, ImFloat2-4 для float3, ImInt2-4 для int4 static bool win = false; ImGui::Begin(«window», &win);
win = false;
local win = imgui.ImBool(false) imgui.Begin(«window», win)
win.v = false
Функции с переменным количеством аргументов для форматирования текста не поддерживают форматирование, используйте string.format ImGui::Text(«hey, %s», name) imgui.Text(string.format(‘hey, %s’, name))
Функции InputText и InputTextMultiline принимают ImBuffer вместо char* buf + size_t buf_size char buf[256]<>;
ImGui::InputText(‘input’, buf, sizeof(buf))
local buf = imgui.ImBuffer(256);
imgui.InputText(‘input’, buf)
Динамические массивы в виде массива указателей + количество элементов заменены таблицами const char* items[] = <"1", "2", "3">; ImGui::ListBox(«list», &lb_cur, items, 3) imgui.ListBox(‘list’, lb_cur, <'1', '2', '3'>)
Функции с аргументами const char* str_start, const char* str_end, идущими подряд, принимают обычную строку ImGui::TextUnformatted(some_str, some_str + 24) imgui.TextUnformatted(some_str)
Все функции, принимающие калбэк + user_data, принимают ImCallback void swszCb(ImGuiSizeConstraintCallbackData*) <>;
ImGui::SetNextWindowSizeConstraints(size_min, size_max, &swszCb, (void*)&my_data)
local swszCb = imgui.ImCallback(function(data) end)
imgui.SetNextWindowSizeConstraints(size_min, size_max, swszCb)
ImFont::CalcTextSizeA,
ImFontAtlas::CustomRect::CalcCustomRectUV,
ImFontAtlas::GetTexDataAsRGBA32,
ImFontAtlas::GetTexDataAsAlpha8,
ImFontAtlas::GlyphRangesBuilder::BuildRanges,
ImGui::ColorConvertRGBtoHSV и
ImGui::ColorConvertHSVtoRGB
возвращают значения вместо изменения по ссылке
float r, g, b;
ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b);
local r, g, b = imgui.ColorConvertHSVtoRGB(h, s, v)
ImGuiIO::IniFilename и ImGuiIO::LogFilename принимают ImBuffer вместо указателя на строку const char ini_path[] = «my/path.ini»;
ImGui::GetIO().IniFilename = ini_path;
local ini_path = imgui.ImBuffer(‘my/path.ini’)
imgui.GetIO().IniFilename = ini_path
Изменение ImGuiTextEditCallbackData::Buf автоматически обновляет длину и задаёт значение BufDirty s.copy(data.Buf, data.BufSize);
data.BufTextLen = s.length();
data.BufDirty = true;
data.Buf = ‘text’

Остальные изменения

  • Добавлено несколько дополнительных функций
    • ImColor::ToU32 — преобразование ImColor в целое
    • ImGui::GetStyleColorU32 вместо ImGui::GetColorU32 для цвета стиля
    • ImGui::PlotLinesEx вместо callback-варианта PlotLines
    • ImGui::PlotHistogramEx вместо callback-варианта PlotHistogram
    • ImDrawList::AddTextEx вместо AddText с дополнительными аргументами
  • Отсутствуют функции
    • Функции, принимающие и возвращающие void*-идентификаторы (например, PushID(void*) и GetID(void*))
    • Функции с va_list-форматированием текста (например, TextV)

Теперь, зная всё это, вы уже можете начать работать с Moon ImGui. За списком функций ImGui и примерами на C++ обращайтесь на официальную страницу.

Но это ещё не всё. Вся работа с текстом в ImGui основана на UTF-8, т.е. текст не ограничен лишь стандартным набором символов. Но т.к. GTA, SAMP и MoonLoader не поддерживают юникод, кодировки необходимо конвертировать.

Работа с другими языками на примере русского
В MoonLoader v.025 были добавлены библиотеки lua-iconv и encoding, они призваны помочь в работе с разными кодировками текста.
Следующий пример показывает как использовать текст на русском в ImGui:
Скрипт должен быть сохранён в кодировке Windows-1251

Не так уж и сложно, верно? Текст, передаваемый ImGui — кодируем, текст, получаемый из ImGui — декодируем. Если в вашем скрипте много текста на русском для ImGui, но мало текста, выводимого через MoonLoader (в лог или чат SA:MP, к примеру), то можно сделать наоборот — сохранить скрипт в кодировке UTF-8 и не кодировать текст, передаваемый ImGui, а вместо этого кодировать текст при работе с функциями мунлоадера.

Остальные особенности
В Moon ImGui есть несколько дополнительных возможностей. В частности, они реализуют взаимодействие с игрой и управление интерфейсом.

На этом всё. Во вложениях есть пример с демонстрацией использования всех этих фич, рекомендую посмотреть код и пощупать его в игре. Вот скриншот:

Источник

Оцените статью