罗技 Lua 脚本和循环

问题描述

我的脚本在这里使用罗技鼠标时遇到了一点问题。我将在游戏中使用它进行耕作。

function OnEvent(event,arg)
   if event == "MOUSE_BUTTON_pressed" and arg == 5 then
    for i = 0,300 do
            PressAndReleaseKey("f9")
            Sleep(400)
            PressAndReleaseKey("enter")
            Sleep(600)
            PressAndReleaseKey("f5")
            Sleep(50)
            PressMouseButton(1)
            Sleep(50)
            ReleaseMouseButton(1)
    end
            PressAndReleaseKey("1")
    repeat
    until IsMouseButtonpressed(3)
   end
end

因此它将循环 300 次,然后在完成后按 1,然后再次重复循环 300 次,以此类推。我面临的问题是,当我尝试中止脚本时,它将首先完成 for 循环,然后使用右键单击按钮(IsMouseButtonpressed(3))停止,这真的很难计时(300x 是很多)

如何在 for 循环期间暂停/停止它,可能吗?

解决方法

经常检查按钮是否被按下并打破循环。

打破那些长时间阻塞的睡眠。

而不是Sleep(400)考虑做类似的事情

for i = 1,400,50 do
  Sleep(50)
  if IsMouseButtonPressed(3) then break end
end
,

break

时,您可以使用 IsMouseButtonPressed(3) 跳出 for 循环
    for i = 0,300 do
        if IsMouseButtonPressed(3) then
            break -- exit for loop.
        end
        PressAndReleaseKey("f9")
        Sleep(400)
        PressAndReleaseKey("enter")
        Sleep(600)
        PressAndReleaseKey("f5")
        Sleep(50)
        PressMouseButton(1)
        Sleep(50)
        ReleaseMouseButton(1)
    end

这样做意味着您可以预期由于睡眠调用而导致的最大延迟为 1.1 秒,以便注册退出。


您可以通过添加一个函数来更改您的代码以在您的睡眠间隔期间轮询 IsMouseButtonPressed(3)

local function MousePollingSleep(time)
    loopCount = time / 50
    for i = loopCount,-1 do
        if IsMouseButtonPressed(3) then
            return false
        end
        sleepTime = (i >= 1 and 1 or i) * 50
        Sleep(sleepTime)
    end
    return true
end

并将您的 for 循环更改为

function OnEvent(event,arg)
   if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
      repeat
          for i = 0,300 do
              PressAndReleaseKey("f9")
              if MousePollingSleep(400) == false then break end
              PressAndReleaseKey("enter")
              if MousePollingSleep(600) == false then break end
              PressAndReleaseKey("f5")
              if MousePollingSleep(50) == false then break end
              PressMouseButton(1)
              if MousePollingSleep(50) == false then break end
              ReleaseMouseButton(1)
          end
          ReleaseMouseButton(1)
          PressAndReleaseKey("1")
      until IsMouseButtonPressed(3)
   end
end