想写一个能自动打怪、自动捡装备、再把没用的装备自动回收掉的脚本,本质上是在干两件事:第一,让角色像真人一样循环刷怪;第二,每次背包快满的时候,自动把垃圾装备处理掉换成资源。这篇教程不讲虚的,直接从底层逻辑拆到具体代码,不管是想在服务端写回收系统,还是想用按键精灵做自动化,都能找到对应的写法。
**一、自动回收脚本的两种实现路线**
做自动回收脚本,先得搞清楚你要走哪条路。是直接在服务端写脚本,让游戏本身带自动回收功能?还是用外部工具模拟人工操作?
服务端脚本适合自己架设传奇的人。在QFunction-0.txt这类文件里写触发逻辑,玩家捡到装备或者点击某个按钮,系统自动执行回收命令。优势是稳定、高效、不会被当作外挂。缺点是只有GM能改。
外部工具适合玩别人开的服。用按键精灵、雷电模拟器操作录制、或者Python图像识别,模拟人手动点回收的流程。优势是通用,什么服都能用。缺点是容易被检测,而且脚本容易因为界面变动而失效。
下面两种路线都讲,你自己选。
**二、服务端自动回收脚本写法(适合GM)**
在服务端实现自动回收,核心是两样东西:一个触发机制,一个回收逻辑。触发机制可以用定时器,让系统每隔几秒检查一次背包;也可以用物品触发,比如做个"自动回收宝石",玩家双击一下就开始自动回收。
**2.1定时器自动回收框架**
这是最常见的写法,在QFunction-0.txt里设置一个定时器,每隔指定时间运行一次回收检测。
```
[@StartAutoRecycle]
#ACT
SETONTIMER13
SENDMSG6已开启自动回收,每3秒检测一次背包。
break
[@OnTimer1]
#ACT
GOTO@RecycleCheck
break
[@RecycleCheck]
#IF
CHECKBAGSIZE5
#ACT
GOTO@DoRecycle
#ELSESAY
背包空间充足,无需回收。
break
```
这段代码的意思:开启定时器后,每3秒跑一次[@OnTimer1],跳转到[@RecycleCheck]检测背包剩余空间。如果背包空格少于5个,就执行真正的回收操作[@DoRecycle]。
**2.2按装备名称或品质回收**
真正的回收逻辑,要把具体的装备列出来,一件一件处理。可以按名字回收,比如所有沃玛系列装备都回收;也可以按品质回收,比如只回收白色名字的普通装备。
按名字回收的写法:
```
[@DoRecycle]
#IF
CHECKITEM修罗1
#ACT
TAKE修罗1
GAMEGOLD+5
GIVE金币1000
SENDMSG6回收修罗成功,获得5元宝+1000金币。
GOTO@DoRecycle
#ELSEACT
GOTO@NextItem
break
```
这种写法有个问题:如果背包里有10件修罗,只回收一件就跳去下一个物品了。想一次性全部回收,可以用循环或者参数控制回收数量。
更高效的写法是用TakeCheckItem结合物品列表:
```
[@RecycleWomaSeries]
#IF
CHECKITEM修罗1
#ACT
TAKECHECKITEM修罗1
GAMEGOLD+5
GOTO@RecycleWomaSeries
#IF
CHECKITEM幽灵项链1
#ACT
TAKECHECKITEM幽灵项链1
GAMEGOLD+8
GOTO@RecycleWomaSeries
#IF
CHECKITEM铂金戒指1
#ACT
TAKECHECKITEM铂金戒指1
GAMEGOLD+8
GOTO@RecycleWomaSeries
#ELSESAY
沃玛系列装备回收完毕。
break
```
**2.3批量回收与奖励发放**
很多版本喜欢做"一键回收",把所有符合条件的一次性回收完。这种要用到循环变量和计数功能。
```
[@RecycleAll]
#ACT
MOVN10
GOTO@RecycleLoop
break
[@RecycleLoop]
#IF
CHECKITEM修罗1
#ACT
TAKE修罗1
GAMEGOLD+5
INCN11
GOTO@RecycleLoop
#IF
CHECKITEM幽灵项链1
#ACT
TAKE幽灵项链1
GAMEGOLD+8
INCN11
GOTO@RecycleLoop
#IF
CHECKITEM铂金戒指1
#ACT
TAKE铂金戒指1
GAMEGOLD+8
INCN11
GOTO@RecycleLoop
#ELSESAY
回收完成,共回收<$STR(N1)>件装备。
break
```
N1变量记录回收总数,回收结束后显示给玩家看。
**2.4智能穿戴逻辑**
有些高级版本不仅要回收,还要自动穿上更好的装备。这需要比较背包里的装备和身上穿着的属性。
实现思路:获取当前武器的基础攻击力,再获取背包里每件武器的攻击力,如果背包里的更高就自动换上。
```
[@AutoEquipBetter]
#IF
CHECKITEMW裁决之杖
#ACT
MOVN10
GOTO@CompareWeapon
break
[@CompareWeapon]
;这里需要引擎支持读取装备属性的命令
;不同引擎命令不同,此处仅为示例
#IF
GetItemFieldValue裁决之杖DC<$ITEMDC
#ACT
TakeW裁决之杖
Give裁决之杖1
SENDMSG6已自动换下当前武器。
break
```
实际写的时候要去查对应引擎的帮助文档,GOM、GEE、HGE的命令有差异。
**三、外部工具自动回收脚本写法(适合玩家)**
如果玩的是别人的服,没法改服务端,只能用外部工具模拟操作。目前最主流的方法是操作录制和图像识别。
**3.1雷电模拟器操作录制法**
雷电模拟器自带操作录制功能,完全免费,适合不想写代码的玩家。
操作步骤:
1.打开雷电模拟器,启动传奇游戏
2.点击右侧边栏"更多"→"操作录制"
3.点"开始录制",然后手动操作一遍回收流程:
-打开背包
-点击"回收"按钮(或者一键回收)
-点击确认
-关闭背包
4.点"录制结束",保存脚本
5.在设置里选择"循环运行至手动停止",设置循环间隔(比如5分钟执行一次)
这个方法最简单,但缺点是一旦游戏界面变化(比如更新后按钮位置移动了),脚本就会点歪。
**3.2按键精灵脚本写法**
按键精灵可以写更复杂的逻辑,比如检测背包里有没有装备、识别物品颜色等。
一个基础版自动回收按键脚本框架:
```
//循环开始
WhileTrue
//按F9打开背包
KeyPress"F9"1
Delay500
//移动到回收按钮位置并点击
MoveTo800450
LeftClick1
Delay1000
//确认回收弹窗
MoveTo700400
LeftClick1
Delay1000
//关闭背包
KeyPress"F9"1
//等待5分钟再次执行
Delay300000
Wend
```
这个脚本的问题是太死板,不管背包有没有满都去点回收。稍微改进一下,加个找图判断:
```
//检测背包是否已满(找背包满的标志)
FindPic0019201080"Attachment:bagfull.png"0.9intXintY
IfintX>0AndintY>0Then
//背包满了,执行回收
KeyPress"F9"1
Delay500
MoveTo800450
LeftClick1
Delay1000
MoveTo700400
LeftClick1
Delay1000
KeyPress"F9"1
EndIf
Delay60000//每分钟检测一次
```
用找图找色,可以更精准地判断什么时候该回收。
**3.3Python图像识别脚本**
想写更强大的自动回收,可以用Python配合opencv做图像识别。核心流程是:
1.截取游戏屏幕
2.用图像识别找到背包里的装备图标
3.判断装备颜色(白色、蓝色、紫色等)
4.如果是垃圾装备,模拟鼠标右键点击回收
这种方法技术门槛高,但最灵活,可以做到"只回收白装,保留紫装"这种智能筛选。
**四、回收规则的设定逻辑**
不管用哪种方式写脚本,回收规则的设定是核心。常见的规则类型有:
**按装备名称回收**:最精准,但需要维护一个长长的装备列表。比如"修罗、凝霜、降魔"这些垃圾装直接回收。
**按装备品质回收**:通过装备名字颜色判断。白色名字的普通装备回收,蓝色名字的珍品保留。外部工具常用这种方法,通过找图识别颜色。
**按装备等级回收**:捡到的装备如果等级低于角色当前等级太多,就回收掉。
**按绑定状态回收**:绑定的装备不能交易,直接回收换资源。
**按回收价值回收**:先计算这件装备回收能得多少资源,如果低于某个阈值就回收。
在服务端写脚本,通常用第一种和第四种。用外部工具,通常用第二种。
**五、脚本优化与防卡死技巧**
写好的脚本要能长时间运行,必须考虑各种异常情况:
**卡死检测**:每隔一段时间检测角色坐标,如果长时间没变,可能是卡住了,执行小退重进。
**死亡检测**:检测到角色死亡,自动执行复活回城。
**背包空间检测**:背包满了还没触发回收时,强制停止打怪,先执行回收。
**网络波动处理**:掉线后自动重连,继续挂机。
**操作间隔控制**:攻击间隔设置800-1500毫秒,拾榷围3-5格,别太快,容易被系统踢。
**六、常见问题排查**
**脚本回收时漏捡装备**:拾榷围设太小,或者攻击完没等怪物尸体消失就移动走了。调大拾榷围,加长捡物延迟。
**背包满了不回收**:检测条件没触发。检查回收命令里的物品名称和游戏里是否完全一致,包括空格和特殊符号。
**回收时把好装备也回收了**:筛选规则没写对。如果是按键脚本,用找色判断装备品质;如果是服务端脚本,加一层IF判断,把好装备排除掉。
**脚本跑着跑着就停了**:大概率是遇到了意外弹窗,比如活动弹窗、系统提示。加个异常处理,检测到弹窗先关掉再继续。
自动回收脚本从简单到复杂,跨度很大。刚开始学,先用雷电模拟器录制一个简单的,能跑起来再说。想深入研究的,去翻引擎帮助文档,把GAMEGOLD、TAKE、CHECKITEM这几个命令玩明白,配合变量和定时器,就能写出挺实用的自动回收系统。
**一、自动回收脚本的两种实现路线**
做自动回收脚本,先得搞清楚你要走哪条路。是直接在服务端写脚本,让游戏本身带自动回收功能?还是用外部工具模拟人工操作?
服务端脚本适合自己架设传奇的人。在QFunction-0.txt这类文件里写触发逻辑,玩家捡到装备或者点击某个按钮,系统自动执行回收命令。优势是稳定、高效、不会被当作外挂。缺点是只有GM能改。
外部工具适合玩别人开的服。用按键精灵、雷电模拟器操作录制、或者Python图像识别,模拟人手动点回收的流程。优势是通用,什么服都能用。缺点是容易被检测,而且脚本容易因为界面变动而失效。
下面两种路线都讲,你自己选。
**二、服务端自动回收脚本写法(适合GM)**
在服务端实现自动回收,核心是两样东西:一个触发机制,一个回收逻辑。触发机制可以用定时器,让系统每隔几秒检查一次背包;也可以用物品触发,比如做个"自动回收宝石",玩家双击一下就开始自动回收。
**2.1定时器自动回收框架**
这是最常见的写法,在QFunction-0.txt里设置一个定时器,每隔指定时间运行一次回收检测。
```
[@StartAutoRecycle]
#ACT
SETONTIMER13
SENDMSG6已开启自动回收,每3秒检测一次背包。
break
[@OnTimer1]
#ACT
GOTO@RecycleCheck
break
[@RecycleCheck]
#IF
CHECKBAGSIZE5
#ACT
GOTO@DoRecycle
#ELSESAY
背包空间充足,无需回收。
break
```
这段代码的意思:开启定时器后,每3秒跑一次[@OnTimer1],跳转到[@RecycleCheck]检测背包剩余空间。如果背包空格少于5个,就执行真正的回收操作[@DoRecycle]。
**2.2按装备名称或品质回收**
真正的回收逻辑,要把具体的装备列出来,一件一件处理。可以按名字回收,比如所有沃玛系列装备都回收;也可以按品质回收,比如只回收白色名字的普通装备。
按名字回收的写法:
```
[@DoRecycle]
#IF
CHECKITEM修罗1
#ACT
TAKE修罗1
GAMEGOLD+5
GIVE金币1000
SENDMSG6回收修罗成功,获得5元宝+1000金币。
GOTO@DoRecycle
#ELSEACT
GOTO@NextItem
break
```
这种写法有个问题:如果背包里有10件修罗,只回收一件就跳去下一个物品了。想一次性全部回收,可以用循环或者参数控制回收数量。
更高效的写法是用TakeCheckItem结合物品列表:
```
[@RecycleWomaSeries]
#IF
CHECKITEM修罗1
#ACT
TAKECHECKITEM修罗1
GAMEGOLD+5
GOTO@RecycleWomaSeries
#IF
CHECKITEM幽灵项链1
#ACT
TAKECHECKITEM幽灵项链1
GAMEGOLD+8
GOTO@RecycleWomaSeries
#IF
CHECKITEM铂金戒指1
#ACT
TAKECHECKITEM铂金戒指1
GAMEGOLD+8
GOTO@RecycleWomaSeries
#ELSESAY
沃玛系列装备回收完毕。
break
```
**2.3批量回收与奖励发放**
很多版本喜欢做"一键回收",把所有符合条件的一次性回收完。这种要用到循环变量和计数功能。
```
[@RecycleAll]
#ACT
MOVN10
GOTO@RecycleLoop
break
[@RecycleLoop]
#IF
CHECKITEM修罗1
#ACT
TAKE修罗1
GAMEGOLD+5
INCN11
GOTO@RecycleLoop
#IF
CHECKITEM幽灵项链1
#ACT
TAKE幽灵项链1
GAMEGOLD+8
INCN11
GOTO@RecycleLoop
#IF
CHECKITEM铂金戒指1
#ACT
TAKE铂金戒指1
GAMEGOLD+8
INCN11
GOTO@RecycleLoop
#ELSESAY
回收完成,共回收<$STR(N1)>件装备。
break
```
N1变量记录回收总数,回收结束后显示给玩家看。
**2.4智能穿戴逻辑**
有些高级版本不仅要回收,还要自动穿上更好的装备。这需要比较背包里的装备和身上穿着的属性。
实现思路:获取当前武器的基础攻击力,再获取背包里每件武器的攻击力,如果背包里的更高就自动换上。
```
[@AutoEquipBetter]
#IF
CHECKITEMW裁决之杖
#ACT
MOVN10
GOTO@CompareWeapon
break
[@CompareWeapon]
;这里需要引擎支持读取装备属性的命令
;不同引擎命令不同,此处仅为示例
#IF
GetItemFieldValue裁决之杖DC<$ITEMDC
#ACT
TakeW裁决之杖
Give裁决之杖1
SENDMSG6已自动换下当前武器。
break
```
实际写的时候要去查对应引擎的帮助文档,GOM、GEE、HGE的命令有差异。
**三、外部工具自动回收脚本写法(适合玩家)**
如果玩的是别人的服,没法改服务端,只能用外部工具模拟操作。目前最主流的方法是操作录制和图像识别。
**3.1雷电模拟器操作录制法**
雷电模拟器自带操作录制功能,完全免费,适合不想写代码的玩家。
操作步骤:
1.打开雷电模拟器,启动传奇游戏
2.点击右侧边栏"更多"→"操作录制"
3.点"开始录制",然后手动操作一遍回收流程:
-打开背包
-点击"回收"按钮(或者一键回收)
-点击确认
-关闭背包
4.点"录制结束",保存脚本
5.在设置里选择"循环运行至手动停止",设置循环间隔(比如5分钟执行一次)
这个方法最简单,但缺点是一旦游戏界面变化(比如更新后按钮位置移动了),脚本就会点歪。
**3.2按键精灵脚本写法**
按键精灵可以写更复杂的逻辑,比如检测背包里有没有装备、识别物品颜色等。
一个基础版自动回收按键脚本框架:
```
//循环开始
WhileTrue
//按F9打开背包
KeyPress"F9"1
Delay500
//移动到回收按钮位置并点击
MoveTo800450
LeftClick1
Delay1000
//确认回收弹窗
MoveTo700400
LeftClick1
Delay1000
//关闭背包
KeyPress"F9"1
//等待5分钟再次执行
Delay300000
Wend
```
这个脚本的问题是太死板,不管背包有没有满都去点回收。稍微改进一下,加个找图判断:
```
//检测背包是否已满(找背包满的标志)
FindPic0019201080"Attachment:bagfull.png"0.9intXintY
IfintX>0AndintY>0Then
//背包满了,执行回收
KeyPress"F9"1
Delay500
MoveTo800450
LeftClick1
Delay1000
MoveTo700400
LeftClick1
Delay1000
KeyPress"F9"1
EndIf
Delay60000//每分钟检测一次
```
用找图找色,可以更精准地判断什么时候该回收。
**3.3Python图像识别脚本**
想写更强大的自动回收,可以用Python配合opencv做图像识别。核心流程是:
1.截取游戏屏幕
2.用图像识别找到背包里的装备图标
3.判断装备颜色(白色、蓝色、紫色等)
4.如果是垃圾装备,模拟鼠标右键点击回收
这种方法技术门槛高,但最灵活,可以做到"只回收白装,保留紫装"这种智能筛选。
**四、回收规则的设定逻辑**
不管用哪种方式写脚本,回收规则的设定是核心。常见的规则类型有:
**按装备名称回收**:最精准,但需要维护一个长长的装备列表。比如"修罗、凝霜、降魔"这些垃圾装直接回收。
**按装备品质回收**:通过装备名字颜色判断。白色名字的普通装备回收,蓝色名字的珍品保留。外部工具常用这种方法,通过找图识别颜色。
**按装备等级回收**:捡到的装备如果等级低于角色当前等级太多,就回收掉。
**按绑定状态回收**:绑定的装备不能交易,直接回收换资源。
**按回收价值回收**:先计算这件装备回收能得多少资源,如果低于某个阈值就回收。
在服务端写脚本,通常用第一种和第四种。用外部工具,通常用第二种。
**五、脚本优化与防卡死技巧**
写好的脚本要能长时间运行,必须考虑各种异常情况:
**卡死检测**:每隔一段时间检测角色坐标,如果长时间没变,可能是卡住了,执行小退重进。
**死亡检测**:检测到角色死亡,自动执行复活回城。
**背包空间检测**:背包满了还没触发回收时,强制停止打怪,先执行回收。
**网络波动处理**:掉线后自动重连,继续挂机。
**操作间隔控制**:攻击间隔设置800-1500毫秒,拾榷围3-5格,别太快,容易被系统踢。
**六、常见问题排查**
**脚本回收时漏捡装备**:拾榷围设太小,或者攻击完没等怪物尸体消失就移动走了。调大拾榷围,加长捡物延迟。
**背包满了不回收**:检测条件没触发。检查回收命令里的物品名称和游戏里是否完全一致,包括空格和特殊符号。
**回收时把好装备也回收了**:筛选规则没写对。如果是按键脚本,用找色判断装备品质;如果是服务端脚本,加一层IF判断,把好装备排除掉。
**脚本跑着跑着就停了**:大概率是遇到了意外弹窗,比如活动弹窗、系统提示。加个异常处理,检测到弹窗先关掉再继续。
自动回收脚本从简单到复杂,跨度很大。刚开始学,先用雷电模拟器录制一个简单的,能跑起来再说。想深入研究的,去翻引擎帮助文档,把GAMEGOLD、TAKE、CHECKITEM这几个命令玩明白,配合变量和定时器,就能写出挺实用的自动回收系统。

