本期是入门篇的最后一期了,算是把AHK能实现的比较基础的功能大体都讲解了.
目前已经出了3期入门讲解了,剩下的...像什么自动红蓝药/自动背包归档/自动混沌石配方等等....其实都能实现的
不过原理比较干巴,比较难讲也比较难学,讲的话我不知道大家能不能理解,所以本期只是最后补充剩余的功能铺垫一下
如果有同学看不懂的话,那就索性放弃吧,本身这东西确实不值得消耗很多时间的
但如果你不想放弃也学不会的话,我不会劝你坚持又或者怎样的,因为这是你自己的事情
这个时候的你也许就会觉得代码要比游戏有趣很多
当你绞尽脑汁都搞不出来的时候,这样的体验,又何尝不是一种挫折?
最后当你克服一切实现了你想实现的,这又何尝不是一种快乐?
第一期入门篇 一键喝药 (热键触发/延迟/发送按键)
第二期进阶篇1 一键地雷 (抬起检测/循环写法/随机延迟)
第三期进阶篇2 一键选角小退/回城/藏身处 (发送文字/长按检测/双击检测)
AHK是什么?全名autohotkey,简单讲自动热键,可以帮你XXXX之类的...
说起来起初为了流放之路而去用的AHK,那个时候没有启明石药剂附魔,药侠玩的很难受.更别说整理背包/地雷之类的手感问题.所以就开始研究起了AHK.
经过我不断的努力(并没有),终于实现了很多以前从未设想过的功能
渐渐的有时候我开始有种错觉,写代码要比玩游戏快乐当然前提也是要代码不BUG的时候才会有的错觉.
最后感谢大家的点赞评论支持,还有小伙伴的打赏,为我分享技术的同时更多了一些码字的动力
我也不想教安装呀...就算个小门槛吧~
丢个B站参考视频,讲的比较详细可以看一下.
软件代码什么的,在附件哈自己按照视频安装下
AHK作为比较好用的热键触发类型的编程语言,入门其实很简单的.我尽量讲的详细点,好让大家能尽快上手.
至于缺点的话,基本上国内网游的话属于被禁止使用的第三方软件,和按键精灵类似,有封禁风险,所以使用需慎重.
WIN+E 打开文件资源编辑器,在查看中找到文件扩展名✔勾选
将代码复制到txt中
保存关闭
找到保存好的TXT文件,F2重命名,然后把.txt 改成 .ahk 后双击运行即可
按对应热键即可触发对应功能.
讲男的时候,我喜欢先讲点简单的,先讲一下按键连点吧.
说起最早的连点,还是在玩DXF的时候,因为最早的版本是没办法按住X就连点的,所以各种功能辅助就出现了.
大体是两种用法
1.按住本键,本键或者组合键连点
2,按住某键,某键或者组合键连点
原理都差不多的,理解意思之后就可以自己改键位了
代码如下,功能是按住鼠标侧键2时候会触发按住ctrl,并且连续点击鼠标左键.
自己滑动鼠标就能快速将物品入库了,当然要打开仓库就是了,毕竟不读取内存,没法用CALL的
(像什么戒指武器之类的武器分档归类的话,还是要更多的代码去实现的.)
变化的话,可以将send ctrl down up 去掉,简单的变成鼠标连击,可以用来升级技能之类的,又或者改变send{click} 为别的键位,也可以以达到连击的命令.
第三期我们讲解了 短按/长按/双击 的触发写法,比较难的,这期讲的长按比较简单的
首先我们要在AHK中本键触发本键连点的话,我们要在触发键前加上$符号来表示说明($ shift+4打出来),同时为了可以和和ctrl/alt/shift 之类的组合键按下时同时使用的的话,还要加上*(* shift+8)来表示说明
即*$ 某键 ::
本例中为按下触发的的检测,第二期地雷篇 我们使用的是抬起的检测,都是可以使用方法,本期就将一种新的,按下检测 GetKeyState("某键", "P")
GetKeyState 检查键盘按键或鼠标/操纵杆按键是否按下或放开
自行编辑器F1查看帮助哈
这里配合loop循环来使用的话,达到一个循环检测按键是否按住的功能
if GetKeyState("某键", "P")
if not GetKeyState("某键", "P")
这两者可以简单理解成,如果某键按住时和没按住的情况下的触发条件.
当 if not GetKeyState("某键", "P") 触发后,跟上 break ,意思就是
某键没按住的情况下的跳出循环,break为当前循环跳出终止的命令.
(PS:当IF判断只有一行命令时候,可以不加{}的.所以break是在条件成立的情况下才会触发的)
所以当你按下某键的时候,按照IF逻辑判断,条件不成立,所以会运行到后面的send命令,并且loop是会循环运行的
但是当你你抬起某键的时候,按照IF逻辑判断,条件成立,所以就跳转到了break 就结束了.
注意:
标签和热键最后一定要加return结尾.
使用SendInput 会发送的更快的.
sleep 为连击的间隔时间哈
其实这个功能真的是很常见,最早的一键自动喝药配合药侠的强大天赋真的喝的太爽了...
随着药剂附魔灌顶/启明石以及法血腰带的出现,这个功能真的其实可以不用使用了,尽管GGG最近版本口碑不好,但药剂附魔确实是实打实的实惠/
开荒时候,这个功能很实用.我一般都是带2瓶跑速药水,一瓶使用一充能,可以保持一个很好的移动速度,让开荒更加平滑.
本例为一键触发开关类型,触发键是~,和WG平台的那个键是一个,可以自行修改.
在 第二期地雷篇 我们讲过 SetTimer 的使用方法,不了解的话回头补补.
简单讲就是一个SetTimer计时器的功能,在某些时间之后自动运行什么.
罗技的鼠标宏也能做到同样的功能,只不过,AHK直接封装好了233/
上面的代码可以简单理解现实中成灯光的开关,安下后打开灯光,再次按下后关闭灯光.
在程序中一般1为开,0为关,当然你如果非要定义0是开,1是关也没问题的,只是因为开就是开关就是关,不管赋予什么,最底层的逻辑是不会变得.
但按下~键时候代码就会运行,变量 flask_on_off 之前没有赋值,所以为空,就是0,!感叹号为逻辑非的运算符号,类似+-*/之类的运算符.
按照逻辑非!(值的反值)的运算后就为1,这个时候,flask_on_off 的值就为1了
按照后面if 的条件判断,就会运行 = 1 的语句中
如果再次按下~键时,因为变量 flask_on_off 的值为1了,所以逻辑非!(值的反值)的运算后就为0
此时后面if 的条件判断,就会运行 = 0 的语句中,当然直接else 可以,只是多一种if的多条件判断的写法,else if 是可以作为 if 的第二条件判断来使用的.
而且不同状态我们这边也会使用 tooltip 来提示自己是否开启
if 1时,触发对话框提示 功能开启,tooltip 为对话框命令,X,Y,坐标,几号窗体
if 0时,功能开启,tooltip 为空的时候,就会消除对应编号的对话框的.
这样我们就可以做到一个键位开关的写法了
同时因为是循环的原因,我们使用SetTimer计时器来控制开关开和关时候的不同状态即可,不了解的话可以回顾一下第二期的SetTimer的讲解.
if 1 判断成功时候,SetTimer 开,为0时候就触发 SetTimer 关.
触发的标签可以这样写,比如双跑速药水循环的话是这样的写法.
简单的把药水按键或者技能按键 放进去即可,然后用延迟时间来控制药水的持续时间.(我自己写了函数,自行用send 和 sleep 替换即可)
稍微讲解一下,如果你不了解对应想触发的键位的名字的话,可以在编辑器中输入send 然后框选F1,翻翻帮助就可以找到对应的键位名称了.
其中我写了一个keys(keys,a,b)函数,大家感兴趣的话可以参考下,可以直接发送我想要的按键,不想用的话换成,send{enter}即可.
要引用的话就是keys("键位名称",最小延迟,最大延迟时间)记得键位名要加""双引号, 功能是 按下一个键位后按照a~b数值中随机一个值延迟后松开这个键位.
一般是用来模拟鼠标左键一直按住的状态,一般来讲,懒得按鼠标左键不是嘛
最简单的写法是这样的,按一下某键,就会触发按键按下的命令, 但鼠标和键盘send发出的命令还是有些不同的,需要自行测试下
如果你想模拟某键替换某键按下抬起的话可以这样写
尽量使用一个不常用的按键,比如鼠标的两个侧键...
名字为XButton 具体是那个键可以自行试下,不过一般使用侧键的话需要鼠标驱动的支持,其实也可以使用鼠标宏的,有机会可以讲讲的.
AHK中默认了3中总控模式,暂停/刷新/退出,看英语意思理解就行了
pause (暂停,默认开关模式按一下暂停使用,再按一下开始)
ExitApp (关闭脚本)
Reload (重载脚本)
自己写个热键填入对应的功能出发即可
如果只有一行代码的话,也可以 省略return 这么写
当按下F3时,AHK托盘的图标会变成这样的.
本期内容可以查看附件直接复制.
因为是入门最后一期了,所以也没什么好讲了,大家可以吧之前的功能整合整合放在一期,看能不能运行.
能运行,并且功能彼此不冲突的话,恭喜你可以出师了!