如何在单发状态下停止函数,但启用连发/自动射击

我为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

有何建议可以在函数执行中途或鼠标按钮未按下时取消函数,使循环不会完成并在最后一枪结束。

(在游戏中,当我单发时,鼠标将移动整个后坐力过程)

点赞
用户8729520
用户8729520

尝试使用协程。

如果kaki then
     本地协同程序=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(本地协同程序)
  重复
     睡眠(100)
     coroutine.resume(本地协同程序)
  直到not IsMouseButtonPressed(1)
end
2017-10-06 00:51:37