【问题标题】:Logitech gaming software lua script repeat toggle罗技游戏软件 lua 脚本重复切换
【发布时间】:2021-07-05 01:58:32
【问题描述】:

我有一个脚本,它执行左键单击,然后向右移动约 1 厘米,然后再次单击并返回到左侧。

我希望这个脚本不断重复,直到我按下一个按钮,它使用哪个按钮并不重要(MB 1、2 和 3 除外。

我已经尝试了一段时间,重复和循环,我唯一实现的是一个非常复杂的脚本,每次运行后都会使软件崩溃,这有点烦人。

我认为我不正确理解重复功能。 谁能告诉我如何让它工作?

问候

编辑:我已经将代码更新为现在的样子,原始代码在它下面。

local mb4_status, exit_flag

local function Move(dx, dy, time, is_interruptable)
local t0 = GetRunningTime()
local prev_dx, prev_dy = 0, 0
repeat
  Sleep(15)
  local part = math.min(time, GetRunningTime() - t0) / time
  local current_dx = math.floor(part * dx)
  local current_dy = math.floor(part * dy)
  local x, y = current_dx - prev_dx, current_dy - prev_dy
  if x ~= 0 or y ~= 0 then
     MoveMouseRelative(x, y)
  end
  prev_dx, prev_dy = current_dx, current_dy
  local prev_mb4_status = mb4_status
  mb4_status = IsMouseButtonPressed(4)
  exit_flag = exit_flag or mb4_status and not prev_mb4_status
  until part == 1 or is_interruptable and exit_flag
  end

  function OnEvent(event, arg)
  if event == "MOUSE_BUTTON_PRESSED" and arg == 4 then
  if exit_flag then
     exit_flag = false
  else
     mb4_status = true
     local x = 44
     repeat
        PressMouseButton(1)
        Move(0, 0, 200, false)  -- equivalent to Sleep(200)
        ReleaseMouseButton(1)
        Move(x, 0, 1000, true)  -- mixture of MoveMouseRelative(44,0) +      Sleep(1000)
        x = -x
     until exit_flag
  end
  end
  end

function OnEvent(event, arg)
if (event == "MOUSE_BUTTON_PRESSED" and arg == 8) then
        for i = 1, 1 do
            PressMouseButton(1)
            Sleep(200)
            ReleaseMouseButton(1)
        end
        Sleep(500)
        for i = 5, 15 do
            MoveMouseRelative(4,0)
            Sleep(1)
        end
        Sleep(500)
        for i = 1, 1 do
            PressMouseButton(1)
            Sleep(200)
            ReleaseMouseButton(1)
        end
        Sleep(500)
        for i = 5, 15 do
            MoveMouseRelative(-4,0)
            Sleep(1)
        end
        Sleep(500)
end
end

【问题讨论】:

  • 所以,您需要以下内容:1)您按下 Btn#8,2)LGS 模拟鼠标点击并连续左右移动,3)您再次按下 Btn#8,4)LGS 停止模拟鼠标点击和移动。是你想要的吗?
  • 是的!我已经尝试了这么多小时,“重复”直到没有,有一次我让它工作了,有点,但它不会再停止了。如果我添加了睡眠,它会在保存时崩溃。

标签: lua toggle repeat logitech logitech-gaming-software


【解决方案1】:

我还没有测试过这段代码,但它至少应该让你知道如何处理这个问题。我的代码不是长时间阻塞睡眠,而是检查自启动以来已经过去了多少时间,并检查等待时按下的任何按钮的中止条件。

function OnEvent(event, arg)
if (event == "MOUSE_BUTTON_PRESSED" and arg == 8) then
    local function abortCondition()
      return IsMouseButtonPressed(1) or IsMouseButtonPressed(2) or IsMouseButtonPressed(3)
    end

    local function abortableSleep(delay)
      local startTime = GetRunningTime()
      while GetRunningTime() <= startTime + delay do
        if abortCondition() then return end
        Sleep(5)
      end
      return true
    end

    local function delayedClick(button, delay)
      PressMouseButton(button)
      Sleep(10)
      if not abortableSleep(delay-10) then return end
      ReleaseMouseButton(button)
      return true
    end

    repeat
  
      if not delayedClick(1, 200) then return end
      if not abortableSleep(500) then return end
      for i = 0, 10 do
        MoveMouseRelative(4,0)
        Sleep(1)
      end
      if not abortableSleep(500) then return end
      if not delayedClick(1, 200) then return end
      for i = 0, 10 do
        MoveMouseRelative(-4,0)
        Sleep(1)
      end
      if not abortableSleep(500) then return end
    until releaseCondition()
  end
end

【讨论】:

  • 太棒了!谢谢,我想现在明白为什么我不能让它工作了,我尽量保持简单哈哈
  • 哦,我的lgs刚刚崩溃,可能lgs本身有问题。我会努力做出调整。
  • delayedclick(button, delay) 不工作。第一次测试它向右移动,然后单击,向左移动,再次单击并停止,第二次测试,与之前相同,它只是按下鼠标按钮(1)并停止。
  • 也许你必须在轮询按钮状态之前插入一个短暂的睡眠。手册说更新按钮状态需要几毫秒
  • 我无法在任何地方添加 Sleep,它每次都会产生“nil”值错误。
【解决方案2】:

请注意使用 Btn#4 代替 Btn#8

local mb4_status, exit_flag

local function Move(dx, dy, time, is_interruptable)
   local t0 = GetRunningTime()
   local prev_dx, prev_dy = 0, 0
   repeat
      Sleep(15)
      local part = math.min(time, GetRunningTime() - t0) / time
      local current_dx = math.floor(part * dx)
      local current_dy = math.floor(part * dy)
      local x, y = current_dx - prev_dx, current_dy - prev_dy
      if x ~= 0 or y ~= 0 then
         MoveMouseRelative(x, y)
      end
      prev_dx, prev_dy = current_dx, current_dy
      local prev_mb4_status = mb4_status
      mb4_status = IsMouseButtonPressed(4)
      exit_flag = exit_flag or mb4_status and not prev_mb4_status
   until part == 1 or is_interruptable and exit_flag
end

function OnEvent(event, arg)
   if event == "MOUSE_BUTTON_PRESSED" and arg == 4 then
      if exit_flag then
         exit_flag = false
      else
         mb4_status = true
         local x = 44
         repeat
            PressMouseButton(1)
            Move(0, 0, 200, false)  -- equivalent to Sleep(200)
            ReleaseMouseButton(1)
            Move(0, 0, 300, true)   -- equivalent to Sleep(300)
            Move(x, 0, 1000, true)  -- mixture of MoveMouseRelative(44,0) + Sleep(1000)
            Move(0, 0, 300, true)
            x = -x
         until exit_flag
      end
   end
end

更新
我在移动和点击之间插入了睡眠 300 毫秒。
改变距离修改44
定时2001000300也可以修改

要更改“开始”按钮修改arg == 4
更改“停止”按钮修改IsMouseButtonPressed(4)(仅2-5个)
请注意,脚本故意忽略每秒钟按下“开始”按钮,因为它假定“开始”按钮与“停止”按钮相同

【讨论】:

  • 哇,非常感谢叶戈尔!它在我按 mb4 时开始,在我按 mb5 时停止。我可以更改移动和点击之间的延迟吗?
  • 我以为我有点理解如何制作简单的脚本,但看起来我完全是个菜鸟 hihi
猜你喜欢
  • 2021-07-28
  • 1970-01-01
  • 2021-08-14
  • 2021-11-02
  • 2020-07-25
  • 2021-11-12
  • 2021-04-12
  • 2021-08-13
  • 2020-11-02
相关资源
最近更新 更多