完美盛大新封号系统在3K引擎和GOM引擎中均有完整实现,本质是一套称号数据库驱动、脚本命令控制、网关配合封禁的组合机制。封号数据存储在独立的FengHaos.DB文件中,脚本通过GIVEFENGHAO系列命令完成称号授予与回收,IP和机器码层面则通过网关安全过滤实现硬封禁。三层的配置相互独立,只做其中一层通常达不到完整的封禁效果。下面按数据库配置、脚本命令、脱机检测封号、网关封禁和排查顺序逐项拆解。
称号数据库FengHaos.DB的字段结构
称号数据库文件FengHaos.DB必须和物品数据库StdItems.DB放在同一目录下,标准路径是服务端Mud2\DB目录。缺少这个文件时,3K引擎启动会直接报错,提示Table does not exist。
数据库中的核心字段包括名称、Need和NeedLevel。Need字段控制称号授予的附加条件类型,取值范围0到3。Need设为0时表示需要等级条件,NeedLevel填入具体等级数值。Need设为1时表示需要攻击力条件,NeedLevel填入攻击力数值。Need设为2时对应魔法条件,Need设为3对应道术条件。如果某个称号不需要任何附加条件,Need和NeedLevel都填0即可。
称号的图标和显示效果由客户端素材控制。在M2Server的选项菜单中进入功能设置,找到其他控制中的称号素材读取设置。素材的排列规则参考客户端ui1.wzl文件,第690到739号图片用于称号显示,每个称号占用5张图片。第一张是角色头顶的外观显示图,第二和第三张是称号界面中的显示图,第四和第五张是称号激活时的特效显示图。如果称号授予后角色头顶不显示名称或显示为空白方块,说明客户端缺少对应的素材文件或者素材编号填写错误。
称号数据库修改完成后,在游戏内使用GM命令@ReloadHumTitleDB重载数据库,不需要重启M2Server。同时需要检查String.ini文件中的HumanShowName字段,确认格式为HumanShowName=%ChrName%GuildName%DearName%MasterName%Comradename%Huhuaname,缺少任何一个变量都会导致称号显示异常。
封号脚本的核心命令与设置方法
GIVEFENGHAO是授予称号的核心命令,格式为GIVEFENGHAO 角色名 称号名 设置人。这条命令通常写在NPC脚本的#ACT段中,玩家与NPC对话选择领取称号后执行。角色名必须和游戏内的实际角色名完全一致,写错一个字命令就不会生效且不产生报错提示。
对于护花使者和主宰龙卫这类需要双方确认的称号,使用GIVEFENGHAOAGREE命令,格式为GIVEFENGHAOAGREE 角色名 类型。类型参数是1到255之间的数字,对应称号数据库中的idx字段值。执行命令后会设置对方的变量<$SETFENGHAOHUM>记录设置人的角色名,同时触发QFunction-0.txt中对应的确认脚本段。
确认脚本段的标签格式为[@FengHaoAgree+类型编号]。例如类型为14时,标签名为[@FengHaoAgree14]。在确认段中执行最终的称号授予,脚本写法如下:
```
[@FengHaoAgree14]
#IF
#ACT
GIVEFENGHAO <$USERNAME> 护花使者 <$SETFENGHAOHUM>
```
<$USERNAME>是确认方的角色名,护花使者是最终授予的称号名,<$SETFENGHAOHUM>是发起设置的一方。三层参数对应关系不能写混,否则称号会授予错误的角色。
发起设置的NPC脚本段需要加入前置条件检测。以护花使者为例,检查发起方是否男性、已有称号数量是否超过上限、对方是否在线:
```
[@InPutString51]
#IF
CHECKFENGHAOCOUNT < 8
.gender man
CHECKFENGHAOLISTCOUNT 0 < 10
#ACT
GIVEFENGHAOAGREE 14
#SAY
请等待对方确认。
#ELSEACT
MESSAGEBOX 条件不满足:需要男性角色,称号未满8个,且护花使者未满10人。
```
CHECKFENGHAOCOUNT检测发起方当前拥有的称号总数,上限为8。CHECKFENGHAOLISTCOUNT检测护花使者或主宰龙卫的数量,第一个参数0代表护花使者,1代表主宰龙卫,上限为10。两个条件必须同时满足才能执行确认流程。
回收称号使用RECYCFENGHAO命令,格式为RECYCFENGHAO 角色名 称号名。称号被回收时会触发QFunction-0.txt中的[@FengHaoFuncX]段,X对应称号数据库中的序号字段。这个触发段可以用于处理称号回收后的变量清理和提示发送。称号对应的物品如果设置了使用不减持久和死亡不爆出属性,回收时不会导致物品异常。
检查类命令有三个。CHECKFENGHAO用于检测玩家是否拥有指定称号,参数只填称号名。CHECKFENGHAOCOUNT检测称号总数,需要填角色名和操作符以及数量值。CHECKFENGHAOLISTCOUNT专门检测护花使者或主宰龙卫数量,第一个参数填类型0或1,后面跟操作符和数量。这三个命令用在#IF段中做条件判断,返回结果决定后续执行哪个分支。
GOM引擎脱机检测与封号处罚脚本
GOM引擎的脱机检测系统通过offlineTools命令触发,配置分两步。第一步在M2Server的列表信息二中找到用户命令设置,添加offlineTools命令。第二步在QFunction-0.txt中添加UserCmd12命令接口,接口内部编写具体的处罚逻辑。
封号处罚的脚本写法使用个人U8变量作为封禁标记。在UserCmd12段中把U8设为1,同时在QManage.txt的登录脚本段中检测U8的值,如果为1则限制角色行动:
```
[@UserCmd12]
#ACT
mov U8 1
SENDMSG 6 系统检测到脱机行为,角色已被封号处理。
[@Login]
#IF
EQUAL U8 1
#ACT
ChangeModeEx 10 999999999
SENDMSG 6 检测到脱机记录,角色已被限制游戏。
```
U8变量的好处是合区后封禁状态依然有效,不会因为合区导致变量重置而解封。ChangeModeEx命令的10代表禁止移动,持续时间999999999秒相当于永久限制。
脱机检测的轻量处罚方案适用于首次违规。在检测到异常时只做降级和扣金币处理,不直接封号:
```
[@UserCmd12]
#ACT
take 金币 10000000
changelevel - 5
sendmsg 6 系统检测到脱机行为,扣除1000万金币并降5级作为警告。
```
升级扣金币的惩罚方式适合初次违规的玩家,给一次改正机会,二次违规再执行永久封禁。
网关层面的IP和机器码封禁
脚本封号只作用于角色或账号层面,玩家重新注册账号就可以绕过。要彻底阻止某个玩家登录,需要在网关层面封禁IP地址或机器码。
引擎有三个网关程序分别处理不同类型的连接。LoginGate是登录网关,玩家输入账号密码时经过这里。SelGate是角色网关,选择角色进入游戏时经过这里。RunGate是游戏网关,角色在游戏中的实时通信经过这里。封禁IP的操作在任意一个网关上执行都可以,推荐在LoginGate上操作,拦截时机最早。
封IP地址的具体操作是打开LoginGate程序,点击选项菜单进入安全设置,在连接限制中设置单个IP的最大连接数,建议值为3到5。在IP过滤列表中添加需要封禁的地址。如果勾选了异常登录检测,网关会自动封禁短时间内反复尝试登录的IP地址。
封机器码的操作在RunGate中进行。打开RunGate,在玩家列表中找到目标玩家,右键可以看到复制机器码的选项。复制后进入选项中的安全过滤设置,把机器码添加到过滤列表中。机器码封禁的效果比IP封禁更彻底,玩家更换网络后机器码不变,依然无法登录。
服务端的BlockIPList.txt和BlockMachineIDList.txt分别存储被封禁的IP和机器码列表。这两个文件位于服务端根目录下,用文本编辑器打开后每行一个条目,手动添加和删除条目即可完成封禁和解封操作,不需要通过网关界面操作。
网关层面的封禁和脚本层面的封号可以组合使用。脚本检测到脱机或作弊行为后,除了执行KICK或BANACCOUNT命令踢人下线,还可以通过脚本把玩家的IP和机器码写入BlockIPList.txt和BlockMachineIDList.txt,实现自动封禁。GOM引擎的脚本中可以使用AddTextListEx命令把<$HWID>变量写入封禁文件,后续该玩家再次尝试登录时网关会直接拒绝连接。
排查与常见问题
称号授予后不显示或显示异常,检查三个位置。客户端补丁中ui1.wzl的690到739号素材是否完整,缺少素材时称号文字会显示为空白或乱码。String.ini中HumanShowName字段的变量格式是否正确,缺少%ChrName或%GuildName会导致对应位置显示为空。FengHaos.DB中的称号名称是否和脚本中GIVEFENGHAO命令填写的名称完全一致,差一个字命令静默失败。
脱机检测不触发或触发过于频繁。不触发时检查M2Server的用户命令列表中是否已经添加了offlineTools命令,QFunction-0.txt中是否存在UserCmd12段。触发过于频繁时降低检测灵敏度,或者把直接封号的处罚改为警告扣金币,给正常玩家留出容错空间。
IP封禁后正常玩家也登不上。检查BlockIPList.txt中是否误封了大范围的IP段。如果服务器使用了CDN或代理,所有玩家的IP在网关看来是同一个地址,封禁这个IP会导致全部玩家无法登录。这种情况下只能改用机器码封禁,机器码是每个玩家独立的,不受网络环境影响。
@ReloadHumTitleDB命令执行后称号数据没有变化。确认FengHaos.DB文件没有被其他程序占用,M2Server运行时数据库文件处于锁定状态时重载操作可能失败。先在M2控制台停止称号数据库的加载,替换文件后再执行重载命令。修改数据库后不要直接覆盖文件,先备份原始文件再替换,避免文件损坏导致称号系统整体异常。
传奇完美盛大新封号系统称号数据库字段脚本命令与网关封禁设置详解
来源:
作者:
点击:

