Как остановить функцию при одиночном снимке, но включить при аэрозольной / автоматической съемке

Я сделал небольшой сценарий против отдачи для игровой мыши LUA logitech, и кажется, что он выполняет функцию, но когда я делаю одиночный выстрел, он делает все это и не останавливается, когда кнопка мыши не нажата:

    function OnEvent(event, arg)
    OutputLogMessage("event = %s, arg = %d\n", event, arg)
    if (event == "PROFILE_ACTIVATED") then
        EnablePrimaryMouseButtonEvents(true)
    elseif event == "PROFILE_DEACTIVATED" then
        ReleaseMouseButton(2)
    end
    if (event == "MOUSE_BUTTON_PRESSED" and arg == 5) then
        kaki = not kaki
        kus = not kus
    end
   if (event == "MOUSE_BUTTON_PRESSED" and arg == 1 and kaki) then
        if kaki then
            repeat
                Sleep(50)
                MoveMouseRelative(0, 1)
                Sleep(100)
                MoveMouseRelative(0, 16)
                Sleep(100)
                MoveMouseRelative(0, 26)
                Sleep(100)
                MoveMouseRelative(-2, 25)
                Sleep(100)
                MoveMouseRelative(10, 28)
                Sleep(100)
                MoveMouseRelative(8, 25)
                Sleep(100)
                MoveMouseRelative(10, 15)
                Sleep(100)
                MoveMouseRelative(-14, 15)
                Sleep(100)
                MoveMouseRelative(-34, -1)
                Sleep(100)
                MoveMouseRelative(-18, 0)
                Sleep(100)
                MoveMouseRelative(10, 10)
                Sleep(100)
                MoveMouseRelative(-13, 5)
                Sleep(100)
                MoveMouseRelative(-20, -5)
                Sleep(100)
                MoveMouseRelative(-5, 0)
                Sleep(100)
                MoveMouseRelative(33, 3)
                Sleep(100)
                MoveMouseRelative(15, 6)
                Sleep(100)
                MoveMouseRelative(15, 5)
                Sleep(100)
                MoveMouseRelative(20, 0)
                Sleep(100)
                MoveMouseRelative(28, -10)
                Sleep(100)
                MoveMouseRelative(-15, 4)
                Sleep(100)
                MoveMouseRelative(5, 0)
                Sleep(100)
                MoveMouseRelative(-8, 8)
                Sleep(100)
                MoveMouseRelative(-6, 4)
                Sleep(100)
                MoveMouseRelative(3, -2)
                MoveMouseRelative(13, 0)
                Sleep(100)
                MoveMouseRelative(5, 0)
                Sleep(100)
                MoveMouseRelative(-15, 0)
                Sleep(100)
                MoveMouseRelative(-30, 0)
                Sleep(100)
                MoveMouseRelative(-35, -13)
                Sleep(100)
                MoveMouseRelative(-13, -4)
                Sleep(100)
            until not IsMouseButtonPressed(1)
        end
    end
end

Любые предложения о том, как отменить функцию на полпути или когда кнопка мыши не нажата, и цикл не завершится и не закончится там, где был сделан последний выстрел.

(В игре, когда я стреляю одиночным выстрелом - мышка перемещает всю процедуру отдачи)

1 ответ

Попробуйте использовать сопрограмму.

if kaki then
     local cor = coroutine.create(function()
     MoveMouseRelative(0, 1)
     coroutine.yield()
     MoveMouseRelative(0, 16)
     coroutine.yield()
     MoveMouseRelative(0, 26)
     coroutine.yield()
     MoveMouseRelative(-2, 25)
     coroutine.yield()
     MoveMouseRelative(10, 28)
     coroutine.yield()
     MoveMouseRelative(8, 25)
     coroutine.yield()
     MoveMouseRelative(10, 15)
     coroutine.yield()
     MoveMouseRelative(-14, 15)
     coroutine.yield()
     MoveMouseRelative(-34, -1)
     coroutine.yield()
     MoveMouseRelative(-18, 0)
     coroutine.yield()
     MoveMouseRelative(10, 10)
     coroutine.yield()
     MoveMouseRelative(-13, 5)
     coroutine.yield()
     MoveMouseRelative(-20, -5)
     coroutine.yield()
     MoveMouseRelative(-5, 0)
     coroutine.yield()
     MoveMouseRelative(33, 3)
     coroutine.yield()
     MoveMouseRelative(15, 6)
     coroutine.yield()
     MoveMouseRelative(15, 5)
     coroutine.yield()
     MoveMouseRelative(20, 0)
     coroutine.yield()
     MoveMouseRelative(28, -10)
     coroutine.yield()
     MoveMouseRelative(-15, 4)
     coroutine.yield()
     MoveMouseRelative(5, 0)
     coroutine.yield()
     MoveMouseRelative(-8, 8)
     coroutine.yield()
     MoveMouseRelative(-6, 4)
     coroutine.yield()
     MoveMouseRelative(3, -2)
     MoveMouseRelative(13, 0)
     coroutine.yield()
     MoveMouseRelative(5, 0)
     coroutine.yield()
     MoveMouseRelative(-15, 0)
     coroutine.yield()
     MoveMouseRelative(-30, 0)
     coroutine.yield()
     MoveMouseRelative(-35, -13)
     coroutine.yield()
     MoveMouseRelative(-13, -4)
  end)
  coroutine.resume(cor)
  repeat
     Sleep(100)
     coroutine.resume(cor)
  until not IsMouseButtonPressed(1)
end
Другие вопросы по тегам