引言
前面几节,我们讲了AHK是如何控制鼠标键盘的、讲了热键的使用、讲了函数、讲了流程控制等。以上说的这些,足以用来做自动改造了。
在掌握这些AHK最基本的使用后,我再来聊聊我实现自动改造的思路。写程序,最重要的是学思路。思路有了,功能实现那就是水到渠成的事了。
思路
1. 如何获取装备信息
这个问题在poe还是非常容易解决的,只要在游戏里对着装备按ctrl
+ c
,即可获得这个装备的全部信息。例如:
物品类别: 短杖
稀 有 度: 稀有
种裔 冲撞者
平稳短杖
--------
短杖
品质: +28% (augmented)
物理伤害: 35-52
攻击暴击率: 6.30%
每秒攻击次数: 1.45
武器范围: 11
--------
需求:
等级: 60
力量: 71
智慧: 102
--------
插槽: B-R B
--------
物品等级: 85
--------
品质不提高物理伤害 (enchant)
每 4% 品质使效果区域扩大 1% (enchant)
--------
元素之相 (implicit)
--------
使用技能时触发一个插入的法术,它有 4 秒冷却时间
通过这种方式触发的法术消耗总增 150%
所有法术技能石等级 +1
所有物理法术技能石等级 +1
可以最多拥有 3 个工艺属性 (crafted)
火焰伤害提高 54% (crafted)
施法速度提高 20% (crafted)
2. 从装备信息中抽取所有词缀
我们可以发现,拿到的装备信息很多,词缀只是其中的一部分。那么如何过滤出词缀信息呢?且听我娓娓道来:
- 有个出现频率很高的
--------
可以用来做分割,这里就需要用到AHK中的字符串分割函数StrSplit
了,它会把一个字符串分割成一个字符串数组 - 分割成字符串数组后,拿上面的例子来说,数组长度为8,词缀位于数组的最后一个
- 但事实上,词缀并不是所有时候都是数组最后一个,例如塑界裂界等装备,它最后还有一栏描述,词缀在数组的倒数第二个。所以不能简单地拿最后一个了事。
- 我目前的方法是根据物品等级那一栏往下,如果:
- 普通装备没有基底和新赛季刚出的影响词缀,就直接获取下面一栏词缀
- 如果碰到有基底,或是新赛季影响词缀的,就再往下识别,直到获取真正我们想要的词缀
- 拿到词缀栏后,再用
StrSplit
对换行符 `n 进行一次分割 - 最终拿到的是一个纯词缀的数组
3. 识别词缀
到了这步,其实就很简单了。我的操作是:
- 定义两个相同长度的数组
- 第一个数组存希望roll到的词缀的关键字,注意这里的关键字一定要保证在所有可能roll到的词缀里独一无二
- 第二个数组在对应的位置存数值(如果有的话),例如:你想要弓上T0的攻速,那么一般去流放编年史上查相关词缀,找到弓上T0的攻速是17% - 19%,所以,你应该在对应位置存上17
- 最关键的一步来了,如何识别呢?
- 定义一个变量(
target
),记录本轮识别中满足的词缀数 - 首先要来个for循环遍历词缀
- 在for循环里再嵌套个for循环遍历刚创建的关键字数组
- 用AHK提供的函数
InStr
来判断是否roll到 - 如果roll到了:
- 如果没有数值判断,直接就可以判断为roll中,target + 1
- 如果有数值判断,用
RegExMatch
函数正则匹配数字,和关键字数组对应的数值作比较,满足就target + 1,不满足就放过,进入下一轮词缀的循环
- 记住,roll到后尽量立即
break
,这个关键字会让里面的for循环立即跳出。虽然省不了多少时间,但是,能省就省嘛!最主要是,这么精准的流程控制,优雅永不过时~
- 定义一个变量(
4. 改造流程
首先要明确的是:如果要做一个自动改造,它是怎么一个流程呢?拿一个期望改造出三条词缀的装备来说:
- 白底装备,上蜕变,变成蓝底装备
- 蓝底装备判断其词缀是否满足需求:
- 满足两条就上富豪
- 不满足还要判断:
- 如果只有一条词缀且是你想要的,就上增幅
- 否则就上改造
- 如果富豪成了金底,判断第三条词缀是否是你想要的:
- 如果是的话,恭喜你,做好了
- 如果不是,则要重铸,再回到第一步
还有各种需求,例如只需要两条词缀的,只需要一条词缀的,流程都不同,但是可以整合成一个通用的方法。这就是看你对流程控制的理解了。
再说说一些可以让你写好程序的点
- 代码一定要规范,至少自己要看懂,还有未来的自己要看懂,否则修改的时候有你好果汁吃
- 对重复用到的代码一定要封装成函数调用,一方面省去不少代码量,让程序看上去更简洁;一方面更容易让你理清思路,减少bug
- 流程控制的时候,要学会推算,不会也没关系,试试vscode的debug吧,打上断点,一步步来,加油!