传奇全局G变量自动清理与脚本防占用方案

来源: 作者: 点击:
一、G变量特性与清理必要性

G变量(Global)是全局数字型变量,全服唯一且跨NPC传递。其数据保存在 Mir200\GlobalVal.ini 中,服务器重启后数值依然保留。若长期不清理,会导致变量耗尽(G0-G999被占满)或逻辑残留,引发活动无法开启、怪物不刷新等故障。

二、方案一:机器人脚本定时自动清理(推荐)

利用 Mir200\Envir\Robot.txt 的定时任务实现“全自动清理”,无需人工干预。

1. 配置机器人触发频率
在 Robot.txt 中添加以下行(时间单位为分钟):

#AutoRun NPC MIN 1 @ClearGlobalVar

此行表示每分钟检测一次,触发 @ClearGlobalVar 脚本段。

2. 编写清理脚本
在 QFunction-0.txt(或专用机器人脚本文件)中添加:

[@ClearGlobalVar]
; 检测是否为每日凌晨5点(服务器时间)
#IF
HOUR 05
MIN 00
; 执行清理
#ACT
; 方法A:使用ClearVar命令(GOM/GEE新引擎)
ClearVar G0 100
; 方法B:传统MOV循环归零(通用)
MOV G0 0
MOV G1 0
; ... 按需添加更多
MOV G99 0
; 记录日志
SENDMSG 0 “【系统】全局G变量已自动重置”
BREAK

此脚本会在每天5:00自动将 G0-G99 归零,防止活动数据堆积。

三、方案二:引擎管理后台手动清理

对于临时调试或非定时需求,可直接在M2Server界面操作。

操作路径:
1. 打开 M2Server → 【管理】→ 【文件管理】。
2. 点击【清除全局G变量】或【清除全局A变量】。
3. 勾选需要清理的变量范围,点击确认。

注意:此操作会立即生效并清空 GlobalVal.ini 文件,可能导致正在进行的全服活动中断,建议在维护时使用。

四、方案三:新版引擎ClearVar命令详解

GOM/GEE等新引擎支持 ClearVar 命令,可批量快速清理。

命令格式:

#ACT
ClearVar 变量前缀 起始编号 清理数量


实战示例:
• 清理 G50-G100:ClearVar G 50 50

• 清理 A变量(全局字符):ClearVar A 0 50

- 清理 S变量(私人字符):ClearVar S 0 10

此命令比传统MOV循环效率更高,适合在活动结束脚本中直接调用。

五、防占用设计:活动结束自动复位

为避免G变量被永久占用,应在活动脚本中植入“结束即清理”的逻辑。

标准模板:

[@夺宝活动结束]
#ACT
; 1. 发放奖励
GIVE 金币 1000000
; 2. 立即复位活动变量(G5为活动状态标记)
MOV G5 0
ClearVar G 10 10
SENDMSG 0 “夺宝活动结束,相关变量已释放”
BREAK


六、常见问题与变量选择建议

• G变量上限:通常为 G0-G999,若版本修改过引擎,上限可能扩展至G4999,需根据 !Setup.txt 配置判断。

- 清理失效:检查 Robot.txt 的分钟设置是否过短(建议≥1分钟),或HOUR时间判断是否写错。
- 替代方案:对于无需持久化的临时数据(如在线人数统计),优先使用 I变量(Integer),服务器重启自动清零,无需手动清理。

关键原则:G变量用于需存档的关键状态(如全服首杀),I变量用于临时计数,混合使用可有效减少清理负担。