Исходник Софт [ImGui] Global notification
Quasper
Известный
wD.D159
vk.me/153724009
Не выводит инфу в уведомления, пишет nil
Известный
Не выводит инфу в уведомления, пишет nil
Известный
Известный
Известный
SanyaVersus
Участник
require «lib.moonloader»
local notf = import ‘imgui_notf.lua’
local encoding = require ‘encoding’
encoding.default = ‘CP1251’
u8 = encoding.UTF8
function main()
while not isSampAvailable() do wait(0) end
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while true do
wait(0)
if not sampIsChatInputActive() then
if not sampIsDialogActive() then
if isKeyJustPressed(VK_R) then
sampSendChat(«/healme»)
notf.addNotification(string.format(«Уведомление\n\nВы использовали аптечку»), 5)
end
end
end
end
end
P.S Не ебу в скриптинге от слова совсем
Oreshka23
Известный
require «lib.moonloader»
local notf = import ‘imgui_notf.lua’
local encoding = require ‘encoding’
encoding.default = ‘CP1251’
u8 = encoding.UTF8
function main()
while not isSampAvailable() do wait(0) end
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while true do
wait(0)
if not sampIsChatInputActive() then
if not sampIsDialogActive() then
if isKeyJustPressed(VK_R) then
sampSendChat(«/healme»)
notf.addNotification(string.format(«Уведомление\n\nВы использовали аптечку»), 5)
end
end
end
end
end
P.S Не ебу в скриптинге от слова совсем
SanyaVersus
Участник
require «lib.moonloader»
local notf = import ‘imgui_notf.lua’
local encoding = require ‘encoding’
encoding.default = ‘CP1251’
u8 = encoding.UTF8
function main()
while not isSampAvailable() do wait(0) end
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while true do
wait(0)
if not sampIsChatInputActive() then
if not sampIsDialogActive() then
if isKeyJustPressed(VK_R) then
sampSendChat(«/healme»)
notf.addNotification(u8(«Уведомление\n\nВы использовали аптечку»), 5)
end
end
end
end
end
какие-то иероглифы
можете сами чекнуть
нужен испрвленный скрипт, там где нет этой хни
trefa
08.07.2022
require «lib.moonloader»
local notf = import ‘imgui_notf.lua’
local encoding = require ‘encoding’
encoding.default = ‘CP1251’
u8 = encoding.UTF8
function main()
while not isSampAvailable() do wait(0) end
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while true do
wait(0)
Moon ImGui — Dear ImGui for MoonLoader
Это работает, но что-то не впечатляет, согласитесь. Окно изначально маленькое, показывается сразу при старте и его нельзя закрыть.
Сделаем его побольше, добавим активацию и какое-нибудь действие:
Разница между 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 для float4, 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’ |
Но это ещё не всё. Вся работа с текстом в ImGui основана на UTF-8, т.е. текст не ограничен лишь стандартным набором символов. Но т.к. GTA, SAMP и MoonLoader не поддерживают юникод, кодировки необходимо конвертировать.
Работа с другими языками на примере русского
В MoonLoader v.025 были добавлены библиотеки lua-iconv и encoding, они призваны помочь в работе с разными кодировками текста.
Следующий пример показывает как использовать текст на русском в ImGui:
Скрипт должен быть сохранён в кодировке Windows-1251
Остальные особенности
В Moon ImGui есть несколько дополнительных возможностей. В частности, они реализуют взаимодействие с игрой и управление интерфейсом.
На этом всё. Во вложениях есть пример с демонстрацией использования всех этих фич, рекомендую посмотреть код и пощупать его в игре. Вот скриншот:
Moon ImGui — Dear ImGui for MoonLoader
Это работает, но что-то не впечатляет, согласитесь. Окно изначально маленькое, показывается сразу при старте и его нельзя закрыть.
Сделаем его побольше, добавим активацию и какое-нибудь действие:
Разница между 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 для float4, 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’ |
Но это ещё не всё. Вся работа с текстом в ImGui основана на UTF-8, т.е. текст не ограничен лишь стандартным набором символов. Но т.к. GTA, SAMP и MoonLoader не поддерживают юникод, кодировки необходимо конвертировать.
Работа с другими языками на примере русского
В MoonLoader v.025 были добавлены библиотеки lua-iconv и encoding, они призваны помочь в работе с разными кодировками текста.
Следующий пример показывает как использовать текст на русском в ImGui:
Скрипт должен быть сохранён в кодировке Windows-1251
Остальные особенности
В Moon ImGui есть несколько дополнительных возможностей. В частности, они реализуют взаимодействие с игрой и управление интерфейсом.
На этом всё. Во вложениях есть пример с демонстрацией использования всех этих фич, рекомендую посмотреть код и пощупать его в игре. Вот скриншот:
Moon ImGui — Dear ImGui for MoonLoader
Это работает, но что-то не впечатляет, согласитесь. Окно изначально маленькое, показывается сразу при старте и его нельзя закрыть.
Сделаем его побольше, добавим активацию и какое-нибудь действие:
Разница между 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 для float4, 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’ |
Но это ещё не всё. Вся работа с текстом в ImGui основана на UTF-8, т.е. текст не ограничен лишь стандартным набором символов. Но т.к. GTA, SAMP и MoonLoader не поддерживают юникод, кодировки необходимо конвертировать.
Работа с другими языками на примере русского
В MoonLoader v.025 были добавлены библиотеки lua-iconv и encoding, они призваны помочь в работе с разными кодировками текста.
Следующий пример показывает как использовать текст на русском в ImGui:
Скрипт должен быть сохранён в кодировке Windows-1251
Остальные особенности
В Moon ImGui есть несколько дополнительных возможностей. В частности, они реализуют взаимодействие с игрой и управление интерфейсом.
На этом всё. Во вложениях есть пример с демонстрацией использования всех этих фич, рекомендую посмотреть код и пощупать его в игре. Вот скриншот:
Moon ImGui — Dear ImGui for MoonLoader
Это работает, но что-то не впечатляет, согласитесь. Окно изначально маленькое, показывается сразу при старте и его нельзя закрыть.
Сделаем его побольше, добавим активацию и какое-нибудь действие:
Разница между 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 для int3 | 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’ |
Но это ещё не всё. Вся работа с текстом в ImGui основана на UTF-8, т.е. текст не ограничен лишь стандартным набором символов. Но т.к. GTA, SAMP и MoonLoader не поддерживают юникод, кодировки необходимо конвертировать.
Работа с другими языками на примере русского
В MoonLoader v.025 были добавлены библиотеки lua-iconv и encoding, они призваны помочь в работе с разными кодировками текста.
Следующий пример показывает как использовать текст на русском в ImGui:
Скрипт должен быть сохранён в кодировке Windows-1251
Остальные особенности
В Moon ImGui есть несколько дополнительных возможностей. В частности, они реализуют взаимодействие с игрой и управление интерфейсом.
На этом всё. Во вложениях есть пример с демонстрацией использования всех этих фич, рекомендую посмотреть код и пощупать его в игре. Вот скриншот:





