##G变量的本质与存储位置
G变量是传奇服务端里的**全局整数型变量**,它的特点是全服务器唯一,不属于任何玩家,所有玩家都可以读写这个变量,而且修改后会影响到整个服务器的逻辑。
G变量的值保存在`Mir200/GlobalVal.ini`文件里。服务器关闭或重启后,G变量的值不会自动清空,而是继续保留在这个文件里。这就是为什么你开新区或者重启服务器后,G变量还带着上次的值——它被写在硬盘上了,引擎启动时会重新读进去。
##G变量为什么需要清理
G变量用在很多地方:记录全服活动状态、记录当天攻沙次数、记录世界BOSS是否被击杀、记录某个开关是否打开等等。如果不清理,会出现这些问题:
-**开新区时**:上一区的活动数据还在,新区的玩家可能领不到奖励,或者活动无法正常开启。
-**脚本逻辑错乱**:比如某个活动脚本依赖G10变量判断是否开启,如果G10一直等于1,活动就永远关不掉。
-**变量用尽**:G0-G999总共1000个,如果长期不清理,后面脚本想用新变量都没地方用。
##自动清除G变量的实现方法
###方法一:使用ClearVar脚本命令(GOB引擎)
如果你的引擎是GOB引擎,可以用专门的变量清理命令,这是最彻底的自动清除方式。
在需要清理的脚本位置(比如开区触发、每日凌晨重置)添加以下代码:
```text
[@清理所有G变量]
#IF
#ACT
ClearVarG099
SENDMSG5全局G变量G0-G99已全部清空!
break
```
`ClearVarG099`的意思是从G0开始,连续清理100个变量(G0到G99)。如果你想清理G0到G999,就把99改成999。
这个命令放在哪里生效:
-放在`QManage.txt`的`[@Startup]`段里,服务器每次启动时自动执行
-放在机器人脚本里,每天凌晨4点自动执行
-放在开区触发脚本里,新区开服时执行
###方法二:通过MOV命令逐个清零
如果你的引擎不支持ClearVar,只能用最原始的办法——MOV命令把每个G变量赋值为0。
```text
[@清理G变量]
#IF
#ACT
MOVG00
MOVG10
MOVG20
;一直写到G999
SENDMSG5全局G变量清理完成!
```
这种方法笨但通用,所有引擎都认。缺点是你得写1000行代码,而且执行效率低。可以只清理你脚本里实际用到的G变量,不用全清。
###方法三:机器人脚本定时自动清理
在`Mir200\Envir\Robot_def\`里设置机器人,让服务器每天固定时间自动清理G变量。
**第一步**:在`Robot.txt`里定义机器人
```
;Robot.txt
清理变量Robot清理变量0001***
```
这表示每天凌晨1点执行"清理变量"这个脚本。
**第二步**:在`Robot_def\清理变量.txt`里写执行脚本
```text
[@清理变量]
#IF
#ACT
MOVG00
MOVG10
;......这里写上你要清理的G变量
SENDMSG0系统提示:全服G变量已重置!
```
###方法四:利用M2内置功能手动触发
如果你不想写脚本,或者只在开新区时手动清一次,可以直接用M2控制台。
**GOM/GEE引擎操作路径**:
1.打开M2Server.exe
2.点击菜单栏的**查看**→**内核数据**
3.找到**清除变量G**按钮,点击即可清除所有G变量
**HERO引擎操作路径**:
1.打开M2Server.exe
2.点击**管理**→**文件管理**
3.点击**清除全局G,A变量**
这种方法适合开区前手动操作,不适合自动运行。
##不同引擎的自动清除方案对比
|引擎类型|自动清除命令|手动清除位置|保存文件|
|----------|--------------|--------------|----------|
|GOM/GEE|无专用ClearVar,需用MOV|M2→查看→内核数据|GlobalVal.ini|
|GOB引擎|ClearVarG0999|M2控制台|GlobalVal.ini|
|HERO引擎|无专用命令|M2→管理→文件管理|未知|
|3K引擎|控制器自带清理工具|GameCenter→清理数据|未知|
##脚本中自动清除的触发时机
根据你的需求选择把清除脚本放在哪里:
**服务器每次启动时自动清除**:
在`QManage.txt`的`[@Startup]`段里添加清理代码。这样每次重启M2,G变量都会归零。
```text
[@Startup]
#IF
#ACT
ClearVarG099;支持的话
;或者
MOVG00
MOVG10
;...
```
**每天固定时间自动清除**:
用上面的机器人脚本方法,设置每天凌晨执行。
**每个玩家登录时触发清除**(不推荐):
G变量是全局的,一个玩家登录时清掉会影响所有玩家,不要这样做。
**开新区前手动清除**:
用M2控制台的内核数据清理功能,最快最省事。
##清理G变量前的注意事项
**备份GlobalVal.ini**:
G变量文件在`Mir200\GlobalVal.ini`。清理前最好备份一份,万一清错了还能恢复。
**确认哪些变量在用**:
如果不知道G0-G999哪些被用了,可以先导出一份清理前的值,或者用文本搜索功能在脚本文件夹里搜`G`开头的变量,看看哪些真的在用。
**区分G变量和A变量**:
G是整数型,A是字符型。清除G变量不影响A变量,如果需要清A变量,用同样的方法处理A0-A999。
**重启M2生效**:
不管是手动清还是脚本清,清理后最好重启M2,或者重新加载变量文件,确保内存里的值和硬盘上的文件同步。
##完整示例:开区全自动清理脚本
把下面这段代码放进你的开区触发脚本里,新区开服时所有G变量自动归零:
```text
[@Startup]
#IF
#ACT
ClearVarG0999;清G0-G999
SENDMSG0服务器启动完成,所有全局G变量已重置!
#ELSEACT
MOVG00;如果不支持ClearVar,手动清
MOVG10
MOVG20
MOVG30
;......一直写到G999
SENDMSG0服务器启动完成,所有全局G变量已重置!
```
保存后重启M2,进游戏用GM命令查看G变量值,确认已经归零。
G变量是传奇服务端里的**全局整数型变量**,它的特点是全服务器唯一,不属于任何玩家,所有玩家都可以读写这个变量,而且修改后会影响到整个服务器的逻辑。
G变量的值保存在`Mir200/GlobalVal.ini`文件里。服务器关闭或重启后,G变量的值不会自动清空,而是继续保留在这个文件里。这就是为什么你开新区或者重启服务器后,G变量还带着上次的值——它被写在硬盘上了,引擎启动时会重新读进去。
##G变量为什么需要清理
G变量用在很多地方:记录全服活动状态、记录当天攻沙次数、记录世界BOSS是否被击杀、记录某个开关是否打开等等。如果不清理,会出现这些问题:
-**开新区时**:上一区的活动数据还在,新区的玩家可能领不到奖励,或者活动无法正常开启。
-**脚本逻辑错乱**:比如某个活动脚本依赖G10变量判断是否开启,如果G10一直等于1,活动就永远关不掉。
-**变量用尽**:G0-G999总共1000个,如果长期不清理,后面脚本想用新变量都没地方用。
##自动清除G变量的实现方法
###方法一:使用ClearVar脚本命令(GOB引擎)
如果你的引擎是GOB引擎,可以用专门的变量清理命令,这是最彻底的自动清除方式。
在需要清理的脚本位置(比如开区触发、每日凌晨重置)添加以下代码:
```text
[@清理所有G变量]
#IF
#ACT
ClearVarG099
SENDMSG5全局G变量G0-G99已全部清空!
break
```
`ClearVarG099`的意思是从G0开始,连续清理100个变量(G0到G99)。如果你想清理G0到G999,就把99改成999。
这个命令放在哪里生效:
-放在`QManage.txt`的`[@Startup]`段里,服务器每次启动时自动执行
-放在机器人脚本里,每天凌晨4点自动执行
-放在开区触发脚本里,新区开服时执行
###方法二:通过MOV命令逐个清零
如果你的引擎不支持ClearVar,只能用最原始的办法——MOV命令把每个G变量赋值为0。
```text
[@清理G变量]
#IF
#ACT
MOVG00
MOVG10
MOVG20
;一直写到G999
SENDMSG5全局G变量清理完成!
```
这种方法笨但通用,所有引擎都认。缺点是你得写1000行代码,而且执行效率低。可以只清理你脚本里实际用到的G变量,不用全清。
###方法三:机器人脚本定时自动清理
在`Mir200\Envir\Robot_def\`里设置机器人,让服务器每天固定时间自动清理G变量。
**第一步**:在`Robot.txt`里定义机器人
```
;Robot.txt
清理变量Robot清理变量0001***
```
这表示每天凌晨1点执行"清理变量"这个脚本。
**第二步**:在`Robot_def\清理变量.txt`里写执行脚本
```text
[@清理变量]
#IF
#ACT
MOVG00
MOVG10
;......这里写上你要清理的G变量
SENDMSG0系统提示:全服G变量已重置!
```
###方法四:利用M2内置功能手动触发
如果你不想写脚本,或者只在开新区时手动清一次,可以直接用M2控制台。
**GOM/GEE引擎操作路径**:
1.打开M2Server.exe
2.点击菜单栏的**查看**→**内核数据**
3.找到**清除变量G**按钮,点击即可清除所有G变量
**HERO引擎操作路径**:
1.打开M2Server.exe
2.点击**管理**→**文件管理**
3.点击**清除全局G,A变量**
这种方法适合开区前手动操作,不适合自动运行。
##不同引擎的自动清除方案对比
|引擎类型|自动清除命令|手动清除位置|保存文件|
|----------|--------------|--------------|----------|
|GOM/GEE|无专用ClearVar,需用MOV|M2→查看→内核数据|GlobalVal.ini|
|GOB引擎|ClearVarG0999|M2控制台|GlobalVal.ini|
|HERO引擎|无专用命令|M2→管理→文件管理|未知|
|3K引擎|控制器自带清理工具|GameCenter→清理数据|未知|
##脚本中自动清除的触发时机
根据你的需求选择把清除脚本放在哪里:
**服务器每次启动时自动清除**:
在`QManage.txt`的`[@Startup]`段里添加清理代码。这样每次重启M2,G变量都会归零。
```text
[@Startup]
#IF
#ACT
ClearVarG099;支持的话
;或者
MOVG00
MOVG10
;...
```
**每天固定时间自动清除**:
用上面的机器人脚本方法,设置每天凌晨执行。
**每个玩家登录时触发清除**(不推荐):
G变量是全局的,一个玩家登录时清掉会影响所有玩家,不要这样做。
**开新区前手动清除**:
用M2控制台的内核数据清理功能,最快最省事。
##清理G变量前的注意事项
**备份GlobalVal.ini**:
G变量文件在`Mir200\GlobalVal.ini`。清理前最好备份一份,万一清错了还能恢复。
**确认哪些变量在用**:
如果不知道G0-G999哪些被用了,可以先导出一份清理前的值,或者用文本搜索功能在脚本文件夹里搜`G`开头的变量,看看哪些真的在用。
**区分G变量和A变量**:
G是整数型,A是字符型。清除G变量不影响A变量,如果需要清A变量,用同样的方法处理A0-A999。
**重启M2生效**:
不管是手动清还是脚本清,清理后最好重启M2,或者重新加载变量文件,确保内存里的值和硬盘上的文件同步。
##完整示例:开区全自动清理脚本
把下面这段代码放进你的开区触发脚本里,新区开服时所有G变量自动归零:
```text
[@Startup]
#IF
#ACT
ClearVarG0999;清G0-G999
SENDMSG0服务器启动完成,所有全局G变量已重置!
#ELSEACT
MOVG00;如果不支持ClearVar,手动清
MOVG10
MOVG20
MOVG30
;......一直写到G999
SENDMSG0服务器启动完成,所有全局G变量已重置!
```
保存后重启M2,进游戏用GM命令查看G变量值,确认已经归零。

