- 396
- 129
- Версия MoonLoader
- Другое
говнокод:
---===[ Libraries ]===---
local imgui = require 'mimgui'
local encoding = require 'encoding'
local inicfg = require 'inicfg'
local sampev = require 'lib.samp.events'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local new = imgui.new
---===[ Configuration ]===---
local IniFilename = 'ChatFinder.ini'
local cfg = inicfg.load({
main = {
active = true
},
writes = {
wr1 = '',
wr2 = '',
wr3 = '',
wr4 = '',
wr5 = '',
wr6 = ''
}
}, IniFilename)
messages = {}
tcount = 15
---===[ Variables ]===---
local renderWindow = imgui.new.bool(true)
local chatWindow = new.bool(cfg.main.active)
font = renderCreateFont('Arial', 25, 1)
local work = new.bool(cfg.main.active)
local inputField1 = new.char[256](cfg.writes.wr1)
local inputField2 = new.char[256](cfg.writes.wr2)
local inputField3 = new.char[256](cfg.writes.wr3)
local inputField4 = new.char[256](cfg.writes.wr4)
local inputField5 = new.char[256](cfg.writes.wr5)
local inputField6 = new.char[256](cfg.writes.wr6)
---===[ Mimgui Code ]===---
imgui.OnInitialize(function()
imgui.GetIO().IniFilename = nil
end)
local newFrame = imgui.OnFrame(
function() return renderWindow[0] end,
function(player)
local resX, resY = getScreenResolution()
local sizeX, sizeY = 450, 280
imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
if imgui.Begin('> Chat Finder v1.0 <', renderWindow) then
imgui.TextWrapped(u8'Отдельный чат с поиском по ключевым словам :)')
imgui.NewLine()
imgui.Separator()
imgui.NewLine()
imgui.Checkbox(u8'Активация', work)
imgui.NewLine()
imgui.InputTextWithHint(u8'Слово №1', u8'Введите слово для поиска', inputField1, 256)
imgui.InputTextWithHint(u8'Слово №2', u8'Введите слово для поиска', inputField2, 256)
imgui.InputTextWithHint(u8'Слово №3', u8'Введите слово для поиска', inputField3, 256)
imgui.InputTextWithHint(u8'Слово №4', u8'Введите слово для поиска', inputField4, 256)
imgui.InputTextWithHint(u8'Слово №5', u8'Введите слово для поиска', inputField5, 256)
imgui.InputTextWithHint(u8'Слово №6', u8'Введите слово для поиска', inputField6, 256)
imgui.End()
end
end
)
local newFrame2 = imgui.OnFrame(
function() return chatWindow[0] end,
function(player)
local resX, resY = getScreenResolution()
local sizeX, sizeY = 450, 280
imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
if imgui.Begin('> Chat Finder v1.0 <', chatWindow, imgui.WindowFlags.NoDecoration + imgui.WindowFlags.NoInputs + imgui.WindowFlags.NoBackground) then
imgui.Text(u8'ChatFinder')
for k, v in ipairs(messages) do
imgui.TextColoredRGB(v)
end
imgui.End()
end
end
)
---===[ Main Code ]===---
function main()
while not isSampAvailable() do wait(0) end
sampRegisterChatCommand('cfind', function()
renderWindow[0] = not renderWindow[0]
end)
while true do
wait(0)
print(#messages)
if #messages > 14 then
table.remove(messages, 0)
end
end
end
function sampev.onServerMessage(color, text)
table.insert(messages, text)
end
function imgui.TextColoredRGB(text)
local style = imgui.GetStyle()
local colors = style.Colors
local ImVec4 = imgui.ImVec4
local explode_argb = function(argb)
local a = bit.band(bit.rshift(argb, 24), 0xFF)
local r = bit.band(bit.rshift(argb, 16), 0xFF)
local g = bit.band(bit.rshift(argb, 8), 0xFF)
local b = bit.band(argb, 0xFF)
return a, r, g, b
end
local getcolor = function(color)
if color:sub(1, 6):upper() == 'SSSSSS' then
local r, g, b = colors[1].x, colors[1].y, colors[1].z
local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
return ImVec4(r, g, b, a / 255)
end
local color = type(color) == 'string' and tonumber(color, 16) or color
if type(color) ~= 'number' then return end
local r, g, b, a = explode_argb(color)
return imgui.ImVec4(r/255, g/255, b/255, a/255)
end
local render_text = function(text_)
for w in text_:gmatch('[^\r\n]+') do
local text, colors_, m = {}, {}, 1
w = w:gsub('{(......)}', '{%1FF}')
while w:find('{........}') do
local n, k = w:find('{........}')
local color = getcolor(w:sub(n + 1, k - 1))
if color then
text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
colors_[#colors_ + 1] = color
m = n
end
w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
end
if text[0] then
for i = 0, #text do
imgui.TextColored(colors_[i] or colors[1], u8(text[i]))
imgui.SameLine(nil, 0)
end
imgui.NewLine()
else imgui.Text(u8(w)) end
end
end
render_text(text)
end
Делаю наподобии мимгуи чата и добавлю текст в мимгуи окно. Там есть лимит 14 строк и при их заполнении надо удалять весь текст из таблицы и мимгуи окна, из кода выше можете увидить что пытался сделать