验证码功能在传奇服务端中分为三个配置层级:登录网关的全局开关、地图级别的参数控制、以及脚本命令的动态触发。三个层级的作用范围不同,开启方式和生效条件也有差异。只配置其中一层通常达不到预期效果,需要根据实际需求组合使用。下面按配置层级从基础到进阶逐项说明。
登录网关的全局验证码开关
全局验证码控制的是玩家登录账号之前的验证环节。开启后,玩家在登录器界面输入账号密码之前,需要先通过一道验证码校验,验证通过才能进入账号登录界面。这个功能适合用于阻止批量注册和自动登录工具。
配置入口在LoginSrv程序的选项菜单中。打开LoginSrv.exe,点击选项进入基本设置页面,在功能设置区域找到开启验证码选项。勾选后可以选择验证码类型。第一种是字母验证码,显示随机字母组合,玩家需要手动输入。第二种是数字计算验证码,显示一道简单的数学题,比如“3+5=?”,玩家输入计算结果。两种类型可以同时勾选,系统会按一定概率随机弹出不同类型。
修改完成后点击保存,不需要重启LoginSrv,设置即时生效。测试方法是退出当前登录器,重新打开,登录界面应该出现验证码输入框。如果勾选了验证码但没有弹出,检查登录器版本是否支持该功能,部分老版本登录器不兼容新版网关的验证码模块。
需要注意的是,这个全局验证码只作用于登录环节,玩家进入游戏后不会再触发。防脱机和防挂机的需求需要通过地图参数或脚本命令来实现。
地图验证码参数VALIDATE的详细用法
VALIDATE参数是传奇引擎中控制地图级验证码的核心配置。这个参数直接写在地图配置文件的对应地图行后面,不需要额外编写脚本。人物进入配置了VALIDATE的地图后,引擎会自动弹出验证码输入窗口,超时未输入或连续输错超过设定次数,角色会被强制踢下线。
参数的完整格式是VALIDATE(M:S:K:L)。M表示验证间隔,单位是分钟。S表示输入验证码的有效时间,单位是秒。K表示允许输入错误的次数上限。L表示进入该地图时是否立即执行一次验证,填1为立即验证,填0为不立即验证,只按M设定的间隔周期触发。
实际配置示例。在地图文件中找到盟重省的配置行,默认格式是`[3 盟重省]`。在行末追加VALIDATE参数:
```
[3 盟重省] VALIDATE(60:120:3:1)
```
这行配置的含义是:玩家进入盟重省地图时立即弹出验证码,之后每60分钟再次弹出。每次弹出后玩家有120秒的时间输入验证码,超时未输入视为验证失败。连续输入错误3次,角色被踢下线。
如果希望玩家进入地图时不立即验证,只按周期触发,把L改为0:
```
[3 盟重省] VALIDATE(60:120:3:0)
```
这种方式适合放在安全区地图。玩家进入安全区后不会被立刻打断,但每隔一段时间会收到一次验证要求,防止安全区内挂机。
验证码验证成功后会执行QFunction脚本中的@ValidateOK段。这个段的用途是在验证通过后给予玩家一些反馈或奖励,比如恢复血量、发送提示消息。需要注意一个细节:人物进入地图的第一次强制验证成功后不执行@ValidateOK段,只有后续的周期性验证成功时才会执行。这个设计是为了避免玩家每次进入地图都被重复触发奖励逻辑。
VALIDATE参数依赖于客户端素材文件。GamePlan.wil和Prguse2.wil中的特定素材编号必须存在且完整。如果验证码窗口弹出后显示空白或乱码,说明客户端补丁中缺少对应的素材文件。从引擎包中提取最新的GamePlan.wil覆盖客户端同名文件即可解决。
脚本命令SHOWGAMEVALIDATEDLG的用法
GOM引擎提供了SHOWGAMEVALIDATEDLG命令,用于在脚本中动态触发验证码窗口。与VALIDATE参数写在地图配置中不同,这个命令写在NPC脚本或功能脚本的#ACT段中,可以在任意时机弹出验证码。
命令格式为SHOWGAMEVALIDATEDLG 模式 自定义验证码。模式参数控制验证码的作用范围:填0表示只对当前玩家弹出,填1表示对当前地图上的所有玩家弹出,填2表示对全服所有在线玩家弹出。自定义验证码参数可以为空,为空时系统自动生成随机验证码。如果填入指定内容,则验证码固定为填入的值,长度不超过6个字符。
脚本示例:
```
[@显示随机验证码]
#ACT
SHOWGAMEVALIDATEDLG 0
[@显示自定义验证码]
#ACT
SHOWGAMEVALIDATEDLG 0 123456
SENDMSG 6 验证码窗口会显示123456
```
SHOWGAMEVALIDATEDLG命令适合用在活动脚本中。比如在行会争霸活动开始前,对参与地图上的所有玩家弹出一次验证码,验证通过的玩家才能继续留在活动地图内。模式参数填1即可实现这个效果。
机器人脚本实现定时验证码
如果需要对全服玩家每隔固定时间执行一次验证码检测,用机器人脚本是最省事的方案。机器人脚本的配置文件位于Mirserver\Mir200\Envir\Robot_def目录下,涉及两个文件:AutoRunRobot.txt定义触发时间和跳转标签,RobotManage.txt定义标签的具体执行内容。
AutoRunRobot.txt中的配置行格式如下:
```
#AutoRun NPC MIN 30 @验证码
```
这行的含义是每30分钟执行一次@验证码这个跳转。MIN后面的数字是分钟间隔,可以按需调整。30表示半小时一次,15表示一刻钟一次。
RobotManage.txt中定义@验证码标签的执行逻辑:
```
[@验证码]
#IF
CheckLevelEx > 0
#ACT
SetRandomNo
#SAY
请输入验证码<$RANDOMNO>进行验证:<输入验证码/@@CheckNo>
[@@CheckNo]
#IF
CheckRandomNo
#ACT
SendMsg 5 验证码输入正确。
Close
#ELSEACT
SendMsg 5 验证码输入错误。
KICK
```
SetRandomNo命令让系统生成一个随机验证码,这个验证码的值通过<$RANDOMNO>变量在对话中显示给玩家。玩家点击输入验证码按钮后,输入的内容会被传递到@@CheckNo段。CheckRandomNo命令检测玩家输入的内容是否与系统生成的随机验证码一致。一致则发送验证成功消息并关闭窗口,不一致则发送错误提示并执行KICK命令把玩家踢下线。
这套脚本适合用在防挂机场景。玩家在线挂机时如果不在电脑前,验证码弹出后无人输入,就会被自动踢下线。对于手动操作的正常玩家,验证码显示在对话窗口中,直接照着输入即可,操作成本很低。
LEG引擎的SetRandomNo和CheckRandomNo命令用法与此相同。3K引擎的机器人脚本命令名称为MOVR用于生成随机数,配合equal命令比较玩家输入值,核心逻辑一致但命令名称不同。
登录器配置器中的验证码选项
HERO引擎的登录器配置器中有一个游戏登录验证码开关。打开HERO登录器配置器,在基本设置页面中找到验证码相关选项。勾选后生成的登录器在启动时会要求玩家先通过验证码校验。
这个功能与LoginSrv中的全局验证码开关是互补关系。两者都开启时,玩家需要先通过登录器验证码再进入账号登录界面,登录时还会再遇到一道网关验证码。如果不希望双重验证,只开启其中一处即可。配置器中的验证码设置需要与LoginSrv中的验证码设置保持一致,如果登录器端开启了验证码而网关端没有对应配置,或者反过来,会出现验证码不显示或验证失败的问题。
验证码不显示的常见排查
配置完成后验证码窗口没有弹出,按以下顺序检查。
第一,确认地图配置文件中的VALIDATE参数写在了正确的行末。参数必须跟在`[地图号 地图名]`的同一行后面,换行写不会生效。检查地图号是否与目标地图匹配,写错地图号参数会作用到错误的地图上。
第二,确认引擎版本支持VALIDATE参数。部分旧版引擎不支持这个参数,加了也不会报错但不会执行验证。在M2Server控制台的选项菜单中查看引擎版本号,对照引擎说明书确认支持情况。
第三,检查客户端补丁中的GamePlan.wil和Prguse2.wil文件是否为最新版本。这两个文件中的素材是验证码窗口的图形资源,素材缺失时窗口可能弹出但显示为空白,玩家看不到验证码内容就无法输入。
第四,机器人脚本的定时触发不生效时,检查AutoRunRobot.txt是否被正确加载。在M2Server控制台的日志窗口中查看机器人脚本的加载记录,确认@验证码标签被正确注册。RobotManage.txt中的标签名必须与AutoRunRobot.txt中跳转的名称完全一致。
第五,LoginSrv中的验证码开关与登录器配置器中的设置如果存在冲突,可能导致验证码环节被跳过。排查时先确认LoginSrv中开启验证码后,用系统自带的测试登录器连接,看验证码是否正常弹出。如果自带登录器正常但玩家用的登录器不弹,问题出在登录器配置上,需要在配置器中重新勾选验证码相关选项并重新生成登录器。
传奇服务端验证码功能开启地图验证参数与脚本配置完整方法
来源:
作者:
点击:

