双倍经验效果在下线后是否保留,取决于两个层面的设置:引擎全局配置参数和脚本命令中的保存参数。两者必须同时正确配置,效果才能按预期持久化或清除。下面按配置层级、命令参数、引擎差异、脚本变量持久化和常见问题五个层面展开。
一、引擎全局配置参数
引擎全局配置决定了下线时是否将经验倍数写入角色数据库。核心参数位于 `D:\MirServer\Mir200\!Setup.txt`,名称为 `SaveKillMonExpRate`,取值0或1。设为1时,角色下线后经验倍数状态随角色数据一同保存,再次登录时自动恢复;设为0时,下线后倍数状态丢失,重新上线需重新激活。
部分引擎中还存在 `SaveHumExpRate` 参数,同样控制人物经验倍数的下线保存。该参数与 `SaveKillMonExpRate` 的区别在于作用范围:`SaveKillMonExpRate` 主要控制杀怪经验倍数的保存,`SaveHumExpRate` 则偏向人物整体经验倍数的保存。修改 `!Setup.txt` 后需重启服务端引擎,仅重新加载脚本不会使配置变更生效。
二、KILLMONEXPRATE命令的保存参数
脚本中设置双倍经验的核心命令为 `KILLMONEXPRATE`,完整格式为:
```
KILLMONEXPRATE 倍率 有效时间 是否保存剩余时间 是否提示信息
```
倍率参数以整数录入,实际倍数为录入值除以100。200代表2倍经验,150代表1.5倍,300代表3倍。有效时间以秒为单位,录入0或留空表示永久生效,直至服务器重启;录入具体数值则为限时增益,到期后自动恢复基础经验速率。
第三个参数“是否保存剩余时间”是控制下线保存的关键。设为1时,下线后剩余时间保留,再次登录继续倒计时;设为0或留空时,小退或下线后失效,仅在线期间生效。第四个参数“是否提示信息”中,0或留空为给予时弹出提示,1为给予时不提示。
完整示例:
```
KILLMONEXPRATE 200 1800 1 0
```
这行命令表示2倍经验、持续1800秒即30分钟、下线保存剩余时间、激活时弹出提示。适用于双倍经验药物的触发脚本,玩家下线后再次上线,双倍时间继续倒计时,不会重置。
若需下线后效果立即消失,使用:
```
KILLMONEXPRATE 200 1800 0 0
```
第三个参数设为0,小退或下线后倍数归零,再次上线需重新使用道具激活。
三、各引擎的差异与注意事项
GOM引擎完全支持 `KILLMONEXPRATE` 的四参数格式,第三个参数设为1时下线保存剩余时间。GOM引擎的全局配置中 `SaveKillMonExpRate=1` 需同时设置,两者配合才能实现完整的持久化效果。BLUE引擎的 `!Setup.txt` 中同样使用 `SaveKillMonExpRate` 参数,设为0时取消下线保存,设为1时开启保存。
GEE引擎的 `KILLMONEXPRATE` 命令格式与GOM一致,但部分版本中该命令的第三个参数含义可能不同,需查阅对应引擎版本的命令说明文档。GEE引擎还支持通过变量记录时间戳的方式实现更精细的持久化控制。
HERO引擎的情况较为特殊。HERO引擎本身对双倍经验下线保存的支持有限,`!Setup.txt` 中的 `SaveKillMonExpRate` 参数可用,但部分HERO版本的 `KILLMONEXPRATE` 命令不支持第三个保存参数。HERO引擎的双倍经验触发在小退或死亡后可能直接消失,无法通过命令参数保存。若HERO引擎下 `KILLMONEXPRATE` 的保存参数无效,需改用变量记录的方式实现持久化。
四、变量持久化方案
当引擎的 `KILLMONEXPRATE` 保存参数不可用或需要更精细的控制时,使用变量记录时间戳是通用方案。核心思路是:使用带 `HUMAN` 前缀的变量存储激活时间和持续时长,此类变量随角色数据保存,下线不丢失。
物品使用脚本示例:
```
[@UseItem_双倍经验丹]
#IF
CHECKITEM 双倍经验丹 1
#ACT
TAKE 双倍经验丹 1
SetVarHUMANDoubleExpTime %time%+1800
SetHumFlag 100 1
SENDMSG 6 获得30分钟双倍经验,下线不消失
BREAK
```
`SetVarHUMANDoubleExpTime` 将当前时间戳加上1800秒存入角色变量,`SetHumFlag 100 1` 标记双倍状态为激活。变量随角色数据库一同保存,下线后重新登录,变量值依然保留。
经验计算脚本中,在角色获取经验时判断双倍状态是否有效:
```
[@ExpCalc]
#IF
CheckHumFlag 100
#ACT
SetVarHTime %time%-%HumDataDoubleExpTime%
#IF
LARGE %HTime% 0
#ACT
SetExpRate 2
#ELSEACT
ClearHumFlag 100
SENDMSG 6 双倍经验时间已结束
```
这段脚本计算当前时间与记录时间戳的差值,差值大于0表示双倍时间未过期,设置经验倍率为2倍;差值小于等于0则清除双倍标记,恢复基础倍率。
使用全局变量 `G` 系列存储时间也是可行方案。全局变量存放在 `Mir200\GlobalVal.ini` 文件中,服务器未重启时下线后变量保留,时间继续倒数。但全局变量在服务器重启后清空,若需重启也保留,须将数据写入数据库角色扩展字段。
五、常见问题与排查
症状一:设置了 `SaveKillMonExpRate=1`,但下线后双倍经验仍然消失。排查方向:确认脚本中 `KILLMONEXPRATE` 的第三个参数是否也设为1。引擎全局配置和脚本命令参数两者缺一不可,只设置其中一个不会生效。
症状二:使用双倍经验卷轴后经验倍数没有变化。原因通常是双倍经验下线保存已开启,且当前双倍时间仍在有效期内。再次使用卷轴只会延长剩余时间,不会叠加倍率或刷新倍率值。例如当前剩余30分钟双倍,再使用一个60分钟卷轴,剩余时间变为90分钟,倍率仍为2倍。
症状三:HERO引擎下保存参数无效。HERO引擎对 `KILLMONEXPRATE` 保存参数的支持不完整,建议改用 `HUMAN` 前缀变量记录时间戳的方案,绕开命令本身的保存限制。
症状四:服务器重启后双倍时间归零。全局变量方案在服务器重启后数据丢失。若需重启后保留,须将时间数据写入角色数据库的扩展字段,或改用 `HUMAN` 变量方案,因为角色变量随角色数据持久化存储。
修改 `!Setup.txt` 后必须重启服务端引擎,修改脚本文件后需在M2控制器中重新加载脚本或重启服务端。仅保存文件不加载,配置和脚本变更不会执行。
传奇双倍经验下线是否保存的配置参数与脚本控制详解
来源:
作者:
点击:

