LUA脚本打开/关闭脚本

时间:2016-05-25 11:05:12

标签: lua logitech logitech-gaming-software

我正在用LUA / logitech脚本API编写脚本。该脚本应执行以下操作:

  • 鼠标键4打开/关闭脚本
  • 鼠标键5从一个功能切换到另一个功能(强制移动和自动攻击)

    代码如下:

    forceMove = false
    on = false
    function OnEvent(event, arg)
        --OutputLogMessage("event = %s, arg = %s\n", event, arg);
        if IsMouseButtonPressed(5) then
            forceMove = not forceMove
            while(on) do
                if(forceMove) then
                    ForceMove()
                else
                    StartAttack()
                end
            end
        ReleaseMouseButton(5)
        end
    
        if IsMouseButtonPressed(4) then
            on = not on
            ReleaseMouseButton(4)
        end
    end
    
    function StartAttack()
        PressAndReleaseMouseButton(1)
        Sleep(1000)
    end
    
    function ForceMove()
        MoveMouseWheel(1)
        Sleep(20)
        MoveMouseWheel(-1)
    end
    

    但是一旦在游戏中,如果我用鼠标按钮4激活脚本,我会陷入“强制移动”模式,“自动攻击”模式永远不会起作用。无法理解为什么。

  • 1 个答案:

    答案 0 :(得分:1)

    按下鼠标按钮5时,激活“强制移动”模式。如果同时启用“开启”模式,则会导致无限循环:

    while(on) do
        if(forceMove) then
            ForceMove()
        else
            StartAttack()
        end
    end -- loops regardless of mouse buttons
    

    无论您按下哪个鼠标按钮,您都将永远留在这里。 您需要从鼠标事件处理程序中移出执行代码。处理程序应该只更新像forceMove这样的值,执行操作需要另一个函数。在这些功能中,您只执行一步,而不是很多步骤。 然后再次检查按下的鼠标按钮,执行操作等。 代码示例:

    function update()
        if IsMouseButtonPressed(4) then
            on = not on
        end
        if IsMouseButtonPressed(5) then
            forceMove = not forceMove
        end
    end
    
    function actions()
        if on then
            if forceMove then
                ForceMove()
            end
        end
    end
    

    如何将它组合在一起: 你必须使用某种循环,但理想情况下游戏引擎应该为你做这个。它看起来像这样:

    local is_running = true
    while is_running do
        update()
        actions()
    end
    

    现在,如果按下某个按钮,则会将当前状态保存在某些全局变量中,这些变量可通过更新和操作进行访问。每个周期调用函数(可以是一帧的计算)。假设您没有按任何其他按钮,则update()不执行任何操作,因此forceMoveon保持不变。 通过这种方式,您可以在没有循环操作的情况下进行连续移动()。