当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇玩家异常元宝检测脚本编写方案与多引擎命令配置全流程详解

热度:
异常元宝检测不能只靠单一阈值判断,需要从登录触发筛查、全局定时扫描、变量平衡校验、日志监控四个层面构建检测体系。以下按检测层级逐层拆解脚本编写方案与引擎配置细节。

##登录触发检测脚本

登录触发是最基础的异常元宝筛查入口,玩家上线时立即判断当前元宝数量,超出预设阈值即执行封禁或警告操作。

在QManage.txt的[@Login]段中添加以下脚本:

```
[@Login]
#IF
CHECKGAMEGOLD>100000
#ACT
ADDNAMELIST..\QuestDiary\非法元宝人物.txt
SENDMSG7系统:你的帐号元宝数据异常,请联系客服处理
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>
SENDMSG6游戏账号数据异常,请联系客服!
KICK
```

BLUE引擎的GAMEGOLD=0命令可直接将元宝清零,适合在处理确认的异常账号时使用。ADDLINELIST命令将角色名、等级、元宝数量、机器码和时间戳完整记录到异常日志中,便于后续追溯。

##全局定时扫描脚本

登录触发只在上线时执行一次,无法捕捉在线期间产生的异常。全局定时扫描通过机器人系统每隔固定时间检测所有在线角色,实现持续监控。

在Mir200\Envir\Robot_def文件夹中配置两个文件。AutoRunRobot.txt添加定时触发指令:

```
#AutoRunNPCSEC1@检测
```

SEC1表示每隔1秒执行一次检测脚本,可根据服务器负载调整间隔,SEC30或SEC60均可。

RobotManage.txt添加执行入口:

```
[@检测]
#ACT
Gmexecute开始提问@检测检测
```

Gmexecute命令模拟GM执行操作,触发QManage.txt中的检测段。

QManage.txt中添加实际检测逻辑:

```
[@检测检测]
#ACT
DelayCall1@元宝
DelayCall1@权限

[@元宝]
#IF
CHECKGAMEGOLD>999999
#ACT
SENDMSG1系统提示[%s]你的元宝高于设定上限被禁止登陆,请联系管理解锁
KICK
BREAK

[@权限]
#IF
ISADMIN
#ACT
CHANGEPERMISSION0
BREAK
```

该脚本同时检测元宝超量和非法GM权限两个维度。元宝阈值根据版本实际经济规模调整,常见设定为100万至999万。权限检测判断角色是否为管理员,若是则自动将权限降为0,防止权限被恶意提升后刷取元宝。M2引擎每秒钟执行一次扫描,对服务器性能的影响可忽略不计。

##元宝变量平衡校验脚本

元宝只增不减是异常刷取的典型特征。通过在登录时记录元宝快照,结合角色等级、在线时长等数据,判断元宝增速是否异常。

在QManage.txt登录段中写入元宝快照变量:

```
[@Login]
#ACT
MOVN$元宝快照<$GAMEGOLD>
MOVN$登录时间<$DATETIME>
SAVEVARHUMAN元宝快照..\QuestDiary\元宝监控变量.txt
SAVEVARHUMAN登录时间..\QuestDiary\元宝监控变量.txt
```

在角色离线触发段中比对元宝变化量:

```
[@Logout]
#ACT
LOADVARHUMAN元宝快照..\QuestDiary\元宝监控变量.txt
SUBN$元宝增量<$GAMEGOLD><$STR(N$元宝快照)>
#IF
LARGEN$元宝增量50000
#ACT
ADDLINELIST..\QuestDiary\元宝异常增量记录.txt角色:<$USERNAME>本次在线元宝增长:<$STR(N$元宝增量)>当前元宝:<$GAMEGOLD>时间:<$DATETIME>
SENDMSG0系统检测到角色[<$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或清零操作。检测脚本的输出结果需定期人工复核,确认检测逻辑未将正常游戏行为误判为异常。
[顶部]