新手如何用AHK做游戏脚本?

一、准备阶段

二、学习基本的键盘按键、鼠标移动点击、等待方法

  • 键盘按键方法 send/sendinput如:我们想按一次 T 键,则可以用sendinput t (意思:按一次)或者 sendinput {t down} sendinput {t up} (意思:按下,抬起)来实现
  • 鼠标移动点击mousemove click如:我们想移动鼠标到游戏中的(1081,1067)坐标,则代码为 mousemove 1081,1067

    又比如我们想移动鼠标到(1081,1067)坐标,并点击一次,则代码为 click 1081,1067

    再比如我们想在移动后,点击4次当前位置,则代码为

    mousemove 1081,1067
    click,4

    (当然还有更多函数可以更简便的实现相应的功能,这里为方便理解就不介绍了)

  • 等待 sleep有时我们的代码会出现指令进行过快导致没有达到预定位置就进行下一步

    假如上面的:

    mousemove 1081,1067
    click,4

    这时候我们就可以添加一行等待数值,变成

    mousemove 1081,1067
    sleep 1000      ;等待1秒
    click,4

    如果我们想实现某某按键按下后等待一会再抬起来,这时候就可以用到sleep 来实现

    列如:

    sendinput {w down}
    sleep 15000
    sendinput {w up}

    表示为:向前走15秒(在一些游戏中W表示向前移动)

三、学习基本的找色、找图方法

找色、找图是游戏脚本中十分重要的功能(目的:判断怪物出现、判断技能冷却、接取完成任务等)

  • 找色getcolor
    • 如何使用找色首先我们需要工具:(SPY、自制的找色程序、Snipaste等等都行,下面以SPY为例)
      • SPY(AHK程序自带,在电脑搜索栏中直接搜索SPY就会出现)新手如何用AHK做游戏脚本?

        打开此软件后,软件会自动显示当前鼠标位置的坐标以及颜色,我们只需让鼠标移动到我们游戏中需要的位置然后记住SPY中的坐标以及颜色值即可

        新手如何用AHK做游戏脚本?

        注意:游戏中一些位置的颜色值是会实时变化的,我们需要选择不会变的位置,来保证自己的代码正确

      然后就是将获取到的位置坐标以及颜色值拷贝到代码中去:

      • 代码示例
        GetColor(1081,1067)=="227022"   ;使用的代码,修改相应的内容即可
        
        GetColor(x,y)                   ;封装的代码,一般情况下不需要更改
        {
        PixelGetColor,Color,x,y,RGB
        StringRight Color,Color,6
        Return Color
        }
        Return
  • 找图ImageSearch这个函数不做介绍,因为使用很不方便,新手不建议用这个函数
  • Findtext、大漠插件(主流方式)俩个都是很好的找色、找图,找字工具,使用方法网上都能找到,具体使用方法可以自行查找

四、学习一些常用的语句:if elseloop

  • if else 如果是,则。。。如果不是,则。。。有了上面的找色、找图我们就可以通过if else 来实现一些判断语句,如:

    我们想实现找到怪物自动攻击,没找到自动移动(假设坐标处的颜色表示怪物出现)

    if (GetColor(1081,1067)=="227022")    ;判断坐标(1081,1067)处的颜色是否为227022
    {                                                           ;如果是则按键盘的{4}键
    SendInput 4
    }
    Else                                                      ;如果不是则向前移动15秒
    {
    Sendinput {w down}
    Sleep 15000
    Sendinput {w up}
    }
    Return                              
    
    GetColor(x,y)                   ;封装的代码,一般情况下不需要更改,但必须有
    {                                      ;否则上面的判断将失效
    PixelGetColor,Color,x,y,RGB
    StringRight Color,Color,6
    Return Color
    }
    Return
    
    
  • loop 循环现在我们如果想要让上面的代码持续的运行直到怪物被打死或者消失,则
    loop{                                 ;循环进行{}中的代码直到坐标颜色不正确为止
    if (GetColor(1081,1067)=="227022")    ;判断坐标(1081,1067)处的颜色是否为227022
    {                                     ;如果是则按键盘的{4}键
    SendInput 4
    }
    Else                                  ;如果不是则向前移动15秒
    {
    Sendinput {w down}
    Sleep 15000
    Sendinput {w up}
    Break                                 ;退出当前循环,如果不加Break会导致死循环,出bug
    }
    }
    Return
    
    GetColor(x,y)                   ;封装的代码,一般情况下不需要更改,但必须有
    {                               ;否则上面的判断将失效
    PixelGetColor,Color,x,y,RGB
    StringRight Color,Color,6
    Return Color
    }
    Return
    
    

五、设置启动键::、实现按住鼠标侧键启动

  • ::如我们想实现F1启动代码,则可以
    F1::
    loop{                                 ;循环进行{}中的代码直到坐标颜色不正确为止
    if (GetColor(1081,1067)=="227022")    ;判断坐标(1081,1067)处的颜色是否为227022
    {                                     ;如果是则按键盘的{4}键
    SendInput 4
    }
    Else                                  ;如果不是则向前移动15秒
    {
    Sendinput {w down}
    Sleep 15000
    Sendinput {w up}
    Break                                 ;退出当前循环,如果不加Break会导致死循环,出bug
    }
    }
    Return
    
    GetColor(x,y)                   ;封装的代码,一般情况下不需要更改,但必须有
    {                               ;否则上面的判断将失效
    PixelGetColor,Color,x,y,RGB
    StringRight Color,Color,6
    Return Color
    }
    Return
    
    
  • 按住鼠标侧键启动,释放停止
    XButton1::                                ;鼠标侧键1
    loop{                                     ;循环进行{}中的代码直到坐标颜色不正确为止
    if (GetColor(1081,1067)=="227022")        ;判断坐标(1081,1067)处的颜色是否为227022
    {                                         ;如果是则按键盘的{4}键
    SendInput 4
    }
    Else                                      ;如果不是则向前移动15秒
    {
    Sendinput {w down}
    Sleep 15000
    Sendinput {w up}                            
    }
    }Until Not GetKeyState("XButton1","P")    ;如果鼠标侧键1松开,则停止
    Return
    
    GetColor(x,y)                   ;封装的代码,一般情况下不需要更改,但必须有
    {                               ;否则上面的判断将失效
    PixelGetColor,Color,x,y,RGB
    StringRight Color,Color,6
    Return Color
    }
    Return

六、关闭脚本

  • Exitapp结合上面的内容,可以做出如下脚本设置
    F12::                       ;F12启动执行下面的代码
    Exitapp                     ;关闭当前脚本
    Return

七、让脚本使用者更好的判断脚本是否在运行、关闭

  • msgbox结合上面的关闭脚本的代码我们可以实现关闭脚本时出现提示框

    新手如何用AHK做游戏脚本?

    • 代码示例
    F12::                              ;F12启动
    MsgBox,脚本已关闭                  ;弹出对话框,内容:脚本已关闭
    Exitapp                            ;关闭当前脚本
    Return
  • tooltip用来帮助我们确定脚本的运行状态

    新手如何用AHK做游戏脚本?

    • 代码示例
    F1::                    ;一般跟自己的脚本启动键放一起,这里就拿F1启动举例
    ToolTip,开,494,0         ;在坐标(494,0)处显示一个“开”字
    Return

希望可以帮助到各位初次AHK使用者。

更多代码函数请参考帮助文档:网站上方导航里的

新手如何用AHK做游戏脚本?

有任何内容上建议可以评论留言。

给TA捐赠
共{{data.count}}人
人已捐赠
教程

关于文本处理正则提取小发现

2022-4-17 0:16:33

教程

FindText 深度教程 v1.2

2022-5-23 21:10:48

19 条回复 A文章作者 M管理员
  1. hexuren

    跳转感觉有点费劲,不如直接在社区分享

  2. hexuren
    1河许人给您打赏了¥2
  3. yukingzou

    谢谢大神分享,学习

  4. dbgba
    dbgba给您打赏了¥2
  5. 乌咪

    谢谢,学习

  6. 秋天的拿铁

    努力学习挣积分

  7. 奈

    厉害感谢

  8. Chief

    学习

  9. tingyu

    很實用 來學習 感謝~

  10. 辅导费

    学习了

  11. SuperNice丶

    学习了!

  12. user15697

    学习下

  13. Ulquiorra

    学习了~

  14. santasslorre

    学习,感谢

  15. homjie

    感谢分享,清晰明了???

  16. 恩麒

    感觉受益匪浅

  17. ahk小白

    开关很受用

  18. ahk小白

    但是技能都是有cd的 而且有的游戏需要切武器 这就要循环判断 我就卡在这里

个人中心
购物车
优惠劵
有新私信 私信列表
搜索