刷级脚本总掉,又单独做了自动登录脚本,问题往往出在两个脚本各跑各的。按键精灵新手最容易犯的错,是刷级脚本一个死循环,登录脚本另一个死循环,两个同时绑窗口,互相抢焦点,掉线后一个在找怪一个在找登录按钮,结果谁也执行不到位。正确做法是合并成一个主脚本,用状态变量控制流程,同一时间只有一个循环在跑。
掉线原因先分清楚
网络波动、游戏防挂机检测、模拟器内存泄漏、找图失败、弹窗遮挡、分辨率变化、脚本点击间隔固定,这七类占九成。网络波动靠加速器解决,防挂机检测靠随机延时和随机移动解决,模拟器泄漏靠定时重启解决,找图失败靠更新截图和降低相似度解决,弹窗遮挡靠每次操作前先检测关闭按钮解决,分辨率变化靠锁死模拟器分辨率解决,固定间隔靠加入随机数解决。自动登录脚本只能解决掉线后的恢复问题,解决不了掉线本身的原因。
主脚本结构用状态机
不要写两个独立脚本。新建一个按键精灵脚本,定义变量“当前状态”。状态只有三个:刷级、掉线检测、自动登录。主循环每次执行时先判断当前状态。状态为刷级时,先调用掉线检测函数。检测到登录界面或断线弹窗,把状态改成自动登录。没检测到就执行刷级动作。状态为自动登录时,调用自动登录函数。登录成功并进入游戏后,把状态改回刷级。状态为掉线检测时,可以直接并入刷级循环,不需要单独状态。
按键精灵伪代码结构:
Dim 状态
状态 = "刷级"
Do
If 状态 = "刷级" Then
If 检测掉线() = True Then
状态 = "登录"
Else
刷级动作()
End If
ElseIf 状态 = "登录" Then
If 自动登录() = True Then
状态 = "刷级"
End If
End If
Delay 500
Loop
这段结构简单,新手不容易写乱。所有功能都写在函数或子程序里,主循环只负责切换状态。
窗口绑定必须先固定
按键精灵不绑窗口,前台点击也能用,但脚本一最小化或切窗口就失效。打开按键精灵,新建脚本,在脚本属性里选择窗口绑定。用抓点工具抓游戏窗口句柄,绑定模式选键盘Windows、鼠标Windows、图色Windows。模拟器如果支持后台,鼠标和键盘可以改成dx或gdi模式。绑定后测试:写一句KeyPress "1",运行看游戏是否反应。没反应就换绑定模式,直到能找到图色并且能点击为止。
分辨率必须锁死。模拟器设置里把分辨率固定为脚本编写时的数值,不要开自适应。游戏内画质调到最低,关闭动态光影和粒子特效。系统显示缩放调到100%。这些不做,今天写的找图坐标明天就偏。
自动登录脚本写法
自动登录不要用固定延时。先找登录界面特征图。截取“开始游戏”按钮或账号输入框,保存为小图。用FindPic循环查找,找到后点击。点击账号框,等待300毫秒,用SayString输入账号。点击密码框,等待300毫秒,输入密码。点击登录按钮,等待1000毫秒。然后找“进入游戏”或“选择角色”按钮,找到点击。再找公告关闭按钮,找到点击。最后检测游戏主界面特征,比如血条或小地图,确认进入游戏后返回True。任何一个环节找不到图,等待500毫秒重试,重试超过20次返回False,让主循环继续等待或重启游戏。
账号密码不要直接写在脚本里。写到同目录的txt文件,脚本用ReadFile读取。输入完成后用ClearClipboard清空剪贴板,减少被记录的风险。
掉线检测函数
在刷级循环中每隔30到60秒检测一次。不要每轮都检测,太耗资源。检测方式:FindPic找登录界面的“开始游戏”按钮,找到返回True。FindPic找“重新连接”或“断开连接”文字,找到返回True。FindColor找断线弹窗的特征色,找到返回True。三个条件任意一个成立就判定掉线。检测区域设在屏幕中央和上方,不要全屏找,太慢。检测到掉线后,先关闭弹窗,再返回True。主循环收到True就切换到登录状态。
刷级循环稳定化
攻击键和技能键之间加随机延时。按键精灵用Random命令:Delay 300 + Random(200)。鼠标点击坐标加随机偏移:MoveTo x + Random(10), y + Random(10)。找怪用FindColor或FindPic,找不到时执行随机小范围移动,不要原地无限找。设置超时:连续30次找不到怪,执行回城或换地图。技能循环中不要固定顺序,可以每轮随机选择技能,降低被检测概率。血条检测用多点取色,不要单点,单点容易被特效遮挡。
自动登录和刷级衔接
登录函数返回True之前,必须确认已经进入游戏主界面。只登录到角色选择界面不算完成,否则主循环回到刷级状态后还在角色界面,脚本会继续找怪但找不到,很快又判定掉线。进入游戏后还要关闭所有弹窗:公告、活动、签到、提示。每个弹窗用找图检测关闭按钮,找到就点。最后再检测一次主界面特征,确认无误才返回True。
异常处理和日志
每个关键操作后加验证。点击登录按钮后找“进入游戏”图,找不到就重试。点击技能后检测怪物血条是否变化,不变化就换技能。重试三次失败后重启游戏。重启游戏用RunApp打开模拟器或游戏客户端,等待加载完成,再调用自动登录。脚本运行中写日志:用TracePrint或写文本文件,记录每次状态切换、掉线检测结果、登录成功失败。出问题时看日志比猜快。
模拟器设置和运行环境
模拟器分辨率锁死,DPI固定。关闭省电模式,保持屏幕常亮。模拟器CPU和内存给足,不要同时开多个模拟器。游戏画质最低,关闭声音和特效。脚本运行4到6小时后重启一次模拟器和脚本,防止内存泄漏导致找图变慢。网络不稳时用加速器,但加速器不要频繁切换节点,切换节点会导致游戏掉线。
调试顺序
先单独测试自动登录。手动退到登录界面,运行登录脚本,看能否输入账号密码并进入游戏。再单独测试刷级。手动进入游戏,运行刷级脚本,看能否打怪和捡物。最后合并。模拟掉线:手动点退出到登录界面,观察主脚本是否在60秒内切换到登录状态并自动登录。再模拟断网,看脚本是否检测到断线弹窗并恢复。每次修改脚本后都要重新测试这三个环节。
常见掉线处理
游戏内置防挂机检测踢人,表现是固定时间掉线。解决方法是把点击间隔随机化,移动轨迹随机化,不要连续数小时用同一套动作。模拟器崩溃,表现是脚本还在跑但游戏窗口没了。解决方法是检测游戏窗口是否存在,不存在就重启模拟器。网络波动,表现是延迟高然后掉线。解决方法是换稳定网络或用加速器,脚本中加断线检测。找图失败,表现是脚本卡在某个界面不动。解决方法是更新截图,降低相似度到0.8,扩大查找区域。
脚本不要用内存读写或封包修改,只做模拟点击和找图找色。技能释放间隔不要低于800毫秒。坐标点击加正负10像素随机。循环延时加100到400毫秒随机。脚本运行期间不要频繁切换窗口。自动登录脚本中账号密码从外部文件读取。主脚本和登录脚本合并成一个,用状态变量控制。按这套结构改完,掉线后自动登录再回到刷级,基本能连续跑通。
掉线原因先分清楚
网络波动、游戏防挂机检测、模拟器内存泄漏、找图失败、弹窗遮挡、分辨率变化、脚本点击间隔固定,这七类占九成。网络波动靠加速器解决,防挂机检测靠随机延时和随机移动解决,模拟器泄漏靠定时重启解决,找图失败靠更新截图和降低相似度解决,弹窗遮挡靠每次操作前先检测关闭按钮解决,分辨率变化靠锁死模拟器分辨率解决,固定间隔靠加入随机数解决。自动登录脚本只能解决掉线后的恢复问题,解决不了掉线本身的原因。
主脚本结构用状态机
不要写两个独立脚本。新建一个按键精灵脚本,定义变量“当前状态”。状态只有三个:刷级、掉线检测、自动登录。主循环每次执行时先判断当前状态。状态为刷级时,先调用掉线检测函数。检测到登录界面或断线弹窗,把状态改成自动登录。没检测到就执行刷级动作。状态为自动登录时,调用自动登录函数。登录成功并进入游戏后,把状态改回刷级。状态为掉线检测时,可以直接并入刷级循环,不需要单独状态。
按键精灵伪代码结构:
Dim 状态
状态 = "刷级"
Do
If 状态 = "刷级" Then
If 检测掉线() = True Then
状态 = "登录"
Else
刷级动作()
End If
ElseIf 状态 = "登录" Then
If 自动登录() = True Then
状态 = "刷级"
End If
End If
Delay 500
Loop
这段结构简单,新手不容易写乱。所有功能都写在函数或子程序里,主循环只负责切换状态。
窗口绑定必须先固定
按键精灵不绑窗口,前台点击也能用,但脚本一最小化或切窗口就失效。打开按键精灵,新建脚本,在脚本属性里选择窗口绑定。用抓点工具抓游戏窗口句柄,绑定模式选键盘Windows、鼠标Windows、图色Windows。模拟器如果支持后台,鼠标和键盘可以改成dx或gdi模式。绑定后测试:写一句KeyPress "1",运行看游戏是否反应。没反应就换绑定模式,直到能找到图色并且能点击为止。
分辨率必须锁死。模拟器设置里把分辨率固定为脚本编写时的数值,不要开自适应。游戏内画质调到最低,关闭动态光影和粒子特效。系统显示缩放调到100%。这些不做,今天写的找图坐标明天就偏。
自动登录脚本写法
自动登录不要用固定延时。先找登录界面特征图。截取“开始游戏”按钮或账号输入框,保存为小图。用FindPic循环查找,找到后点击。点击账号框,等待300毫秒,用SayString输入账号。点击密码框,等待300毫秒,输入密码。点击登录按钮,等待1000毫秒。然后找“进入游戏”或“选择角色”按钮,找到点击。再找公告关闭按钮,找到点击。最后检测游戏主界面特征,比如血条或小地图,确认进入游戏后返回True。任何一个环节找不到图,等待500毫秒重试,重试超过20次返回False,让主循环继续等待或重启游戏。
账号密码不要直接写在脚本里。写到同目录的txt文件,脚本用ReadFile读取。输入完成后用ClearClipboard清空剪贴板,减少被记录的风险。
掉线检测函数
在刷级循环中每隔30到60秒检测一次。不要每轮都检测,太耗资源。检测方式:FindPic找登录界面的“开始游戏”按钮,找到返回True。FindPic找“重新连接”或“断开连接”文字,找到返回True。FindColor找断线弹窗的特征色,找到返回True。三个条件任意一个成立就判定掉线。检测区域设在屏幕中央和上方,不要全屏找,太慢。检测到掉线后,先关闭弹窗,再返回True。主循环收到True就切换到登录状态。
刷级循环稳定化
攻击键和技能键之间加随机延时。按键精灵用Random命令:Delay 300 + Random(200)。鼠标点击坐标加随机偏移:MoveTo x + Random(10), y + Random(10)。找怪用FindColor或FindPic,找不到时执行随机小范围移动,不要原地无限找。设置超时:连续30次找不到怪,执行回城或换地图。技能循环中不要固定顺序,可以每轮随机选择技能,降低被检测概率。血条检测用多点取色,不要单点,单点容易被特效遮挡。
自动登录和刷级衔接
登录函数返回True之前,必须确认已经进入游戏主界面。只登录到角色选择界面不算完成,否则主循环回到刷级状态后还在角色界面,脚本会继续找怪但找不到,很快又判定掉线。进入游戏后还要关闭所有弹窗:公告、活动、签到、提示。每个弹窗用找图检测关闭按钮,找到就点。最后再检测一次主界面特征,确认无误才返回True。
异常处理和日志
每个关键操作后加验证。点击登录按钮后找“进入游戏”图,找不到就重试。点击技能后检测怪物血条是否变化,不变化就换技能。重试三次失败后重启游戏。重启游戏用RunApp打开模拟器或游戏客户端,等待加载完成,再调用自动登录。脚本运行中写日志:用TracePrint或写文本文件,记录每次状态切换、掉线检测结果、登录成功失败。出问题时看日志比猜快。
模拟器设置和运行环境
模拟器分辨率锁死,DPI固定。关闭省电模式,保持屏幕常亮。模拟器CPU和内存给足,不要同时开多个模拟器。游戏画质最低,关闭声音和特效。脚本运行4到6小时后重启一次模拟器和脚本,防止内存泄漏导致找图变慢。网络不稳时用加速器,但加速器不要频繁切换节点,切换节点会导致游戏掉线。
调试顺序
先单独测试自动登录。手动退到登录界面,运行登录脚本,看能否输入账号密码并进入游戏。再单独测试刷级。手动进入游戏,运行刷级脚本,看能否打怪和捡物。最后合并。模拟掉线:手动点退出到登录界面,观察主脚本是否在60秒内切换到登录状态并自动登录。再模拟断网,看脚本是否检测到断线弹窗并恢复。每次修改脚本后都要重新测试这三个环节。
常见掉线处理
游戏内置防挂机检测踢人,表现是固定时间掉线。解决方法是把点击间隔随机化,移动轨迹随机化,不要连续数小时用同一套动作。模拟器崩溃,表现是脚本还在跑但游戏窗口没了。解决方法是检测游戏窗口是否存在,不存在就重启模拟器。网络波动,表现是延迟高然后掉线。解决方法是换稳定网络或用加速器,脚本中加断线检测。找图失败,表现是脚本卡在某个界面不动。解决方法是更新截图,降低相似度到0.8,扩大查找区域。
脚本不要用内存读写或封包修改,只做模拟点击和找图找色。技能释放间隔不要低于800毫秒。坐标点击加正负10像素随机。循环延时加100到400毫秒随机。脚本运行期间不要频繁切换窗口。自动登录脚本中账号密码从外部文件读取。主脚本和登录脚本合并成一个,用状态变量控制。按这套结构改完,掉线后自动登录再回到刷级,基本能连续跑通。

