Lua代码实现鼠标宏

 注意:本文仅是技术交流,滥用技术者将自行承担后果


目录

一、什么是鼠标宏

二、射击游戏鼠标宏的制作原理

三、FPX鼠标宏带来的危害


一、什么是鼠标宏

  1. 鼠标宏是一种使用特定软件或设备编写和执行的自动化脚本,用于模拟和复制鼠标操作。它可以记录和重放一系列鼠标点击、移动和其他鼠标事件,以实现自动化操作。
  2. 通过鼠标宏,用户可以将一系列复杂的鼠标操作录制下来,并将其保存为一个宏文件。然后,用户可以使用宏文件来自动执行这些鼠标操作,代替手动重复执行它们。
  3. 鼠标宏通常用于提高生产效率、简化重复性任务、自动化游戏操作等。例如,在办公环境中,可以使用鼠标宏来自动执行一系列常见的编辑、格式化或数据处理操作。在游戏中,鼠标宏可以帮助玩家自动执行一些繁琐的操作,如快速连续点击、释放技能等。

二、射击游戏鼠标宏的制作原理

想要了解鼠标宏的制作原理,那么几个基本的方法需要知道

2.1.lua鼠标宏的基本方法:

方法 描述
PressMouseButton() 按下鼠标按钮。
ReleaseMouseButton() 松开鼠标按钮。
Sleep() 暂停执行指定的时间间隔。
MoveMouseRelative() 相对于当前鼠标位置移动鼠标。
IsMouseButtonPressed() 检查指定的鼠标按钮是否被按下

2.2.鼠标宏执行流程

鼠标宏在FPX中可以用来自动压枪,那么是如何实现的呢?其实很简单,那就是鼠标能够通过函数识别到每一发子弹所对应的弹道,根据弹道的位置,通过函数MoveMouseRelative()自动的偏移向中间的位置。从而实现枪枪都会到达准星。

2.3.两种实现压枪鼠标宏方式

我认为有两种可以实现鼠标宏的方式,一种是牺牲攻速以换取准确度,一种是根据弹道动态调整。

第一种,牺牲攻速以换取准确度(最简单的做法)。

  1. 鼠原理是通过记录前几发比较准的子弹(比如前三发子弹)的时间来实现固定准星,然后在按下鼠标宏按键时自动触发连续发射三发子弹。
  2. 为了达到这个目的,需要使用循环函数来检测按键状态,并在每次检测到按键按下时发射三发子弹。
  3. 然而,需要注意的是,如果连续发射的间隔太短,游戏会将其视为连续开枪而不是独立的开枪。因此,在设置中需要合理地设置三连发之间的间隔,使系统认为每三发子弹之间都是独立的。

案例(游戏:幽灵行动-荒野 P-416步枪):

查看前3发子弹弹道是准确的,那么设置一个计时器计算前三发所用的时间,手机上通过计时器计算打完一个弹夹的时间就可以知道1s能发射多少发子弹,从而计算3发所用时间

 设置完后相关代码如下

lock = 5 --设置按键
switch = false --设置开关,默认关闭
EnablePrimaryMouseButtonEvents(true)--开启鼠标监听

--主程序入口
function OnEvent(event, arg)
    --监听是否按下了指定按键,如果是则开关开,并且输出信息On
    if event == "MOUSE_BUTTON_PRESSED" and arg == lock then
        switch = true
        OutputLogMessage("On\n")
        --如果不是指定按键,则开关关闭,并且输出信息Off
    elseif event == "MOUSE_BUTTON_RELEASED" and arg == lock then
        switch = false
        OutputLogMessage("Off\n")
    end

    if switch then
        -- 当开关开启并且按键为指定按键时候循环执行函数
        if IsMouseButtonPressed(5) then
            repeat
                --按下鼠标左键
                PressMouseButton(1)
                --持续200到250毫秒之间的随机值,保证有三发子弹时间
                Sleep(math.random(200, 250))
                --松开左按键
                ReleaseMouseButton(1)
               
                --设置连发之间的间隔
                Sleep(math.random(250,300 ))
            until not IsMouseButtonPressed(5)
        end
    end
end

多次连发效果图:

第二种,通过弹道实现动态调整。

第二种的动态调整,相比于第一种,实现了不牺牲攻速的情况下就能够实现全弹夹基本都能到准星。这种相比第一种,增加了一个计数器count,通过count知道现在是第几发子弹,当count>弹夹内子弹数目的时候则自动关闭开关,并停止循环,

案例(某二次元射击游戏)

第一步获取弹道(需要枪械是固定弹道,如果是随机弹道则无法实现)

第二步分析弹道

可以看到首先所有子弹都需要下移,然后具体分析前三发需要下移更多一些,3~9发需要左移,9~13发需要右移,然后不动,在20~25发需要左移,超过25发则关闭开关

第三步,根据分析结果写代码

lock = 5
switch = false
count = 0 --设置计数器,统计子弹数目
EnablePrimaryMouseButtonEvents(true)

function OnEvent(event, arg)
    if event == "MOUSE_BUTTON_PRESSED" and arg == lock then
        switch = true
        OutputLogMessage("On\n")
    elseif event == "MOUSE_BUTTON_RELEASED" and arg == lock then
        switch = false
        OutputLogMessage("Off\n")
    end
    
    count = 0
    
    if switch and IsMouseButtonPressed(5) then
        while true do
            PressMouseButton(1)
            Sleep(math.random(60, 80))
            MoveMouseRelative(0, 7)
            ReleaseMouseButton(1)
            count = count + 1
            
--参数自行调整设置,
--MoveMouseRelative(0, 0)左边的参数是负责左右移动,正为右移 5(右移5个像素),负数为左移-2(左移两个像素)
---MoveMouseRelative(0, 0)左边的参数是负责上下移动,正为下移,负数为上移
            if count <= 3 then
                MoveMouseRelative(0, 0) -- 下移像素点
            elseif count < 9 then
                MoveMouseRelative(0, 0) -- 左移动像素点
            elseif count > 8 and count < 13 then
                MoveMouseRelative(0, 0) -- 右移动像素点
            elseif count > 20 and count <= 25 then
                MoveMouseRelative(0, 0) -- 左移动像素点
            elseif count > 25 then
                switch = false -- 关闭开关
                break  -- 结束循环
            end
            
            OutputLogMessage(tostring(count) .. "\n")
            Sleep(math.random(8, 12))
            
            if not IsMouseButtonPressed(5) then
                break  -- 结束循环
            end
        end
    end
end

最后检测与优化(可以看到基本都在一个位置,如果不满意则可以继续调试参数)


三、FPX鼠标宏带来的危害

  1. 违反游戏规则:在多人在线游戏中,使用鼠标宏进行作弊行为违反了游戏的公平性原则。这可能会破坏游戏的竞争环境,影响其他玩家的游戏体验,并降低游戏的可玩性。

  2. 经济影响:在一些游戏中,虚拟物品和游戏币具有真实货币价值。通过滥用鼠标宏获取大量游戏物品或游戏币可能导致虚假经济的波动,破坏游戏内部的经济平衡。

  3. 社区不和谐:滥用鼠标宏可能引发争议和纷争,导致游戏社区内部的不和谐氛围。其他玩家可能会对滥用者感到愤怒和不满,这可能导致社区中的争吵、冲突甚至分裂。

  4. 安全风险:使用不受信任的鼠标宏软件或脚本可能存在安全风险。恶意的鼠标宏可能含有病毒、间谍软件或其他恶意代码,可能导致个人隐私泄露、账号被盗或计算机系统受损。

  5. 法律问题:在某些情况下,滥用鼠标宏可能违反相关法律法规。例如,在一些地区或游戏中,使用鼠标宏进行作弊被视为不当行为,可能导致法律纠纷或法律责任。

因此,滥用鼠标宏不仅违背了游戏规则和道德准则,还可能对游戏和玩家产生严重的负面影响。为了维护游戏的公正性和健康的游戏环境,应避免滥用鼠标宏,并遵守游戏的规定和相关法律法规。


注意:本文仅是技术交流,滥用技术者将自行承担后果

猜你喜欢

转载自blog.csdn.net/dogxixi/article/details/132445514