传奇自动打装备回收脚本完整编写教程

来源: 作者: 点击:
想写一个能自动打怪、自动捡装备、再把没用的装备自动回收掉的脚本,本质上是在干两件事:第一,让角色像真人一样循环刷怪;第二,每次背包快满的时候,自动把垃圾装备处理掉换成资源。这篇教程不讲虚的,直接从底层逻辑拆到具体代码,不管是想在服务端写回收系统,还是想用按键精灵做自动化,都能找到对应的写法。

**一、自动回收脚本的两种实现路线**

做自动回收脚本,先得搞清楚你要走哪条路。是直接在服务端写脚本,让游戏本身带自动回收功能?还是用外部工具模拟人工操作?

服务端脚本适合自己架设传奇的人。在QFunction-0.txt这类文件里写触发逻辑,玩家捡到装备或者点击某个按钮,系统自动执行回收命令。优势是稳定、高效、不会被当作外挂。缺点是只有GM能改。

外部工具适合玩别人开的服。用按键精灵、雷电模拟器操作录制、或者Python图像识别,模拟人手动点回收的流程。优势是通用,什么服都能用。缺点是容易被检测,而且脚本容易因为界面变动而失效。

下面两种路线都讲,你自己选。

**二、服务端自动回收脚本写法(适合GM)**

在服务端实现自动回收,核心是两样东西:一个触发机制,一个回收逻辑。触发机制可以用定时器,让系统每隔几秒检查一次背包;也可以用物品触发,比如做个"自动回收宝石",玩家双击一下就开始自动回收。

**2.1 定时器自动回收框架**

这是最常见的写法,在QFunction-0.txt里设置一个定时器,每隔指定时间运行一次回收检测。

```
[@StartAutoRecycle]
#ACT
SETONTIMER 1 3
SENDMSG 6 已开启自动回收,每3秒检测一次背包。
break

[@OnTimer1]
#ACT
GOTO @RecycleCheck
break

[@RecycleCheck]
#IF
CHECKBAGSIZE 5
#ACT
GOTO @DoRecycle
#ELSESAY
背包空间充足,无需回收。
break
```

这段代码的意思:开启定时器后,每3秒跑一次[@OnTimer1],跳转到[@RecycleCheck]检测背包剩余空间。如果背包空格少于5个,就执行真正的回收操作[@DoRecycle]。

**2.2 按装备名称或品质回收**

真正的回收逻辑,要把具体的装备列出来,一件一件处理。可以按名字回收,比如所有沃玛系列装备都回收;也可以按品质回收,比如只回收白色名字的普通装备。

按名字回收的写法:

```
[@DoRecycle]
#IF
CHECKITEM 修罗 1
#ACT
TAKE 修罗 1
GAMEGOLD + 5
GIVE 金币 1000
SENDMSG 6 回收修罗成功,获得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
MOV N1 0
GOTO @RecycleLoop
break

[@RecycleLoop]
#IF
CHECKITEM 修罗 1
#ACT
TAKE 修罗 1
GAMEGOLD + 5
INC N1 1
GOTO @RecycleLoop
#IF
CHECKITEM 幽灵项链 1
#ACT
TAKE 幽灵项链 1
GAMEGOLD + 8
INC N1 1
GOTO @RecycleLoop
#IF
CHECKITEM 铂金戒指 1
#ACT
TAKE 铂金戒指 1
GAMEGOLD + 8
INC N1 1
GOTO @RecycleLoop
#ELSESAY
回收完成,共回收<$STR(N1)>件装备。
break
```

N1变量记录回收总数,回收结束后显示给玩家看。

**2.4 智能穿戴逻辑**

有些高级版本不仅要回收,还要自动穿上更好的装备。这需要比较背包里的装备和身上穿着的属性。

实现思路:获取当前武器的基础攻击力,再获取背包里每件武器的攻击力,如果背包里的更高就自动换上。

```
[@AutoEquipBetter]
#IF
CHECKITEMW 裁决之杖
#ACT
MOV N1 0
GOTO @CompareWeapon
break

[@CompareWeapon]
;这里需要引擎支持读取装备属性的命令
;不同引擎命令不同,此处仅为示例
#IF
GetItemFieldValue 裁决之杖 DC < $ITEMDC
#ACT
TakeW 裁决之杖
Give 裁决之杖 1
SENDMSG 6 已自动换下当前武器。
break
```

实际写的时候要去查对应引擎的帮助文档,GOM、GEE、HGE的命令有差异。

**三、外部工具自动回收脚本写法(适合玩家)**

如果玩的是别人的服,没法改服务端,只能用外部工具模拟操作。目前最主流的方法是操作录制和图像识别。

**3.1 雷电模拟器操作录制法**

雷电模拟器自带操作录制功能,完全免费,适合不想写代码的玩家。

操作步骤:
1. 打开雷电模拟器,启动传奇游戏
2. 点击右侧边栏"更多"→"操作录制"
3. 点"开始录制",然后手动操作一遍回收流程:
- 打开背包
- 点击"回收"按钮(或者一键回收)
- 点击确认
- 关闭背包
4. 点"录制结束",保存脚本
5. 在设置里选择"循环运行至手动停止",设置循环间隔(比如5分钟执行一次)

这个方法最简单,但缺点是一旦游戏界面变化(比如更新后按钮位置移动了),脚本就会点歪。

**3.2 按键精灵脚本写法**

按键精灵可以写更复杂的逻辑,比如检测背包里有没有装备、识别物品颜色等。

一个基础版自动回收按键脚本框架:

```
// 循环开始
While True
// 按F9打开背包
KeyPress "F9", 1
Delay 500

// 移动到回收按钮位置并点击
MoveTo 800, 450
LeftClick 1
Delay 1000

// 确认回收弹窗
MoveTo 700, 400
LeftClick 1
Delay 1000

// 关闭背包
KeyPress "F9", 1

// 等待5分钟再次执行
Delay 300000
Wend
```

这个脚本的问题是太死板,不管背包有没有满都去点回收。稍微改进一下,加个找图判断:

```
// 检测背包是否已满(找背包满的标志)
FindPic 0, 0, 1920, 1080, "Attachment:bagfull.png", 0.9, intX, intY
If intX > 0 And intY > 0 Then
// 背包满了,执行回收
KeyPress "F9", 1
Delay 500
MoveTo 800, 450
LeftClick 1
Delay 1000
MoveTo 700, 400
LeftClick 1
Delay 1000
KeyPress "F9", 1
End If
Delay 60000 // 每分钟检测一次
```

用找图找色,可以更精准地判断什么时候该回收。

**3.3 Python图像识别脚本**

想写更强大的自动回收,可以用Python配合opencv做图像识别。核心流程是:

1. 截取游戏屏幕
2. 用图像识别找到背包里的装备图标
3. 判断装备颜色(白色、蓝色、紫色等)
4. 如果是垃圾装备,模拟鼠标右键点击回收

这种方法技术门槛高,但最灵活,可以做到"只回收白装,保留紫装"这种智能筛选。

**四、回收规则的设定逻辑**

不管用哪种方式写脚本,回收规则的设定是核心。常见的规则类型有:

**按装备名称回收**:最精准,但需要维护一个长长的装备列表。比如"修罗、凝霜、降魔"这些垃圾装直接回收。

**按装备品质回收**:通过装备名字颜色判断。白色名字的普通装备回收,蓝色名字的珍品保留。外部工具常用这种方法,通过找图识别颜色。

**按装备等级回收**:捡到的装备如果等级低于角色当前等级太多,就回收掉。

**按绑定状态回收**:绑定的装备不能交易,直接回收换资源。

**按回收价值回收**:先计算这件装备回收能得多少资源,如果低于某个阈值就回收。

在服务端写脚本,通常用第一种和第四种。用外部工具,通常用第二种。

**五、脚本优化与防卡死技巧**

写好的脚本要能长时间运行,必须考虑各种异常情况:

**卡死检测**:每隔一段时间检测角色坐标,如果长时间没变,可能是卡住了,执行小退重进。

**死亡检测**:检测到角色死亡,自动执行复活回城。

**背包空间检测**:背包满了还没触发回收时,强制停止打怪,先执行回收。

**网络波动处理**:掉线后自动重连,继续挂机。

**操作间隔控制**:攻击间隔设置800-1500毫秒,拾取范围3-5格,别太快,容易被系统踢。

**六、常见问题排查**

**脚本回收时漏捡装备**:拾取范围设太小,或者攻击完没等怪物尸体消失就移动走了。调大拾取范围,加长捡物延迟。

**背包满了不回收**:检测条件没触发。检查回收命令里的物品名称和游戏里是否完全一致,包括空格和特殊符号。

**回收时把好装备也回收了**:筛选规则没写对。如果是按键脚本,用找色判断装备品质;如果是服务端脚本,加一层IF判断,把好装备排除掉。

**脚本跑着跑着就停了**:大概率是遇到了意外弹窗,比如活动弹窗、系统提示。加个异常处理,检测到弹窗先关掉再继续。

自动回收脚本从简单到复杂,跨度很大。刚开始学,先用雷电模拟器录制一个简单的,能跑起来再说。想深入研究的,去翻引擎帮助文档,把GAMEGOLD、TAKE、CHECKITEM这几个命令玩明白,配合变量和定时器,就能写出挺实用的自动回收系统。