异常元宝检测不能只靠单一阈值判断,需要从登录触发筛查、全局定时扫描、变量平衡校验、日志监控四个层面构建检测体系。以下按检测层级逐层拆解脚本编写方案与引擎配置细节。
## 登录触发检测脚本
登录触发是最基础的异常元宝筛查入口,玩家上线时立即判断当前元宝数量,超出预设阈值即执行封禁或警告操作。
在QManage.txt的[@Login]段中添加以下脚本:
```
[@Login]
#IF
CHECKGAMEGOLD > 100000
#ACT
ADDNAMELIST ..\QuestDiary\非法元宝人物.txt
SENDMSG 7 系统:你的帐号元宝数据异常,请联系客服处理
KICK
BREAK
```
CHECKGAMEGOLD为元宝检测命令,比较符支持大于、小于、等于等条件,阈值根据版本经济系统设定。ADDNAMELIST将异常角色写入黑名单文件,后续通过CheckNameList命令判断该角色是否已被标记。KICK命令强制断开连接,适用于元宝数量严重超标的场景。若仅需记录不踢出,将KICK替换为SENDMSG多次发送警告即可。脚本运行前需在QuestDiary目录下新建非法元宝人物.txt空文件,否则ADDNAMELIST命令执行时可能报错。
对于BLUE引擎,检测阈值可设得更高。在QFunction-0.txt中添加:
```
[@检查异常_1]
#IF
CHECKGAMEGOLD > 399999999
#ACT
GAMEGOLD = 0
ADDLINELIST ..\QuestDiary\帐号异常记录.txt 异常人物:<$USERNAME>,<$LEVEL>级,元宝:<$GAMEGOLD>个,机器码:<$HWID>,时间:<$DATETIME>
SENDMSG 6 游戏账号数据异常,请联系客服!
KICK
```
BLUE引擎的GAMEGOLD = 0命令可直接将元宝清零,适合在处理确认的异常账号时使用。ADDLINELIST命令将角色名、等级、元宝数量、机器码和时间戳完整记录到异常日志中,便于后续追溯。
## 全局定时扫描脚本
登录触发只在上线时执行一次,无法捕捉在线期间产生的异常。全局定时扫描通过机器人系统每隔固定时间检测所有在线角色,实现持续监控。
在Mir200\Envir\Robot_def文件夹中配置两个文件。AutoRunRobot.txt添加定时触发指令:
```
#AutoRun NPC SEC 1 @检测
```
SEC 1表示每隔1秒执行一次检测脚本,可根据服务器负载调整间隔,SEC 30或SEC 60均可。
RobotManage.txt添加执行入口:
```
[@检测]
#ACT
Gmexecute 开始提问 @检测检测
```
Gmexecute命令模拟GM执行操作,触发QManage.txt中的检测段。
QManage.txt中添加实际检测逻辑:
```
[@检测检测]
#ACT
DelayCall 1 @元宝
DelayCall 1 @权限
[@元宝]
#IF
CHECKGAMEGOLD > 999999
#ACT
SENDMSG 1 系统提示[%s]你的元宝高于设定上限被禁止登陆,请联系管理解锁
KICK
BREAK
[@权限]
#IF
ISADMIN
#ACT
CHANGEPERMISSION 0
BREAK
```
该脚本同时检测元宝超量和非法GM权限两个维度。元宝阈值根据版本实际经济规模调整,常见设定为100万至999万。权限检测判断角色是否为管理员,若是则自动将权限降为0,防止权限被恶意提升后刷取元宝。M2引擎每秒钟执行一次扫描,对服务器性能的影响可忽略不计。
## 元宝变量平衡校验脚本
元宝只增不减是异常刷取的典型特征。通过在登录时记录元宝快照,结合角色等级、在线时长等数据,判断元宝增速是否异常。
在QManage.txt登录段中写入元宝快照变量:
```
[@Login]
#ACT
MOV N$元宝快照 <$GAMEGOLD>
MOV N$登录时间 <$DATETIME>
SAVEVAR HUMAN 元宝快照 ..\QuestDiary\元宝监控变量.txt
SAVEVAR HUMAN 登录时间 ..\QuestDiary\元宝监控变量.txt
```
在角色离线触发段中比对元宝变化量:
```
[@Logout]
#ACT
LOADVAR HUMAN 元宝快照 ..\QuestDiary\元宝监控变量.txt
SUB N$元宝增量 <$GAMEGOLD> <$STR(N$元宝快照)>
#IF
LARGE N$元宝增量 50000
#ACT
ADDLINELIST ..\QuestDiary\元宝异常增量记录.txt 角色:<$USERNAME>,本次在线元宝增长:<$STR(N$元宝增量)>,当前元宝:<$GAMEGOLD>,时间:<$DATETIME>
SENDMSG 0 系统检测到角色[<$USERNAME>]元宝数据异常,正在核查
```
元宝增量阈值需根据版本回收和充值倍率综合设定,常规版本中单次在线元宝增长超过5万即需记录。该脚本不直接封禁,而是记录后由GM人工审核,避免误封通过合法途径获取大量元宝的玩家。
对于GEE和GOM引擎,元宝变量为`<$GAMEGOLD>`,金币变量为`<$GOLD>`,金刚石变量为`<$GAMEDIAMOND>`。多货币版本需同时监控所有货币类型,任一货币出现异常增量均记录。
## 日志监控与增量告警配置
脚本检测覆盖已知阈值,日志监控则用于事后追溯未知漏洞。GOM引擎的玩家日志存储在`\mirserver\LogDataSrv\LogBase`目录下,每9分钟生成一个文件,记录元宝、装备、等级等所有操作。熟练查询日志可辨别玩家投诉真伪,排查网传版本漏洞。
开启日志系统的操作步骤:打开M2Server引擎控制台,依次点击“查看”、“列表信息”、“游戏管理”,点击“全部添加”并保存。日志系统启动后,所有元宝增减操作均写入日志文件,包括操作时间、角色名、元宝变化量和触发脚本来源。
日志分析中需重点关注以下异常模式:同一角色在短时间内元宝持续增长且无对应充值记录,元宝增长量与角色等级和在线时长严重不匹配,多个角色在同一时间段内出现类似的元宝异常增长。发现此类模式后,打开日志中标注的脚本路径,排查元宝发放逻辑是否存在条件判断缺失或变量未正确回收的问题。
对于BLUE引擎,日志记录命令为:
```
ADDLINELIST .\QuestDiary\帐号异常记录.txt 异常人物:<$USERNAME>,<$LEVEL>级,已充值:<$GAMEPOINT>元,充值点:<$GAMEGIRD>元,游戏点:<$NIMBUS>元,元宝:<$GAMEGOLD>个,金刚石:<$GAMEDIAMOND>颗,机器码:<$HWID>,时间为:<$DATETIME>
```
该命令将角色名、等级、充值元宝、充值点、游戏点、元宝数量、金刚石数量和机器码完整记录,便于综合判断元宝来源是否合法。已充值金额与当前元宝数量严重不匹配的角色需重点核查。
## 封包层异常检测与排错
部分异常元宝来源于封包工具绕过NPC脚本直接调用QF文本中的元宝命令。典型场景是行会招募NPC的公告编辑框被写入元宝代码,配合封包工具发送构造数据包即可触发元宝生成。直接调用QF文本不配合封包工具时无任何反应,因此检测重点应放在QF脚本段的调用条件上。
排查时用脚本变量编辑器的全局搜索功能,在QuestDiary和Market_Def目录下搜索GAMEGOLD+命令。对于每一条GAMEGOLD+命令,确认其上下文是否存在对应的CHECKITEM检测和Take物品扣除命令。若只看到GAMEGOLD+而没有Take命令,则该脚本段存在被重复利用的风险。修复方法是在GAMEGOLD+前添加物品检测和扣除:
```
#IF
CHECKITEM 元宝凭证 1
#ACT
TAKE 元宝凭证 1
GAMEGOLD + 500
```
同时在M2Server控制台的用户过滤字符列表中加入@@InPutString、@@CallInPutString等敏感调用命令,防止玩家通过NPC输入框注入非法指令。
## 引擎命令差异性说明
HERO引擎使用CHECKGAMEGOLD检测元宝,格式为`CHECKGAMEGOLD > 数值`,支持大于、小于、等于、大于等于、小于等于五种比较符。HERO引擎的ISADMIN命令用于判断角色是否为管理员,CHANGEPERMISSION命令可直接调整角色权限等级。需特别注意GMEXECUTE命令,该命令如出现在普通脚本中可被玩家利用来刷元宝,属于高危残留命令,检测时发现后必须删除。
GOM引擎的CHECKGAMEGOLD命令用法与HERO一致,元宝变量为`<$GAMEGOLD>`。GOM引擎还支持日志查询工具,可指定角色名、时间范围、操作类型等条件精确检索元宝变动记录。
BLUE引擎的CHECKGAMEGOLD命令与HERO通用,但BLUE引擎支持GAMEGOLD = 0直接清零操作,HERO引擎无此命令,需通过循环扣除或直接修改数据库实现清零。
GEE引擎的元宝检测命令与GOM基本一致,但GEE引擎的脚本调用机制对封包攻击的防御能力较强,调用脚本时需验证来源指纹,在对应的调用接口上做好指纹判断可有效阻止封包直接调用。
## 变量管理与检测脚本调试
检测脚本中使用的HUMAN变量不会自动保存,每次修改后必须执行SAVEVAR命令写入磁盘文件,否则服务器重启后检测状态丢失。变量文件建议统一存放在QuestDiary目录下,路径格式为`..\QuestDiary\变量文件名.txt`。
多角色同时触发检测时的变量冲突问题需通过私有变量规避。检测脚本中涉及的角色名、元宝数量等临时数据应使用N系列变量或角色私有变量,避免使用G0至G99范围的全局变量,防止与其他脚本发生变量占用冲突。
脚本调试时可在关键检测点添加日志输出命令:
```
WriteLine ..\QuestDiary\检测调试日志.txt [<$DATETIME>] 角色:<$USERNAME> 元宝:<$GAMEGOLD> 触发段:@元宝检测
```
该命令将每次检测的时间、角色名、当前元宝数量和触发的脚本段记录到日志文件,用于验证检测逻辑是否按预期执行。调试完成后可保留该日志用于长期监控。
所有检测脚本文件编码必须为ANSI格式,UTF-8编码会导致中文提示内容和脚本标签在引擎解析时出现乱码。脚本修改保存后需在M2Server控制台执行脚本重载命令或重启服务端,直接保存文件不会即时生效。
## 检测阈值设定与误封规避
元宝检测阈值的设定需要结合版本经济系统的实际规模。参考指标包括:正常玩家单日元宝产出量、充值玩家的单笔充值上限、元宝回收系统的日均消耗量。阈值应设定为正常单日产出量的3至5倍,既不会误封通过活动集中获取元宝的正常玩家,又能及时拦截异常刷取行为。
对于首次触发阈值的角色,建议先执行记录和警告操作而非直接封禁。连续多次触发或元宝增量远超阈值时再执行KICK或清零操作。检测脚本的输出结果需定期人工复核,确认检测逻辑未将正常游戏行为误判为异常。
传奇玩家异常元宝检测脚本编写方案与多引擎命令配置全流程详解
来源:
作者:
点击:

