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

来源: 作者: 点击:
全局G变量是传奇服务端中用于记录全服公共数据的核心元素,如首杀状态、活动开关等。由于其数据持久化保存(通常存储在Mir200\GlobalVal.ini或!Setup.txt中),若不定期清理,极易导致变量占用、数据冗余及脚本逻辑错乱。本文将详细解析G变量的自动清除机制与手动维护方案。

一、G变量占用根源与后果

G变量(Global Variable)与临时变量(I变量)不同,其数值在服务器重启后依然保留。常见的占用问题源于:
1. 测试残留:开区前测试脚本时激活了G变量,正式开区后未复位,导致活动无法正常触发。
2. 逻辑闭环缺失:脚本中设置了G101 = 1(如表示首杀已领取),但缺乏自动重置机制,该状态将永久锁定。
3. 文件损坏:频繁修改或异常关机可能导致GlobalVal.ini文件读写错误,引发变量假性占用。

后果表现为:玩家无法领取首杀奖励、活动NPC无响应、地图无法开启等逻辑故障。

二、自动清除方案:机器人脚本与命令

实现G变量自动清除的核心是机器人脚本(Robot.txt)与引擎命令的结合。

1. GOM/GEE引擎(主流方案)

GOM与GEE引擎的G变量保存在Mir200\GlobalVal.ini中。推荐使用AutoRunRobot(自动运行机器人)与RobotManage(机器人管理脚本)配合实现定时清理。

* 配置Robot.txt:在Mir200\Envir\Robot.txt中添加定时任务。
#AutoRun NPC MIN 1 @ClearGlobalVar

此行代码表示每分钟检测一次@ClearGlobalVar标签。

• 编写清理脚本:在Mir200\Envir\RobotManage.txt中处理逻辑。
[@ClearGlobalVar]
#IF
HOUR 06 00 ; 设定凌晨6点为清理时间
#ACT
ClearVar G101 199 ; 清理G101至G199的变量(GOB/部分GEE支持)
; 或使用传统MOV循环(通用)
MOV G101 0
MOV G102 0
...
MOV G199 0
SENDMSG 0 “全局G变量已自动重置”
BREAK

注意:部分GEE引擎需使用CLEARVARG命令,具体需查看引擎说明书。

2. GOB引擎(新式命令)

GOB引擎提供了更高效的批量清理命令ClearVar,可直接在NPC或机器人脚本中使用。
[@清理变量]
#ACT
ClearVar G0 99 ; 清理G0到G99的所有变量
SENDMSG 5 “G0-G99变量已清空”

此命令比传统的MOV循环更高效,能显著降低脚本负载。

3. HERO/BLUE引擎(老版方案)

老版引擎(如HERO)的G变量通常保存在!Setup.txt中。自动清除需依赖Robot.txt的MIN事件。
; Robot.txt 配置
#AutoRun NPC MIN 1 @CheckReset

; RobotManage.txt 脚本
[@CheckReset]
#IF
EQUAL G999 1 ; 用G999作为重置标志,由管理员控制
#ACT
CALL [\系统功能\清理变量.txt] @清理G变量
MOV G999 0
BREAK

然后在清理变量.txt中使用MOV命令逐一复位需清理的G变量。

三、手动维护与防占用策略

当自动脚本失效或需紧急处理时,可采用以下手动方案。

1. M2管理器直接清理(最快捷)

• GOM/GEE引擎:打开M2Server → 【管理】→【文件管理】→【清除全局G变量】。此处可勾选清除全部或指定范围。

* HERO引擎:M2 → 【管理】→【文件管理】→【打扫G变量】。

此方法会立即生效,无需重启服务器,但可能误清仍需保留的数据。

2. 文件级重置(彻底方案)

若M2界面无法操作或变量文件损坏,可直接操作配置文件:
1. 停止服务端。
2. 备份Mir200\GlobalVal.ini(GOM/GEE)或!Setup.txt(HERO)。
3. 用文本编辑器打开文件,删除所有GlobalVal开头的行(G变量)和GlobalStrVal开头的行(A变量)。
4. 保存后启动服务端,G变量将全部归零。

3. 脚本设计最佳实践(预防占用)

* 使用I变量替代:对于无需持久化的状态(如每日签到),优先使用I变量(服务器重启自动清零)。
* 设计重置逻辑:在活动脚本开头加入时间检测,若日期变更(如CHECKTEXTLIST ..\QuestDiary\系统数据\日期.txt <$DATETIME>),则自动执行MOV G变量 0。
• 变量分区管理:G0-G49用于日常活动(每日重置),G50-G99用于永久数据(慎用),避免交叉污染。

四、常见问题排查

• 清理后恢复:检查RobotManage.txt中是否有其他脚本在每分钟触发赋值(如#AutoRun NPC MIN 1 @GiveReward中误写了MOV G101 1)。

• 权限不足:手动清理需确保M2以管理员身份运行,否则可能无法写入GlobalVal.ini。

• 合区处理:合区时务必使用合区工具同步或重置G变量,否则两区变量冲突将导致严重BUG。

通过上述机器人脚本定时任务与M2管理相结合,可有效解决G变量的自动清除与占用问题,确保版本长期稳定运行。