хук сообщений от сервера с временем отправления

HOG

Известный
Автор темы
48
16
Версия MoonLoader
Другое
Ловлю сообщение с сервера, в зависимости от количества этих сообщение разнятся ответы. Все работает хорошо, но есть один случай, когда все ломается. Предполагается, что это сообщение приходит с определенной задержкой, последовательно, например, не чаще, чем раз в 30 секунд. Если приходит сразу три сообщения, с задержкой между сообщениями <= 30 секунд, то оно должно засчитываться в message_counter как одно, соотвественно, события так же должно выполняться для единичного события. Как прикрутить сюда счетчик времени?
Скрины для лучшего понимания.
Нормальная работа:
7YjxoBdM9-E.jpg

Плохая, нужно чтобы три флуд сообщения хукнулось как одно, так как задержка между ними меньше 30 сек:
m-CDHit4J4g.jpg

lua:
message_counter = 0
function sampev.onServerMessage(color, text)
    if text:match('Hello world') then
        lua_thread.create(function()
            message_counter = message_counter + 1
            if message_counter == 1 then
            wait(6000)
                sendInput('hooked for the first time')
            elseif message_counter == 2 then
            wait(6000)
                sendInput('hooked for the second time')
            else
            wait(6000)
                sendInput('hooked several times')
            end
        end)
    end
end
 
Решение
Тут два способа реализации: по переменной и собственно по времени.
В первом случае, объявляется переменную, например, isHook = false, дополнительно к text:match делаешь условие and not isHook, а после условия - isHook = true, в конце потока обнуляешь переменную isNoHook = false. Тем самым это не даст активироваться при флуде.
Во втором случае, ты также объявляется переменную , но уже как lastHook = os.clock() - 30,. А в условии делаешь and os.clock() - lastHook > 30, что не даст выполниться условию, пока не пройдет 30 секунд. В начале потока объявляется lastHook = os.clock(), чем объявляешь последнее время хука.


Lua:
----------- Первый вариант
local isHook = false
function...

Hatiko

Известный
Проверенный
1,512
628
Тут два способа реализации: по переменной и собственно по времени.
В первом случае, объявляется переменную, например, isHook = false, дополнительно к text:match делаешь условие and not isHook, а после условия - isHook = true, в конце потока обнуляешь переменную isNoHook = false. Тем самым это не даст активироваться при флуде.
Во втором случае, ты также объявляется переменную , но уже как lastHook = os.clock() - 30,. А в условии делаешь and os.clock() - lastHook > 30, что не даст выполниться условию, пока не пройдет 30 секунд. В начале потока объявляется lastHook = os.clock(), чем объявляешь последнее время хука.


Lua:
----------- Первый вариант
local isHook = false
function sampev.onServerMessage(color, text)
    if text:match('Hello world') and not isNoHook then
        isHook = true
        lua_thread.create(function()
            message_counter = message_counter + 1
               -- твои условия
            isHook = false
        end)
    end
end

---------------Второй вариант---------------
local lastHook = os.clock() - 30
function sampev.onServerMessage(color, text)
    if text:match('Hello world') and os.clock() - lastHook > 30 then
        lastHook = os.clock()
        lua_thread.create(function()
            message_counter = message_counter + 1
               -- твои условия
        end)
    end
end
 
  • Нравится
Реакции: YarikVL и HOG