local dataReport = {
template = {
author = 'Автор: %s[%d]',
message = 'Сообщение: %s',
}
state = false,
author = {
nickname = '',
id = -1,
online = false
},
message = ''
}
-- onShowDialog:
-- |> убираем hex-цвет, |> а это делаем еще пожестоже регулряное выражение с ^$
if dialogId == 52 and title:gsub('{%x%x%x%x%x%x}', ''):find('^Репорт$') then
local dText = text
:gsub('{%x%x%x%x%x%x}', '') -- строка станет без hex-цвет
:gsub('\t', ' ') -- заменяет табы на пробелы
:gsub('\n+', '\n') -- убирает пустые строка если будет несколько переносов (enter)
for line in dText:gmatch('[^\n]+') do
line = line:gsub('%s+', ' ') -- заменяет пробелы на 1 пробел
:gsub('^%s+$', '') -- заменяет пробелы весь строка на пустой, т.к. стоит ^$ как пожестоже
if line:find('^Автор: %S-%[%d+%]$') then
dataReport.author.nickname, dataReport.author.id = line:match('^Автор: (%S-)%[(%d+)%]$')
-- если там в переменнах вернет числа, но при :match все возвращают в строковых значений или nil, поэтому:
dataReport.author.id = tonumber(dataReport.author.id)
elseif line:find('^Сообщение: .*$') then
-- рано или поздно игроки забагают как пустое сообщение, то укажем .* и в начале ^
-- можно ставить $ в конце, если сообщение репорта автоматически ставится точка или шаблонное слово
dataReport.message = line:match('^Сообщение: (.*)')
end
end
dataReport.state = true
--[[
И по идее должно хранить в таблице после вышеперечисленных алгоритмов:
dataReport.state: true
dataReport.author.nickname: Player_Name
dataReport.author.id: 123
dataReport.message: 61 дм
Для вывода в фрейм желательно записать в imgui значением, например, для mimgui
чтобы вывело раз и навсегда без постоянной перекодировки в u8 в фрейм.
если будет изменение в диалоге, то их нужно снова записать и выводить
теперь записываем переменные для вывода фрейм:
но желательно сначала создать локальные переменные для форматирование
готовые рег. выражение для string.format:
local author = string.format(dataReport.template.author, dataReport.author.nickname, dataReport.author.id)
local message = string.format(dataReport.template.message, dataReport.message)
записываем в строковых значениях mimgui и ид:
dataReportImgui.state[0] = dataReport.state
imgui.StrCopy(dataReportImgui.author, u8(author))
imgui.StrCopy(dataReportImgui.message, u8(message))
]]
end
-- frame:
imgui.Text(dataReportImgui.author)
imgui.Text(dataReportImgui.message)