点回收员,弹出一个框让你照抄一串数字,不填就不给回收。单机端里这种情况很常见。它不是游戏本身的机制,是脚本里写死的一道关卡。想拆掉,多数情况下改一个文本文件就够,用不着动引擎,也用不着动数据库。下面把定位、判断、修改、测试整条线走一遍。
一、这道验证码到底是谁加进去的
单机传奇服务端叫MirServer,管游戏逻辑的是Mir200\Envir这个目录。装备回收这类功能,都是NPC脚本在做。脚本的语法里并没有"验证码"这种东西,作者的做法是:运行时生成一串随机数,显示在对话框里,让玩家照抄一遍再输进去,然后用CheckRandomNo这条命令比对,对了才放行。目的只有一个,挡住脱机和挂机脚本无脑点回收。
所以你在游戏里看到那句"为防止数据出错丢失,启动验证码激活回收",是作者写在文本里的固定台词,不是什么系统功能。要改掉它,就是把对应的那几行脚本删掉或者绕过去。
只有一种例外:验证来自引擎侧或者反外挂插件,不在脚本文本里。这种放到后面单独讲。
二、先在服务端里把脚本找出来
回收验证基本藏在下面这几个位置:
Market_Def,NPC对话脚本,回收员的对话一般在这里。
QuestDiary,功能脚本,回收常常被#CALL到这里执行。
QFunction-0.txt,触发型功能脚本。
QManage.txt,登录和任务脚本,少数端把检测写在这。
不用挨个点开看。用Notepad++这类支持"在文件夹中查找"的工具,搜索范围选到Envir,关键词一次多填几个:
验证码、SetRandomNo、CheckRandomNo、$RANDOMNO、@@CheckNo、CheckNo、防脱机、防挂
命中的文件就是你要动的那一个。多数单机端,直接搜SetRandomNo或CheckRandomNo就能到达现场。
三、看懂验证段长什么样
带验证的回收脚本,骨架大致是这个样子:
[@main]
#IF
CheckLevelEx>0
#ACT
SetRandomNo
#SAY
为防止数据出错丢失回收员启动验证码激活回收...
本次生成的验证码是→[<$RANDOMNO>]
<请输入上面的验证码/@@CheckNo>\
[@@CheckNo]
#IF
CheckRandomNo
#ACT
GOTO@OKHS
#ELSEACT
MessageBox验证码输入错误请重新输入...
[@OKHS]
#IF
#SAY
一级回收:<一件祖玛首饰>兑换5元宝+150000经验
...
<一键回收/@HS01>
这三段就是完整的验证流程。[@main]先用SetRandomNo生成随机码,存进$RANDOMNO,#SAY把它和输入按钮显示出来。玩家点那个带@@的按钮会弹出输入框,输入的内容送到[@@CheckNo]。CheckRandomNo做比对,正确就跳@OKHS,错误就弹一句提示。@OKHS才是真正的回收菜单。
说白了,验证就是横在回收菜单前的一道门。把门拆了,人自然就进去了。
四、动手改,三种改法
改之前先把原文件复制一份存好。这一步别省,改坏了直接还原,比重装服务端省事得多。
改法一,让主入口直接跳过。最省事的一种。把[@main]里SetRandomNo那一行和整段验证用的#SAY全删掉,换成:
[@main]
#ACT
GOTO@OKHS
这样点NPC就直接进回收界面。@OKHS这个标签名必须和文件里实际用的一致,不同版本可能叫@回收、@HS、@OKHS,照着抄就行。
改法二,留着外壳直接放行。你不想动[@main],那就把[@@CheckNo]换成:
[@@CheckNo]
#ACT
GOTO@OKHS
原来的#IFCheckRandomNo和#ELSEACTMessageBox整段删掉。玩家不管输什么都进回收菜单。
改法三,验证是被#CALL调出去的。有的脚本[@main]里写的是#CALL[\验证\验证码.txt]@验证,逻辑放在一个单独文件里。这时改#CALL那一行,让它直接调真正的回收脚本:
#CALL[\装备回收\一级回收.txt]@回收
或者干脆把那个验证文件清空,只留一句跳转。
三种都能用。想干净利落,选改法一。
验证的形式不影响改法。不管是随机数字、算术题、按顺序点数字,还是选颜色,本质都一样:[@main]挡路,[@@CheckNo]判断,回收标签干活。拆法通用。
五、脚本里翻不到验证的情况
关键词一个都没搜到,说明验证不在脚本里,多半在引擎或插件上。
GOM引擎:装过反外挂或防脱机插件的,插件会在回收NPC上挂一道验证。开M2Server,进插件的配置面板,把脱机检测、回收验证这类开关关掉。有的端插件是单独一个程序在跑,那就到它自己的设置界面里关。
GEE引擎:M2Server选项→功能设置里,找防脱机、反挂机相关的项关掉。部分版本的登录器配置里还有一个检测开关,两边都看一遍。
还有一个容易漏的地方。打包端的人可能把验证写进了机器人脚本(Envir\Robot_def)或者定时器脚本,搜索时把这两个目录也带上。
六、改完必须做的几件事
编码。脚本一律存成ANSI/GBK。存成UTF-8进游戏就是乱码方块。Notepad++的"编码"菜单里核一下再存盘。
骨架别乱删。#IF、#ACT、#SAY、[@标签]是脚本骨架,标签之间靠跳转连着。删多了会出现点NPC没反应,或者卡在原界面出不去。
#ACT段结尾的BREAK别丢。丢了程序可能继续往下执行到别的段落。
标签名别撞车。同一个文件里出现两个[@OKHS]会出问题。
重载或重启。存盘后在游戏里用GM命令重载脚本或NPC,也可以直接重启M2Server。改NPC对话脚本重载就生效,改QFunction、QManage这类建议重启。
进游戏实测。点回收员,看是不是直接出菜单;点一键回收,看装备有没有扣掉,经验和元宝有没有加。
七、几个容易踩的坑
删了验证但点回收没反应:多半是@OKHS名字写错,或者跳转目标被一起删掉了。回去核对标签。
中文全变成乱码:编码存成UTF-8了,改回ANSI。
一点回收就掉线,或者M2报错:语法改坏了。#IF和#ACT配对错、标签没闭合都会这样。拿备份还原重改。
回收正常但提示还弹:验证可能不止一处。NPC主脚本一个,被#CALL的功能脚本里还有一个,两处都要清。
插件关了还弹:登录器自带的检测没关,两头都查。
八、几种变体,别和验证码搞混
回收前弹出输入框让你填数字:本文讲的就是这种。
回收要点一个确认按钮:那只是脚本里的普通按钮,不是验证,想省事可以直接删按钮改成自动执行。
回收要输入密码或二次密码:逻辑一样,脚本里用#IF比对变量或物品,删掉判断段即可。
回收限制次数或等级:这不是验证,是#IF条件,得改条件值,别去删验证段。
引擎防脱机检测:参照第五节处理。
九、整条操作路线
在MirServer的Envir目录里搜关键词,定位到带SetRandomNo、CheckRandomNo的脚本段落,让[@main]直接跳到回收菜单标签,删掉验证段,存成ANSI,重载或重启,进游戏实测一遍。脚本里找不到,再去引擎和插件配置里关。单机端就你自己玩,改坏了就地还原,按这个顺序试,几次就能摸熟。
一、这道验证码到底是谁加进去的
单机传奇服务端叫MirServer,管游戏逻辑的是Mir200\Envir这个目录。装备回收这类功能,都是NPC脚本在做。脚本的语法里并没有"验证码"这种东西,作者的做法是:运行时生成一串随机数,显示在对话框里,让玩家照抄一遍再输进去,然后用CheckRandomNo这条命令比对,对了才放行。目的只有一个,挡住脱机和挂机脚本无脑点回收。
所以你在游戏里看到那句"为防止数据出错丢失,启动验证码激活回收",是作者写在文本里的固定台词,不是什么系统功能。要改掉它,就是把对应的那几行脚本删掉或者绕过去。
只有一种例外:验证来自引擎侧或者反外挂插件,不在脚本文本里。这种放到后面单独讲。
二、先在服务端里把脚本找出来
回收验证基本藏在下面这几个位置:
Market_Def,NPC对话脚本,回收员的对话一般在这里。
QuestDiary,功能脚本,回收常常被#CALL到这里执行。
QFunction-0.txt,触发型功能脚本。
QManage.txt,登录和任务脚本,少数端把检测写在这。
不用挨个点开看。用Notepad++这类支持"在文件夹中查找"的工具,搜索范围选到Envir,关键词一次多填几个:
验证码、SetRandomNo、CheckRandomNo、$RANDOMNO、@@CheckNo、CheckNo、防脱机、防挂
命中的文件就是你要动的那一个。多数单机端,直接搜SetRandomNo或CheckRandomNo就能到达现场。
三、看懂验证段长什么样
带验证的回收脚本,骨架大致是这个样子:
[@main]
#IF
CheckLevelEx>0
#ACT
SetRandomNo
#SAY
为防止数据出错丢失回收员启动验证码激活回收...
本次生成的验证码是→[<$RANDOMNO>]
<请输入上面的验证码/@@CheckNo>\
[@@CheckNo]
#IF
CheckRandomNo
#ACT
GOTO@OKHS
#ELSEACT
MessageBox验证码输入错误请重新输入...
[@OKHS]
#IF
#SAY
一级回收:<一件祖玛首饰>兑换5元宝+150000经验
...
<一键回收/@HS01>
这三段就是完整的验证流程。[@main]先用SetRandomNo生成随机码,存进$RANDOMNO,#SAY把它和输入按钮显示出来。玩家点那个带@@的按钮会弹出输入框,输入的内容送到[@@CheckNo]。CheckRandomNo做比对,正确就跳@OKHS,错误就弹一句提示。@OKHS才是真正的回收菜单。
说白了,验证就是横在回收菜单前的一道门。把门拆了,人自然就进去了。
四、动手改,三种改法
改之前先把原文件复制一份存好。这一步别省,改坏了直接还原,比重装服务端省事得多。
改法一,让主入口直接跳过。最省事的一种。把[@main]里SetRandomNo那一行和整段验证用的#SAY全删掉,换成:
[@main]
#ACT
GOTO@OKHS
这样点NPC就直接进回收界面。@OKHS这个标签名必须和文件里实际用的一致,不同版本可能叫@回收、@HS、@OKHS,照着抄就行。
改法二,留着外壳直接放行。你不想动[@main],那就把[@@CheckNo]换成:
[@@CheckNo]
#ACT
GOTO@OKHS
原来的#IFCheckRandomNo和#ELSEACTMessageBox整段删掉。玩家不管输什么都进回收菜单。
改法三,验证是被#CALL调出去的。有的脚本[@main]里写的是#CALL[\验证\验证码.txt]@验证,逻辑放在一个单独文件里。这时改#CALL那一行,让它直接调真正的回收脚本:
#CALL[\装备回收\一级回收.txt]@回收
或者干脆把那个验证文件清空,只留一句跳转。
三种都能用。想干净利落,选改法一。
验证的形式不影响改法。不管是随机数字、算术题、按顺序点数字,还是选颜色,本质都一样:[@main]挡路,[@@CheckNo]判断,回收标签干活。拆法通用。
五、脚本里翻不到验证的情况
关键词一个都没搜到,说明验证不在脚本里,多半在引擎或插件上。
GOM引擎:装过反外挂或防脱机插件的,插件会在回收NPC上挂一道验证。开M2Server,进插件的配置面板,把脱机检测、回收验证这类开关关掉。有的端插件是单独一个程序在跑,那就到它自己的设置界面里关。
GEE引擎:M2Server选项→功能设置里,找防脱机、反挂机相关的项关掉。部分版本的登录器配置里还有一个检测开关,两边都看一遍。
还有一个容易漏的地方。打包端的人可能把验证写进了机器人脚本(Envir\Robot_def)或者定时器脚本,搜索时把这两个目录也带上。
六、改完必须做的几件事
编码。脚本一律存成ANSI/GBK。存成UTF-8进游戏就是乱码方块。Notepad++的"编码"菜单里核一下再存盘。
骨架别乱删。#IF、#ACT、#SAY、[@标签]是脚本骨架,标签之间靠跳转连着。删多了会出现点NPC没反应,或者卡在原界面出不去。
#ACT段结尾的BREAK别丢。丢了程序可能继续往下执行到别的段落。
标签名别撞车。同一个文件里出现两个[@OKHS]会出问题。
重载或重启。存盘后在游戏里用GM命令重载脚本或NPC,也可以直接重启M2Server。改NPC对话脚本重载就生效,改QFunction、QManage这类建议重启。
进游戏实测。点回收员,看是不是直接出菜单;点一键回收,看装备有没有扣掉,经验和元宝有没有加。
七、几个容易踩的坑
删了验证但点回收没反应:多半是@OKHS名字写错,或者跳转目标被一起删掉了。回去核对标签。
中文全变成乱码:编码存成UTF-8了,改回ANSI。
一点回收就掉线,或者M2报错:语法改坏了。#IF和#ACT配对错、标签没闭合都会这样。拿备份还原重改。
回收正常但提示还弹:验证可能不止一处。NPC主脚本一个,被#CALL的功能脚本里还有一个,两处都要清。
插件关了还弹:登录器自带的检测没关,两头都查。
八、几种变体,别和验证码搞混
回收前弹出输入框让你填数字:本文讲的就是这种。
回收要点一个确认按钮:那只是脚本里的普通按钮,不是验证,想省事可以直接删按钮改成自动执行。
回收要输入密码或二次密码:逻辑一样,脚本里用#IF比对变量或物品,删掉判断段即可。
回收限制次数或等级:这不是验证,是#IF条件,得改条件值,别去删验证段。
引擎防脱机检测:参照第五节处理。
九、整条操作路线
在MirServer的Envir目录里搜关键词,定位到带SetRandomNo、CheckRandomNo的脚本段落,让[@main]直接跳到回收菜单标签,删掉验证段,存成ANSI,重载或重启,进游戏实测一遍。脚本里找不到,再去引擎和插件配置里关。单机端就你自己玩,改坏了就地还原,按这个顺序试,几次就能摸熟。

