当前位置 : 145z游戏站 | 魔域 | 技术教程 | 

魔域来了游戏按键精灵挂机脚本编写教程,实现自动打怪拾取循环操作

热度:
魔域来了属于网页端游戏,画面渲染机制和端游有明显区别,窗口识别、画面取样都需要适配网页窗口特性,想要制作挂机脚本,优先理清整套挂机流程,包含寻怪、攻击、拾取、回血回蓝、循环判断,下面完整讲解环境准备、窗口抓取、脚本逻辑编写、代码示例以及调试过程里容易碰到的问题。

前期环境设置,先调整浏览器运行状态。单独开启一个浏览器窗口登录魔域来了,不要多标签同时打开大量网页,多余标签会占用资源,造成画面卡顿,干扰画面识别。把游戏页面调整为独立窗口模式,固定窗口大小,不要随意缩放页面,缩放会改变画面像素坐标,所有找图找色点位都会失效。关闭浏览器硬件加速,硬件加速开启之后网页渲染会出现画面读取异常,按键精灵后台取色经常读取不到正确像素。关闭游戏内多余特效,技能光效、地面特效会干扰颜色和图片识别,调低特效之后识别稳定性会提升。安装按键精灵,打开抓抓工具,准备抓取窗口句柄、怪物颜色、物品图标、血量色块。

网页窗口句柄抓取,网页游戏的窗口结构和端游复合窗口类似。浏览器顶层窗口只是外壳,游戏实际渲染区域是页面内嵌的子窗口。直接抓取浏览器主窗口句柄,很多时候无法读取游戏画面像素。打开按键精灵窗口工具,抓取浏览器主窗口句柄,使用子窗口遍历命令枚举所有子句柄,逐个使用后台取色命令测试,找到可以正常读取游戏画面像素的有效子句柄。记录有效子句柄,后续所有找色、找图、后台点击命令都使用这个子句柄。网页窗口存在一个特点,刷新页面、重新登录游戏之后,子句柄会发生变化,每次启动脚本前都要重新获取有效句柄。

挂机脚本整体逻辑梳理,整套循环分为多个步骤。脚本启动之后,先绑定游戏窗口,进入无限循环。第一步判断角色血量,如果血量低于预设阈值,执行点击回血按钮。第二步判断画面内是否存在怪物,通过怪物身上固定颜色点进行找色判断。找到怪物之后移动鼠标到怪物位置点击选中,等待角色发起攻击。攻击过程持续一段时间,等待怪物死亡。怪物死亡之后,开启物品识别,循环查找地面掉落物品,识别到物品就执行点击拾取。拾取完成之后,继续扫描画面寻找下一只怪物,循环往复。如果长时间找不到怪物,可以增加小范围移动点击,让角色小幅走动,刷新视野内怪物。

脚本编写分为血量判断、寻怪攻击、自动拾取三个模块。
血量判断模块,使用抓抓工具在血量条低血位置拾取颜色,记录颜色代码和坐标范围。脚本持续读取该位置像素颜色,如果读取到低血颜色,执行点击回血药按钮。
寻怪攻击模块,提取怪物名称或者怪物身上特征颜色,设置颜色偏差。在游戏画面怪物刷新区域循环找色,找到怪物坐标,执行后台点击选中怪物,加入延时,等待角色锁定目标并释放技能。
自动拾取模块,截取地面掉落物品图标作为素材,保存到脚本附件,设置图片匹配相似度,循环找图,匹配成功就点击物品坐标拾取。

完整脚本示例,需要自行替换句柄、颜色代码、图片素材和坐标数值。
HwndParent = Plugin.Window.Foreground()
Dim HwndChild
HwndChild = Plugin.Window.GetChildHwnd(HwndParent,0)
Do While HwndChild>0
cr = Plugin.Bkgnd.GetPixelColor(HwndChild,100,100)
TracePrint cr
HwndChild = Plugin.Window.GetChildHwnd(HwndParent,Plugin.Window.GetNextHwnd(HwndChild))
Loop
Call Plugin.Window.Bind(HwndChild, "dx", "dx", "dx", 0)
Do
//血量检测
Call Plugin.Bkgnd.GetPixelColor(HwndChild, 60,520)
If cr = "FF0000" Then
Call Plugin.Bkgnd.LeftClick(HwndChild,150,550)
Delay 1200
End If
//找怪
Call Plugin.Bkgnd.FindColor(HwndChild,100,100,800,500,"FFCC00",20,intX,intY)
If intX >0 And intY>0 Then
Call Plugin.Bkgnd.LeftClick(HwndChild,intX,intY)
Delay 3000
//找物品拾取
FindPic 0,0,800,600,"Attachment:\item.bmp",0.85,itemX,itemY
If itemX>0 And itemY>0 Then
Call Plugin.Bkgnd.LeftClick(HwndChild,itemX,itemY)
Delay 800
End If
End If
Delay 400
Loop
Call Plugin.Window.UnBind(HwndChild)

网页游戏后台命令兼容性存在限制,部分浏览器渲染模式不支持后台Bkgnd插件读取像素,会出现取色一直返回固定无效色值。遇到这种情况,放弃后台模式,改用前台脚本。前台脚本运行期间不能移动鼠标,脚本直接操作屏幕全局坐标,不需要窗口句柄绑定,但是电脑无法同时做其他操作。前台脚本编写思路和后台一致,只需要去掉窗口绑定和后台插件命令,使用普通鼠标移动点击命令。

脚本分段测试方法,不要一次性直接运行完整无限循环脚本。先单独测试血量判断模块,手动把角色血量降低,观察脚本是否可以识别低血并且点击回血。单独测试寻怪模块,把怪物拉到画面内,查看脚本是否识别怪物颜色并点击目标。拾取模块单独测试,击杀怪物掉落物品,验证图片识别和拾取点击。单个模块全部正常之后,再组合成完整挂机脚本。测试阶段把循环次数改成有限次数,方便观察执行流程,排查卡点。

常见故障排查。网页刷新之后脚本失效,主要原因是浏览器子窗口句柄变动,每次重新加载游戏页面都要重新遍历获取子句柄。识别怪物不稳定,大多是技能特效、地面光影干扰,可以调高颜色偏差,或者更换怪物身上更稳定的颜色取样点。拾取识别经常失败,重新截取物品图片素材,尽量截取干净的图标,减少背景区域,调整图片匹配相似度。脚本点击有反应但是游戏没有响应,是浏览器渲染不支持后台点击,切换前台模式测试。角色挂机过程原地不动,长时间无怪物,可增加随机小范围点击,实现角色移动。

脚本使用需要注意的内容。浏览器不要开启缩放比例,页面缩放100%才可以保证坐标和取样颜色正常。不要遮挡游戏窗口,前台模式下遮挡会直接造成识别失败,后台模式虽然可以遮挡,但是网页渲染被遮挡之后部分浏览器会降低画面刷新率,影响取色。网页长时间挂机容易出现页面卡顿、内存升高,脚本可以增加定时刷新逻辑,每隔一段时间执行页面刷新,刷新之后需要重新获取窗口句柄。脚本依靠画面像素和图片匹配识别,游戏页面更新之后,UI布局、怪物颜色、物品图标改动,原有素材和坐标全部失效,需要重新取样制作素材。挂机过程留意背包容量,背包空间满之后拾取动作不会生效,可以增加背包判断逻辑,识别背包已满提示文字,停止拾取或者执行丢弃无用物品操作。
[顶部]