- 5
- 0
Online Monitoring - Модифицированный чекер очереди и онлайна всех серверов на базе скрипта от Rifla.
Скрипт позволяет проверять очередь любого из серверов с возможностью отправки информации в вип-чат.
не обращайте внимания на онлайны серверов, на момент снимка скриншота на сервера заливают обнову)
не обращайте внимания на онлайны серверов, на момент снимка скриншота на сервера заливают обнову)
Функционал скрипта:
— Мониторинг очереди и онлайна: Скрипт получает данные напрямую из API, позволяя получить информацию, как для себя, так и для других интересующихся в вип-чат. Выдаёт: онлайн и лимит игроков, а самое главное, количество человек в очереди на любой сервер проекта или Vice City.— Умный автоответчик: Если в VIP-чате кто-то спросит: "Сколько очередь на VC?" или "Че по онлайну на 30?", скрипт автоматически подтянет инфу и ответит игроку. Скрипт распознает названия серверов как на русском, так и на английском языке, также скрипт поддерживает практически любые формулировки, и отправляет ответ в /vr при наличии 2+ триггеров в сообщении.
local triggers:
local triggers = {
"скок", "сколько", "какая", "че по",
"очередь", "очередь на", "онлайн",
"вс", "вай сити", "вайсити",
"30", "лов", "лове"
}
Логика работы триггеров:
local matchCount = 0 -- каунтер
for _, word in ipairs(triggers) do if paddedMsg:find(" " .. word .. " ", 1, true) then matchCount = matchCount + 1 end end -- парс триггеров
if matchCount < 2 then return end -- проверка
— Визуальный интерфейс: Приятное графическое окно с плавной анимацией появления. Вся нужная информация перед глазами, без лишнего мусора в чате.
Кастомный интерфейс:
lua_thread.create(function()
while true do wait(0)
if show and alpha < 255 then alpha = math.min(alpha + 25, 255)
elseif not show and alpha > 0 then alpha = math.max(alpha - 25, 0) end
if alpha > 0 or show then
pcall(drawUI, alpha)
if show then
if isKeyDown(vkeys.VK_ESCAPE) then show = false endo
if isKeyDown(vkeys.VK_R) and not isBusy then updateData() end
if isKeyDown(vkeys.VK_V) and not isBusy then
local str = string.format("/vr [%s] %s %s | Онлайн: %d/%d | Очередь: %d", srv_tags[currentServer], data.name, srv_emojis[currentServer], data.online, data.max, data.queue)
safeChatSend(str)
end
end
end
end
end)
-- UI
function drawUI(a)
local qCol = data.queue < 20 and 0x95F3AA or (data.queue < 100 and 0xFFD783 or 0xFF0000)
renderDrawBox(x, y, w, h, bit.bor(bit.lshift(math.floor(a * 0.8), 24), 0x12131B))
renderFontDrawText(FONT_TITLE, data.name .. string.format(" (%d/%d)", data.online, data.max), x + 25, y + 40, bit.bor(bit.lshift(a, 24), 0xFFFFFF))
renderFontDrawText(FONT_MAIN, "Очередь: " .. data.queue, x + 25, y + 125, bit.bor(bit.lshift(a, 24), qCol))
end
-- API
function updateData()
if isBusy then return end -- чекер статуса
isBusy = true
lua_thread.create(function()
local ok, res = pcall(requests.get, "https://api.arizona-five.com/launcher/servers", {timeout = 5}) -- запрос API
if ok and res and res.status_code == 200 then
-- тут парсинг json и заполнение таблицы data
end
isBusy = false -- сброс статуса
end)
end
— Анти-флуд: Скрипт имитирует действия человека:
- Скрипт использует случайные задержки перед ответом. []Имеет встроенную очередь сообщений.
- Присутствует КД: 60 секунд на одного игрока и 40 секунд общего КД на автоответы.
Антифлуд:
-- Глобальный КД
function safeChatSend(msg)
table.insert(chatQueue, msg) -- добавление
if not isQueueActive then
isQueueActive = true -- лок потока
lua_thread.create(function()
while #chatQueue > 0 do
sampSendChat(chatQueue[1]) -- отправка первого
table.remove(chatQueue, 1) -- удаление
wait(3500) -- задержка флуда
end
isQueueActive = false -- анлок
end)
end
end
-- Стоп-краны
function sampev.onServerMessage(color, text)
if os.clock() - absoluteLastSendTime < 3.0 then return end -- системное КД арз 3 сек
-- КД пользователя и глобальный КД
local now = os.time()
if userCooldowns[nick] and now - userCooldowns[nick] < 60 then return end -- личный КД
if now - lastGlobalRequestTime < 40 then return end -- общий КД
-- Отправка
absoluteLastSendTime = os.clock()
end
— Конфиг: Все настройки скрипта (включен ли автоответ или пиар работы скрипта) сохраняются в конфиг monitor_settings.ini и не сбиваются после перезапуска игры.
— Недоработки: В текущей версии кнопка "B" в меню была выпелена из-за лимитов аризоны на кол-во символов в /b. Будет доработано.
Необходимые библиотеки:
- MoonLoader 0.26
- SAMP.Lua (samp.events)
- Requests
- Inicfg
- Encoding
- Vkeys
Lua:
local requests = require("requests") local vkeys = require("vkeys") local encoding = require("encoding") local sampev = require("samp.events") local inicfg = require("inicfg")
Команды управления:
| /vc | Мгновенно открыть мониторинг сервера Vice City |
| /online [сервер] | Посмотреть онлайн любого сервера (например: /online 30) |
| /checkvr | Включить/Выключить автоматические ответы в VIP-чат |
| /checkpiar | Включить/Выключить пиар функций скрипта (КД 10 минут) |
Горячие клавиши в меню:
- [R] — Обновить инфу
- [V] — Отправить инфо о сервере в VIP-чат
- [ESC] — Закрыть окно
Большое спасибо Рифле и великому чату-gpt за отличную идею и реализоацию кода, на котором базируется скрипт)
roodyu aka M-blasthk
Вложения
Последнее редактирование: