传奇验证码无限循环输入BUG原因排查与彻底修复方案

来源: 作者: 点击:
一、现象定性:脚本逻辑死循环或触发条件未重置

提示“输入4个相同颜色数字”且无限重复,本质是服务端脚本的验证状态未解除。你输入的验证码在客户端校验通过,但服务端的触发器(Flag)未关闭,导致脚本判定你“仍未完成验证”,不断重新触发弹窗。这属于版本脚本编写错误或配置冲突,并非你输入有误。

二、第一步:玩家视角应急处理(非GM)

如果你只是玩家且无法修改服务端,尝试以下操作打破循环:
- 强制刷新验证码:不要直接输入,先点击验证码图片或旁边的“换一张”按钮,获取新码后再输入。
- 切换输入法状态:确保输入法处于半角模式,全角数字(如"1111")会被系统判定为字符而非数字。
- 彻底重启客户端:关闭游戏完全退出,删除客户端目录下的 Data 缓存文件夹(或 Cache 文件夹),重新打开登录器。部分缓存错误会导致验证状态锁死。

三、第二步:GM视角服务端修复(根本解决)

如果你是架设者,需从脚本和网关两个层面修复逻辑漏洞。

1. 检查并修正验证触发脚本(核心)

无限循环通常源于 QFunction-0.txt(功能脚本)中的 @ValidateOK 段缺失或逻辑错误。
- 路径:MirServer\Mir200\Envir\Market_Def\QFunction-0.txt
• 修正逻辑:验证通过后必须用 CLOSE 关闭对话框,并用 Set [XXX] 1 设置标记。

; 正确的验证通过脚本段
[@ValidateOK]
#ACT
Set [验证通过] 1 ; 设置一个标记变量
SendMsg 5 验证成功!
CLOSE ; 必须关闭输入框,否则会重弹
BREAK

• 排查死循环:检查脚本中是否有 GOTO 跳转回验证标签的代码,若有需改为延迟跳转 DELAYGOTO 100 @XXX 或删除该逻辑。

2. 关闭或重置地图验证参数

地图参数 VALIDATE 设置过短或逻辑错误会导致反复触发。
- 文件:MirServer\Mir200\Envir\MapInfo.txt
• 操作:搜索 VALIDATE 关键字。若为测试服,建议暂时注释(行首加;)或删除该参数,或修改间隔时间 VALIDATE(60:120:3:1)(60分钟验证一次)。

3. 关闭登录网关的强制验证

部分引擎在登录网关(LoginGate/RunGate)开启了二次验证,与服务端脚本冲突。
- 操作:打开 LoginGate 或 RunGate 窗口 → 选项 → 安全过滤 → 验证码控制。
- 取消勾选:“登录游戏随机验证”、“进入游戏验证”等选项,保存后重启网关。

4. 清理玩家残留标记变量

若某个角色已卡死在循环状态,需清理其存档标记。
- 操作:在 M2Server 的 管理 → 人物数据 → 搜索角色名。
• 重置变量:找到 [ ] 标记变量列表,删除名为“验证”、“Validate”或数字编号的变量,然后踢线重登。

四、特殊引擎处理(GOM/GEE)

• GOM引擎:检查登录器配置器中的“客户端验证码”是否开启,若开启需关闭并重新生成登录器。

- GEE引擎:检查 Geem2\Setup.ini 中的 Validate 参数,改为0关闭地图验证功能。

五、终极方案:重载脚本与数据

修改完脚本后,必须在 M2Server 中重载数据,而非简单重启服务端:
1. M2Server → 控制 → 重新加载 → 重读QF脚本。
2. M2Server → 控制 → 重新加载 → 重读地图配置。
3. 让受影响玩家彻底退出游戏重新登录,以清除客户端的旧验证状态。