先把准备工作做足,不然脚本写出来大概率到处报错。首先在电脑上安装好按键精灵,用经典版本兼容性更强,新手不用搞太复杂的插件,用按键精灵自带的找色、找图和键鼠模拟功能足够做基础打怪脚本。进入游戏之后把游戏设置成窗口化模式,分辨率固定成1024x768或者1280x800,选一个自己常用的分辨率,之后不要随便改,改了所有坐标和颜色点都会偏移。把游戏窗口固定在屏幕左上角,不要频繁拖动,方便用窗口坐标模式定位。接着设置键位,把普通攻击、常用技能、拾取物品、血药、蓝药、回城卷这些功能都设成固定的快捷键,比如普通攻击放1键,XP技能放2键,群攻技能放3键,血药放F1,蓝药放F2,拾取放空格,回城卷放F3,设置好之后不要乱改。把常用的血药蓝药放在快捷栏固定位置,背包里的药品排列整齐,方便脚本判断剩余数量。最后打开按键精灵的抓抓工具,把自己角色血条的低血量颜色点、蓝条低蓝颜色点、怪物头顶血条的颜色、复活按钮的截图、NPC的位置点这些关键元素都先抓下来记好,后面写代码直接用。
整个打怪脚本按模块拆分写,不要一开始就堆一整坨代码,哪里错了不好改。整个打怪流程可以拆成初始化、状态检测、选怪攻击、补给回血、拾取物品、异常处理六个部分,每个部分单独写好再拼到循环里。
初始化部分要先设置模拟模式和窗口绑定,用硬件模拟或者普通模拟都行,建议先写前台版本,调试没问题了再改成后台。定义好所有用到的常量,比如挂机点的中心坐标,各个技能的快捷键,血药蓝药的阈值,比如血量低于30%就喝血,蓝量低于20%喝蓝,技能释放的间隔时间,这些都提前定义好,后面要改数值直接在开头改,不用翻整个代码。
状态检测模块每次循环开头都跑一遍,先判断游戏窗口是不是在前台,如果被切走了就暂停等切回来。然后抓自己的血条颜色点,如果血条位置的颜色不是正常的血量颜色,说明角色死亡了,就点复活按钮,等复活之后走回城流程。然后看快捷栏的血药数量,抓血药格子的颜色,如果格子是空的,说明药吃完了,就触发回城补给。再判断自己是不是在挂机点范围内,如果偏离挂机点超过一定距离,就走回中心坐标,避免越跑越远跑到别的怪区。
选怪攻击模块是核心,魔域里最稳定的选怪方式是按Tab键切换目标,按完Tab之后延时200毫秒,抓怪物血条位置的颜色,如果抓到怪物血条的红色,说明已经选中目标了,这时候就开始按攻击键。如果按完Tab没找到血条,就再按一次Tab,最多按三次,三次都没找到就说明周围没怪,角色在原地转一下或者走两步,再继续找。选中怪之后先按1键普通攻击,然后按冷却时间放技能,比如群攻技能冷却3秒,就每3秒按一次3键,XP技能满了就按2键放,放技能之间加个100到200毫秒的延时,不要按太快导致游戏没识别。攻击过程中一直检测怪物血条,血条消失了说明怪打死了,就停手进入捡物环节。
补给模块穿插在攻击过程中,每次攻击间隙都扫一眼血条和蓝条的颜色点,血量低于设定阈值就按F1喝血,延时500毫秒等药生效,连续两次喝血还没回上来就说明药不够或者被怪打太疼,直接按回城。蓝量低于阈值就按F2喝蓝,不用等蓝空了再补,避免放不出技能。
拾取物品模块在怪物死亡之后触发,先延时800毫秒等物品爆出来,然后按空格自动拾取,延时1000毫秒等物品捡完,再按两次空格确保没漏掉。如果没有自动拾取,就鼠标移动到掉落物品的坐标点击,不过用空格自动拾取最稳定,不用找物品位置,不容易出错。如果不想捡白装占背包,就提前在游戏里设置好拾取过滤,只捡装备和材料,脚本不用额外判断。
回城补给部分新手可以先做简化版,触发回城条件的时候按F3用回城卷,然后弹出提示框告诉玩家没药了需要手动补给,等补给完按启动键继续跑脚本。进阶版本可以写自动找NPC买药、修装备,就是找到杂货商NPC的坐标,点对话,选买血药买蓝药,买够数量之后关闭商店,再点传送员传回挂机地图,走回挂机中心位置,这个部分要多加点延时,等NPC对话加载出来再点,不然容易点空。
异常处理一定要加,不然脚本跑着跑着就卡着不动了。比如连续10秒都没选中怪,说明可能卡墙了或者被障碍物挡住,就控制角色跳一下,或者前后左右走几步回到挂机中心。比如弹出来验证码弹窗,新手不好做识别的话,就加个判断,中间弹出非正常窗口就暂停脚本,响铃提示玩家手动处理。比如被其他玩家攻击,怪物血条没消失但是自己血量掉太快,就直接按回城,避免被打死爆装备。
以下是基础前台版本的示例框架,里面的坐标和颜色值必须自己用抓抓工具实际抓取替换,不要直接照搬数值。
// 初始化设置
SetSimMode 1
Hwnd = Plugin.Window.Find(0, "魔域")
Call Plugin.Window.Active(Hwnd)
// 自定义参数,所有数值根据自己游戏窗口实际情况修改
Dim 挂机中心X = 520, 挂机中心Y = 380
Dim 血条X = 120, 血条Y = 60
Dim 蓝条X = 120, 蓝条Y = 75
Dim 怪物血条X = 320, 怪物血条Y = 40
Dim 低血颜色 = "FF2222"
Dim 怪血颜色 = "FF0000"
Dim 血药快捷键 = "F1"
Dim 蓝药快捷键 = "F2"
Dim 拾取键 = "Space"
Dim 回城键 = "F3"
Dim 普攻键 = "1"
Dim 群攻键 = "3"
Dim XP技能键 = "2"
// 主循环
Do
自身X = GetCursorX()
自身Y = GetCursorY()
If Abs(自身X - 挂机中心X) > 80 Or Abs(自身Y - 挂机中心Y) > 80 Then
MoveTo 挂机中心X, 挂机中心Y
LeftClick 1
Delay 1000
End If
血条颜色 = GetPixelColor(血条X, 血条Y)
If 血条颜色 = 低血颜色 Then
KeyPress 血药快捷键, 1
Delay 600
血条颜色2 = GetPixelColor(血条X, 血条Y)
If 血条颜色2 = 低血颜色 Then
KeyPress 回城键, 1
Delay 3000
MsgBox "血量不足,已回城,补给后重新启动脚本"
EndScript
End If
End If
蓝条颜色 = GetPixelColor(蓝条X, 蓝条Y)
If 蓝条颜色 = "2222FF" Then
KeyPress 蓝药快捷键, 1
Delay 500
End If
选怪次数 = 0
选中怪 = false
While 选怪次数 < 3 and 选中怪 = false
KeyPress "Tab", 1
Delay 300
当前怪血颜色 = GetPixelColor(怪物血条X, 怪物血条Y)
If 当前怪血颜色 = 怪血颜色 Then
选中怪 = true
End If
选怪次数 = 选怪次数 + 1
Wend
If 选中怪 = true Then
Do While GetPixelColor(怪物血条X, 怪物血条Y) = 怪血颜色
KeyPress 普攻键, 1
Delay 200
KeyPress 群攻键, 1
Delay 1500
血条颜色 = GetPixelColor(血条X, 血条Y)
If 血条颜色 = 低血颜色 Then
KeyPress 血药快捷键, 1
Delay 600
End If
Loop
Delay 800
KeyPress 拾取键, 1
Delay 1000
KeyPress 拾取键, 1
Delay 500
Else
KeyPress "Right", 1
Delay 200
Delay 500
End If
Delay 300
Loop
调试脚本的时候不要一开始就开无限循环挂一晚上,先单步执行,按F8一步一步跑,看每一步的操作是不是对的。先测选怪,站在怪堆里,看按Tab之后能不能正确识别到怪物血条,能识别再测攻击,看会不会按技能。然后测补给,手动把血弄到低血量,看脚本会不会自动喝血。再测捡物,打死怪之后看会不会按拾取。所有单个功能都测没问题了,再开短时间循环,跑个10分钟,看会不会卡壳,有没有哪里点错,没问题了再长时间挂机。
实用的优化技巧有几个,所有固定延时不要写死同一个数,比如固定200毫秒延时,改成150到250之间的随机数,模拟人手动按键盘的节奏,不会操作太规律。可以加后台绑定,用大漠插件或者按键精灵自带的后台插件绑定窗口,这样游戏窗口最小化也能跑脚本,不耽误电脑做别的事。选怪范围不要设太大,避免引到太多怪扛不住,就在挂机点周围小范围选怪就行。可以加自动判断,检测到红名玩家靠近就自动回城,避免被PK爆装备。抓背包空格的颜色,没有空格了就自动回城卖东西,不用等没药了才回。
脚本只是模拟手动键鼠操作,不要用修改内存、加速这类功能,正常模拟操作也要控制挂机时间,不要24小时一直挂,容易被系统检测到。不同的魔域版本界面布局、血条位置、颜色都不一样,所有坐标和颜色值一定要自己用抓抓工具实际抓,不要直接抄网上的现成代码,抄过来大概率用不了。跑脚本的时候不要开太多占资源的程序,避免游戏卡顿导致脚本延时不够操作失效,刚开始挂机的时候人在旁边看一会,确认运行稳定了再离开。
整个打怪脚本按模块拆分写,不要一开始就堆一整坨代码,哪里错了不好改。整个打怪流程可以拆成初始化、状态检测、选怪攻击、补给回血、拾取物品、异常处理六个部分,每个部分单独写好再拼到循环里。
初始化部分要先设置模拟模式和窗口绑定,用硬件模拟或者普通模拟都行,建议先写前台版本,调试没问题了再改成后台。定义好所有用到的常量,比如挂机点的中心坐标,各个技能的快捷键,血药蓝药的阈值,比如血量低于30%就喝血,蓝量低于20%喝蓝,技能释放的间隔时间,这些都提前定义好,后面要改数值直接在开头改,不用翻整个代码。
状态检测模块每次循环开头都跑一遍,先判断游戏窗口是不是在前台,如果被切走了就暂停等切回来。然后抓自己的血条颜色点,如果血条位置的颜色不是正常的血量颜色,说明角色死亡了,就点复活按钮,等复活之后走回城流程。然后看快捷栏的血药数量,抓血药格子的颜色,如果格子是空的,说明药吃完了,就触发回城补给。再判断自己是不是在挂机点范围内,如果偏离挂机点超过一定距离,就走回中心坐标,避免越跑越远跑到别的怪区。
选怪攻击模块是核心,魔域里最稳定的选怪方式是按Tab键切换目标,按完Tab之后延时200毫秒,抓怪物血条位置的颜色,如果抓到怪物血条的红色,说明已经选中目标了,这时候就开始按攻击键。如果按完Tab没找到血条,就再按一次Tab,最多按三次,三次都没找到就说明周围没怪,角色在原地转一下或者走两步,再继续找。选中怪之后先按1键普通攻击,然后按冷却时间放技能,比如群攻技能冷却3秒,就每3秒按一次3键,XP技能满了就按2键放,放技能之间加个100到200毫秒的延时,不要按太快导致游戏没识别。攻击过程中一直检测怪物血条,血条消失了说明怪打死了,就停手进入捡物环节。
补给模块穿插在攻击过程中,每次攻击间隙都扫一眼血条和蓝条的颜色点,血量低于设定阈值就按F1喝血,延时500毫秒等药生效,连续两次喝血还没回上来就说明药不够或者被怪打太疼,直接按回城。蓝量低于阈值就按F2喝蓝,不用等蓝空了再补,避免放不出技能。
拾取物品模块在怪物死亡之后触发,先延时800毫秒等物品爆出来,然后按空格自动拾取,延时1000毫秒等物品捡完,再按两次空格确保没漏掉。如果没有自动拾取,就鼠标移动到掉落物品的坐标点击,不过用空格自动拾取最稳定,不用找物品位置,不容易出错。如果不想捡白装占背包,就提前在游戏里设置好拾取过滤,只捡装备和材料,脚本不用额外判断。
回城补给部分新手可以先做简化版,触发回城条件的时候按F3用回城卷,然后弹出提示框告诉玩家没药了需要手动补给,等补给完按启动键继续跑脚本。进阶版本可以写自动找NPC买药、修装备,就是找到杂货商NPC的坐标,点对话,选买血药买蓝药,买够数量之后关闭商店,再点传送员传回挂机地图,走回挂机中心位置,这个部分要多加点延时,等NPC对话加载出来再点,不然容易点空。
异常处理一定要加,不然脚本跑着跑着就卡着不动了。比如连续10秒都没选中怪,说明可能卡墙了或者被障碍物挡住,就控制角色跳一下,或者前后左右走几步回到挂机中心。比如弹出来验证码弹窗,新手不好做识别的话,就加个判断,中间弹出非正常窗口就暂停脚本,响铃提示玩家手动处理。比如被其他玩家攻击,怪物血条没消失但是自己血量掉太快,就直接按回城,避免被打死爆装备。
以下是基础前台版本的示例框架,里面的坐标和颜色值必须自己用抓抓工具实际抓取替换,不要直接照搬数值。
// 初始化设置
SetSimMode 1
Hwnd = Plugin.Window.Find(0, "魔域")
Call Plugin.Window.Active(Hwnd)
// 自定义参数,所有数值根据自己游戏窗口实际情况修改
Dim 挂机中心X = 520, 挂机中心Y = 380
Dim 血条X = 120, 血条Y = 60
Dim 蓝条X = 120, 蓝条Y = 75
Dim 怪物血条X = 320, 怪物血条Y = 40
Dim 低血颜色 = "FF2222"
Dim 怪血颜色 = "FF0000"
Dim 血药快捷键 = "F1"
Dim 蓝药快捷键 = "F2"
Dim 拾取键 = "Space"
Dim 回城键 = "F3"
Dim 普攻键 = "1"
Dim 群攻键 = "3"
Dim XP技能键 = "2"
// 主循环
Do
自身X = GetCursorX()
自身Y = GetCursorY()
If Abs(自身X - 挂机中心X) > 80 Or Abs(自身Y - 挂机中心Y) > 80 Then
MoveTo 挂机中心X, 挂机中心Y
LeftClick 1
Delay 1000
End If
血条颜色 = GetPixelColor(血条X, 血条Y)
If 血条颜色 = 低血颜色 Then
KeyPress 血药快捷键, 1
Delay 600
血条颜色2 = GetPixelColor(血条X, 血条Y)
If 血条颜色2 = 低血颜色 Then
KeyPress 回城键, 1
Delay 3000
MsgBox "血量不足,已回城,补给后重新启动脚本"
EndScript
End If
End If
蓝条颜色 = GetPixelColor(蓝条X, 蓝条Y)
If 蓝条颜色 = "2222FF" Then
KeyPress 蓝药快捷键, 1
Delay 500
End If
选怪次数 = 0
选中怪 = false
While 选怪次数 < 3 and 选中怪 = false
KeyPress "Tab", 1
Delay 300
当前怪血颜色 = GetPixelColor(怪物血条X, 怪物血条Y)
If 当前怪血颜色 = 怪血颜色 Then
选中怪 = true
End If
选怪次数 = 选怪次数 + 1
Wend
If 选中怪 = true Then
Do While GetPixelColor(怪物血条X, 怪物血条Y) = 怪血颜色
KeyPress 普攻键, 1
Delay 200
KeyPress 群攻键, 1
Delay 1500
血条颜色 = GetPixelColor(血条X, 血条Y)
If 血条颜色 = 低血颜色 Then
KeyPress 血药快捷键, 1
Delay 600
End If
Loop
Delay 800
KeyPress 拾取键, 1
Delay 1000
KeyPress 拾取键, 1
Delay 500
Else
KeyPress "Right", 1
Delay 200
Delay 500
End If
Delay 300
Loop
调试脚本的时候不要一开始就开无限循环挂一晚上,先单步执行,按F8一步一步跑,看每一步的操作是不是对的。先测选怪,站在怪堆里,看按Tab之后能不能正确识别到怪物血条,能识别再测攻击,看会不会按技能。然后测补给,手动把血弄到低血量,看脚本会不会自动喝血。再测捡物,打死怪之后看会不会按拾取。所有单个功能都测没问题了,再开短时间循环,跑个10分钟,看会不会卡壳,有没有哪里点错,没问题了再长时间挂机。
实用的优化技巧有几个,所有固定延时不要写死同一个数,比如固定200毫秒延时,改成150到250之间的随机数,模拟人手动按键盘的节奏,不会操作太规律。可以加后台绑定,用大漠插件或者按键精灵自带的后台插件绑定窗口,这样游戏窗口最小化也能跑脚本,不耽误电脑做别的事。选怪范围不要设太大,避免引到太多怪扛不住,就在挂机点周围小范围选怪就行。可以加自动判断,检测到红名玩家靠近就自动回城,避免被PK爆装备。抓背包空格的颜色,没有空格了就自动回城卖东西,不用等没药了才回。
脚本只是模拟手动键鼠操作,不要用修改内存、加速这类功能,正常模拟操作也要控制挂机时间,不要24小时一直挂,容易被系统检测到。不同的魔域版本界面布局、血条位置、颜色都不一样,所有坐标和颜色值一定要自己用抓抓工具实际抓,不要直接抄网上的现成代码,抄过来大概率用不了。跑脚本的时候不要开太多占资源的程序,避免游戏卡顿导致脚本延时不够操作失效,刚开始挂机的时候人在旁边看一会,确认运行稳定了再离开。

