local sampev = require 'lib.samp.events'
local imgui = require 'mimgui'
local vkeys = require 'vkeys'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local wm = require 'windows.message'
local new = imgui.new
local renderWindow = new.bool()
local sizeX, sizeY = getScreenResolution()
local dialog_list = {} -- список, состоящий их строк; каждая из них – текст соответствующего пункта
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
if title == 'MainMenu' then -- проверка, что это твой диалог (по заголовку)
dialog_list = {} -- очищаем список
local cstr = '' -- текущая строка
for i = 1, text:len() do -- проходимся по всем символам строки
if text:sub(i, i) == '\n' then -- если перенос строки
table.insert(dialog_list, cstr) -- добавляем в список последнюю строку (до предыдущего переноса)
cstr = '' -- очищаем текущую строку
else -- если проверяемный символ – НЕ перенос строки
cstr = cstr .. text:sub(i, i) -- добавляем символ в "текущую строку"
if i == text:len() then -- если последний символ
table.insert(dialog_list, cstr)
end
end
end
end
end
local newFrame = imgui.OnFrame(
function() return renderWindow[0] end,
function(player)
imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.SetNextWindowSize(imgui.ImVec2(200, 150), imgui.Cond.FirstUseEver)
imgui.Begin('Dialog text window', renderWindow)
imgui.Text(u8'Текст последнего диалога:\n')
for i = 1, #dialog_list do
imgui.Text(u8(dialog_list[i]))
end
imgui.End()
end
)
function main()
addEventHandler('onWindowMessage', function(msg, wparam, lparam)
if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
if wparam == vkeys.VK_X and not sampIsCursorActive() then
renderWindow[0] = not renderWindow[0] -- при нажатии X изменяем состояние окна (вкл. на выкл. и наоборот)
end
end
end)
wait(-1)
end