单机传奇回收装备要输入验证码怎么去掉 服务端脚本改法完整详解

来源: 作者: 点击:
点回收员,弹出一个框让你照抄一串数字,不填就不给回收。单机端里这种情况很常见。它不是游戏本身的机制,是脚本里写死的一道关卡。想拆掉,多数情况下改一个文本文件就够,用不着动引擎,也用不着动数据库。下面把定位、判断、修改、测试整条线走一遍。

一、这道验证码到底是谁加进去的

单机传奇服务端叫 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

原来的 #IF CheckRandomNo 和 #ELSEACT MessageBox 整段删掉。玩家不管输什么都进回收菜单。

改法三,验证是被 #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,重载或重启,进游戏实测一遍。脚本里找不到,再去引擎和插件配置里关。单机端就你自己玩,改坏了就地还原,按这个顺序试,几次就能摸熟。