魔兽世界WA插件+按键精灵一键控制
因为暴雪离开中国,暂时没有魔兽世界的替代品,所以就选择了不可描述服。此类服务器目前大多多脚本检测能力比较弱,甚至某些服自己售卖自动脚本,加上手残操作能力较弱,就萌生了自己解放双手的想法。
一、资料准备
首先魔兽世界自己提供了诸多API方便插件开发等,都能用的到,参考链接:
除了魔兽API还需要WeakAuras的一些API,另外需要部分lua知识。
二、实现原理
通过魔兽插件WeakAuras把需要获取的游戏信息,以色块的形式显示在屏幕固定位置,再使用按键精灵等工具对色块进行颜色判断,把需要的信息读取出来,再通过按键精灵模拟按键的方式对游戏进行控制。
其中几个需要注意的点:
1、魔兽世界UI是有缩放功能,在WA插件中设定的尺寸不一定第最终的显示尺寸,所以在识别色块之前要对色块尺寸进行校正。解决办法是游戏屏幕是原点是固定的,校正色块就固定在原点位置,以校正色块的尺寸为判定色块的距离位置。
按键精灵校对颜色部分代码:
2、使用WA插件的aura_env.region.Color(0,0,1,0)对色块颜色处理,此函数不能覆盖WA自带条件的颜色操作。另外设置颜色函数、获取颜色函数和按键精灵的颜色处理参数位置存在差异:
3、对于dps职业,一般目标的切换都是玩家手动选择,而且基本是固定不变的,dps职业往往更加关注技能释放的优先级,而优先级又跟玩家自身战斗资源等相关。
动作选择的处理有两种方法:(1)是将战斗资源通过色块传递给外部程序(按键精灵等),再由外部程序作出动作选择;(2)直接在WA中进行动作选择,只给外部程序传递动作信息。显然只传递动作信息可以使外部程序端更加简单,而且逻辑修改只需要在wa中进行,调试更加方便。
按键精灵技能判断:
4、对于治疗职业,治疗一般是打地鼠操作,哪个掉血加哪个,需要不停的的寻找血少目标或者高优先级目标,对注意力消耗极大,更加需要自动脚本。而魔兽世界的目标选择功能同样是不对外开放的,所以需要绑定宏命令来实现目标切换。
魔兽友方角色分别是:
总共需要45个按键,而目前服务器大多是处于WLK版本,最多是25人团,所以减少一下按键总共需要30个按键,因为魔兽世界允许使用组合键,所以就利用小键盘的0-9和组合键,就可以实现友方目标的选择功能。小键盘0的ASCII码为96。
这里的绑定方法是:
在wa中创建按钮并对按钮设置宏命令,再对按钮就行按键绑定。
外部读取为:
三、外部程序及UI部分
自动脚本的外部程序部分比较简单,主要是做外部使用UI,根据预设的色块的信息传递规则,执行相应的行为动作。图方便使用按键精灵自带的库API较为详细,能够满足需要(如果深入一下的话,使用python会更好一些)。
四、WA部分
WA负责信息的获取、执行策略的选择和通过色块进行信息传递。这边使用了5个色块,底色使用红色以便于忽略游戏内的图像干扰。

色块的含义分别是:
1号白色校对色块
红色部分为底色,用于区分第一个校对色块
2号绿/白按钮游戏内控制是否开启自动脚本
3号目标色块需要选择的目标信息
4号技能色块释放技能信息
5号为是否开启自动驱散
在游戏中需要不断获取信息进行决策,所以WA自带的触发器并不太好用,使用WA的自定义初始化动作,直接执行lua代码,对色块进行操作。

通过创建一个UI帧,并对每一帧的update进行操作。
剩下的就是获取信息->逻辑判断->色块操作。
1、信息获取部分
主要使用魔兽世界提供的API进行操作。例如
(1)遍历所有队伍角色,如果与玩家距离小于40码且未死亡则XXX
(2)判断目标的buff/debuff
(3)判断目标debuff类型,用于选择驱散技能
(4)获取目标生命值
(5)技能cd
2、逻辑判断部分大家都懂,包括对各职业的理解,逻辑上肯定各不相同。
3、色块操作部分
wa的代码非常灵活,可以通过id获取其他region的操作权。
(1)获取其他色块的句柄
(2)目标色块处理
之前已经对目标按钮进行了绑定,逻辑中可对选择目标的色块进行处理
(3)技能色块处理,直接Color就行。