local sampev = require "samp.events"
local imgui = require "mimgui"
local encoding = require "encoding"
encoding.default = "CP1251"
u8 = encoding.UTF8
local window = imgui.new.bool(false)
local posX, posY = 400, 800 -- Позиция окна по X и Y соответственно
local state = false
local admins = {}
local interval4 = 4 -- Интервал для обновления /admins
local interval8 = 8 -- Интервал для обновления /admins
function main()
while not isSampAvailable() do wait(0) end
sampRegisterChatCommand("adms", function()
state = not state
window[0] = not window[0]
lua_thread.create(function()
sampAddChatMessage("Admin Checker "..(state and "enabled" or "disabled"), -1)
if state then
sampSendChat("/admins")
timer = os.clock()
end
while state do wait(0)
local elapsedTime = os.clock() - timer
if elapsedTime > interval4 then
sampSendChat("/admins")
timer = os.clock()
elseif elapsedTime > interval8 then
-- Дополнительная логика для интервала 8 секунд, если требуется
end
end
end)
end)
wait(-1)
end
imgui.OnInitialize(function()
imgui.GetIO().IniFilename = nil
end)
imgui.OnFrame(function() return #admins > 0 and not isGamePaused() and window[0] end, function(self)
imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.SetNextWindowSize(imgui.ImVec2(150, 200), imgui.Cond.FirstUseEver)
imgui.Begin("##", nil, imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoMove)
self.HideCursor = true
if #admins > 0 then
for _, v in pairs(admins) do
imgui.TextColoredRGB(u8(v))
end
end
imgui.End()
end)
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
if state then
if title:gsub("{.-}", ""):find("Администрация в сети") then
lua_thread.create(function()
wait(10) -- Ждем, чтобы убедиться, что текст загружен
admins = {}
for line in text:gmatch("[^\n]+") do
table.insert(admins, line)
end
sampSendDialogResponse(dialogId, 1) -- Закрываем диалог
end)
return false -- Не показываем диалог
end
end
end
-- Для цвета
function imgui.TextColoredRGB(text)
local style = imgui.GetStyle()
local colors = style.Colors
local col = imgui.Col
local designText = function(text__)
local pos = imgui.GetCursorPos()
if sampGetChatDisplayMode() == 2 then
for i = 1, 1 do -- Степень тени
imgui.SetCursorPos(imgui.ImVec2(pos.x + i, pos.y))
imgui.TextColored(imgui.ImVec4(0, 0, 0, 1), text__) -- shadow
imgui.SetCursorPos(imgui.ImVec2(pos.x - i, pos.y))
imgui.TextColored(imgui.ImVec4(0, 0, 0, 1), text__) -- shadow
imgui.SetCursorPos(imgui.ImVec2(pos.x, pos.y + i))
imgui.TextColored(imgui.ImVec4(0, 0, 0, 1), text__) -- shadow
imgui.SetCursorPos(imgui.ImVec2(pos.x, pos.y - i))
imgui.TextColored(imgui.ImVec4(0, 0, 0, 1), text__) -- shadow
end
end
imgui.SetCursorPos(pos)
end
local text = text:gsub('{(%x%x%x%x%x%x)}', '{%1FF}')
local color = colors[col.Text]
local start = 1
local a, b = text:find('{........}', start)
while a do
local t = text:sub(start, a - 1)
if #t > 0 then
designText(t)
imgui.TextColored(color, t)
imgui.SameLine(nil, 0)
end
local clr = text:sub(a + 1, b - 1)
if clr:upper() == 'STANDART' then
color = colors[col.Text]
else
clr = tonumber(clr, 16)
if clr then
local r = bit.band(bit.rshift(clr, 24), 0xFF)
local g = bit.band(bit.rshift(clr, 16), 0xFF)
local b = bit.band(bit.rshift(clr, 8), 0xFF)
local a = bit.band(clr, 0xFF)
color = imgui.ImVec4(r / 255, g / 255, b / 255, a / 255)
end
end
start = b + 1
a, b = text:find('{........}', start)
end
imgui.NewLine()
if #text >= start then
imgui.SameLine(nil, 0)
designText(text:sub(start))
imgui.TextColored(color, text:sub(start))
end
end