Помощь в работе скрипта

Vino

Новичок
Автор темы
2
0
Скрипт для ловли репортов на сервере.
Основной функционал его работы:
1. Скрипт реагирует на сообщения в чате
Lua:
[Жалоба] playerName[reportID]:
, при обнаружении кидает /ot
2. Далее задержка (Не спрашивайте почему, нужна), при ловле репорта, проходит задержка в 250 мл секунд, с помощью os.clock()
3. Активация /gr
Сам скрипт:
Lua:
require 'lib.moonloader'
local sampev = require 'lib.samp.events'

local active = false
local time = os.clock() + 0.25

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampAddChatMessage('{FF0000}[Репорт]{8A2BE2} Vino', 0xFF634F)

    sampRegisterChatCommand('gr', function()
        active = not active
        local message = active and '{00FF00}Скрипт активирован' or '{FF0000}Скрипт деактивирован'
        sampAddChatMessage(message, -1)
    end)

    while true do
        wait(0)
        if active and os.clock() > time then
            checkForReport()
            time = os.clock() + 0.25
        end
    end
end

function checkForReport()
    for _, message in ipairs(sampGetMessages()) do
        if message:find('%[Жалоба%] (%w+_%w+)%[%d+%]:') and active then
            sampSendChat('/ot')
            return
        end
    end
end

function sampev.onServerMessage(color, text)
    if text:find('%[Жалоба%] (%w+_%w+)%[%d+%]:') and active then
        sampSendChat('/ot')
    end
end

Видимо не реагирует на репорт
 

Tectrex

Известный
139
164
У тебя куча ошибок, первая, задержка через os.clock() неточная, она не синхронизируется с игровым циклом и сбивает тайминг, вторая, у тебя два метода проверки сообщений, они конфликтуют и мешают друг другу, и третье, нет защиты от повторной обработки одного репорта, из за чего может быть спам команд. Убери лишний обработчик, оставь один способ проверки, используй wait() для задержки
 

Vino

Новичок
Автор темы
2
0
Вместо os.clock(), поставил wait(300) чтобы синхронизация точно была с игровым циклом. Также оставил один метод отправки sampev.onServerMessage(). По поводу остального, скрипт выключается грубо говоря, после того как он взял репорт, желательно исправить это, чтобы скрипт работал до того момента, пока его не выключат через команду. И думаю что задержка перед взятием репорта, 300 мл секунд, работает не совсем корректно
Lua:
require 'lib.moonloader'
local sampev = require 'lib.samp.events'

local active = false

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampAddChatMessage('{FF0000}[Репорт]{8A2BE2} Vino', 0xFF634F)

    sampRegisterChatCommand('gr', function()
        active = not active
        local message = active and '{00FF00}Скрипт активирован' or '{FF0000}Скрипт деактивирован'
        sampAddChatMessage(message, -1)
    end)

    while true do
        wait(0) 
    end
end

function sampev.onServerMessage(color, text)
    if active then
        local reportPlayer = text:match('%[Жалоба%] (%w+_%w+)%[%d+%]:')
        if reportPlayer then
            sampSendChat('/ot')

            wait(300)
        end
    end
end