传奇 “双倍勋章” 需实现佩戴计时、30 分钟自动消失、跨小退大退计时不中断及小退提示功能,核心依赖角色变量存储时间与多脚本联动,以下是完整设置步骤与脚本代码。
一、基础定位:找到设置所需核心文件
限时装备配置涉及装备属性定义、触发脚本、登录加载脚本,所有文件均存于服务端MirServer\Mir200\Envir目录,关键文件及作用如下:
文件名称
存放路径
核心作用
Item.txt
Mir200\Envir\ItemConfig
定义双倍勋章属性(如双倍经验、装备 ID)
LoginQuest.txt
Mir200\Envir\QuestDiary
登录时加载剩余时间,判断是否删除装备
EquipQuest.txt
Mir200\Envir\QuestDiary
佩戴勋章时触发计时,记录开始时间
LogoutQuest.txt
Mir200\Envir\QuestDiary
小退时计算剩余时间并发送提示
UserVar.txt
Mir200\Envir\QuestDiary\变量存储
保存角色 “双倍勋章剩余时间” 变量(需手动创建文件夹)
关键提示:若变量存储文件夹不存在,需在QuestDiary目录下手动创建,确保变量文件能正常读写(文件夹权限设为 “可读写”)。
二、核心步骤:分模块编写脚本与配置
(一)第一步:定义双倍勋章基础属性(Item.txt)
先在装备属性文件中添加双倍勋章,确保佩戴时生效双倍经验,且能被脚本识别。
1. 打开文件:
进入MirServer\Mir200\Envir\ItemConfig,用 Notepad++ 打开Item.txt(若分职业,选择对应职业的ItemWarrior.txt等)。
2. 添加勋章配置:
# 格式:Item=装备名;ID=唯一编号;Type=装备类型;属性1;属性2;...
Item=双倍勋章;ID=2001;Type=Necklace;Level=1;ExpRate=2;Durable=30;Bind=1;
# 说明:
# ID=2001(需在ItemDB.dbf中无重复,用DBC2000确认)
# Type=Necklace(项链类型,可改为Ring/Armor,按佩戴部位定)
# ExpRate=2(双倍经验属性,引擎支持参数)
# Durable=30(计时关联,30分钟对应30点耐久,非必需但可辅助判断)
# Bind=1(绑定,防止交易后计时异常)
3. 确认数据库匹配:
用 DBC2000 打开MirServer\DB\ItemDB.dbf,添加一行新数据:
ID=2001,Name= 双倍勋章,Type= 项链(对应 Type 值),Looks= 自定义外观编号(如 100),确保与Item.txt参数一致。
(二)第二步:佩戴勋章触发计时(EquipQuest.txt)
编写佩戴检测脚本,当角色佩戴双倍勋章时,记录当前时间到变量,启动 30 分钟计时。
1. 打开文件:
进入MirServer\Mir200\Envir\QuestDiary,打开EquipQuest.txt。
2. 添加佩戴触发脚本:
# 检测是否佩戴双倍勋章(ID=2001)
(@EquipCheck)
#IF
CHECKITEM 双倍勋章 1 # 检查背包/装备栏有1个双倍勋章
CHECKVAR HUMAN 双倍勋章剩余时间 <=0 # 确保未启动计时(避免重复触发)
#ACT
# 记录当前时间(单位:秒,需引擎支持TIME函数)
GETTIME CurrentTime # 获取当前时间戳(秒),存到CurrentTime变量
CALCVAR CurrentTime + 1800 # 30分钟=1800秒,计算过期时间
SETVAR HUMAN 双倍勋章剩余时间 %CurrentTime% # 存储过期时间到角色变量
# 保存变量到文件(跨退不丢失)
SAVEVAR HUMAN 双倍勋章剩余时间 ..\QuestDiary\变量存储\双倍勋章变量.txt
SENDMSG 6 双倍勋章已佩戴,30分钟后自动消失,小退不中断计时!
#ELSEIF
CHECKITEM 双倍勋章 1
CHECKVAR HUMAN 双倍勋章剩余时间 >0
#ACT
SENDMSG 6 双倍勋章计时已启动,剩余时间可通过小退查看!
3. 绑定佩戴事件:
在EquipQuest.txt开头添加事件触发:
# 所有装备佩戴时触发检测(不同引擎语法可能为@Equip或@OnEquip)
@OnEquipItem=@EquipCheck
引擎差异提示:HERO 引擎用@OnEquipItem,GOM 引擎可能用@Equip,需参考服务端Doc目录下的QuestCommand.doc确认命令。
(三)第三步:登录加载剩余时间(LoginQuest.txt)
编写登录脚本,小退大退后登录时,读取之前存储的过期时间,计算剩余时间,若已过期则删除勋章。
1. 打开文件:
进入MirServer\Mir200\Envir\QuestDiary,打开LoginQuest.txt。
2. 添加登录加载脚本:
(@LoginLoad)
#IF
CHECKITEM 双倍勋章 1 # 登录时检测是否持有双倍勋章
#ACT
# 加载之前保存的过期时间变量
LOADVAR HUMAN 双倍勋章剩余时间 ..\QuestDiary\变量存储\双倍勋章变量.txt
# 获取当前时间,计算剩余时间
GETTIME NowTime
CALCVAR HUMAN 双倍勋章剩余时间 - %NowTime% # 过期时间-当前时间=剩余秒数
# 判断是否过期
#IF
CHECKVAR HUMAN 双倍勋章剩余时间 <=0
#ACT
REMOVEITEM 双倍勋章 1 # 过期,删除装备
SETVAR HUMAN 双倍勋章剩余时间 0 # 重置变量
SAVEVAR HUMAN 双倍勋章剩余时间 ..\QuestDiary\变量存储\双倍勋章变量.txt
SENDMSG 6 双倍勋章已过期,已自动删除!
#ELSE
#ACT
# 转换剩余秒数为分钟+秒,方便查看
CALCVAR HUMAN 双倍勋章剩余时间 /60 = 剩余分钟
CALCVAR HUMAN 双倍勋章剩余时间 %60 = 剩余秒
SENDMSG 6 双倍勋章剩余时间:%剩余分钟%分%剩余秒%秒,小退可查看!
3. 绑定登录事件:
在LoginQuest.txt中添加:
# 角色登录时自动执行
@Login=@LoginLoad
(四)第四步:小退提示剩余时间(LogoutQuest.txt)
编写小退脚本,角色退出时计算剩余时间并发送提示,确保玩家知晓时效。
1. 打开文件:
进入MirServer\Mir200\Envir\QuestDiary,打开LogoutQuest.txt(无则新建)。
2. 添加小退提示脚本:
(@LogoutTip)
#IF
CHECKITEM 双倍勋章 1
CHECKVAR HUMAN 双倍勋章剩余时间 >0
#ACT
# 计算剩余时间
GETTIME NowTime
CALCVAR HUMAN 双倍勋章剩余时间 - %NowTime% = 剩余总秒
CALCVAR 剩余总秒 /60 = 剩余分钟
CALCVAR 剩余总秒 %60 = 剩余秒
# 发送提示(小退时弹窗或聊天栏提示,不同引擎支持不同)
SENDMSG 6 双倍勋章剩余时间:%剩余分钟%分%剩余秒%秒,下次登录继续计时!
# 保存变量(确保退出时更新)
SAVEVAR HUMAN 双倍勋章剩余时间 ..\QuestDiary\变量存储\双倍勋章变量.txt
#ELSEIF
CHECKITEM 双倍勋章 1
CHECKVAR HUMAN 双倍勋章剩余时间 <=0
#ACT
REMOVEITEM 双倍勋章 1
SENDMSG 6 双倍勋章已过期,退出时自动删除!
3. 绑定小退事件:
在LogoutQuest.txt中添加:
# 角色小退时执行
@Logout=@LogoutTip
三、测试与验证:确保功能正常
(一)分步测试流程
创建勋章测试:
用 GM 命令@give 双倍勋章 1获取勋章,确认背包中显示正常(名称、图标正确)。
佩戴计时测试:
佩戴勋章,查看聊天栏是否提示 “计时已启动”,进入变量存储目录,确认生成双倍勋章变量.txt(内容含变量值)。
跨退测试:
小退角色,重新登录,查看是否提示剩余时间(如 “剩余 29 分 50 秒”),确认勋章未消失。
过期测试:
手动修改双倍勋章变量.txt中 “双倍勋章剩余时间” 为当前时间戳 + 60(1 分钟后过期),登录后等待 1 分钟,检查勋章是否自动删除。
小退提示测试:
佩戴勋章后小退,确认收到剩余时间提示(如 “剩余 28 分 30 秒”)。
(二)常见问题排查
佩戴不触发计时:
检查EquipQuest.txt中事件命令是否正确(如 HERO 引擎是否用@OnEquipItem);
确认Item.txt中勋章 ID(2001)与脚本中CHECKITEM参数一致,无空格或符号错误。
跨退计时丢失:
检查变量存储文件夹是否存在,权限是否为 “可读写”;
确认SAVEVAR和LOADVAR路径正确(如..\QuestDiary\变量存储\,“..” 代表上级目录)。
过期不删除勋章:
检查LoginQuest.txt中CALCVAR计算是否正确(是否用 “过期时间 - 当前时间”);
确认REMOVEITEM命令参数正确(装备名无错别字,数量为 1)。
小退无提示:
检查LogoutQuest.txt是否绑定@Logout事件;
确认SENDMSG命令支持(部分引擎用SENDMSG 7弹窗提示,可尝试修改数字)。
四、进阶优化:适配不同引擎与场景
(一)引擎语法调整
GOM 引擎适配:
变量命令需加HUMAN.前缀,如SETVAR HUMAN.双倍勋章剩余时间 %CurrentTime%;
时间函数用GETSYSTIME,替换GETTIME,脚本示例:
GETSYSTIME NowTime # GOM获取当前时间戳
CALCVAR HUMAN.双倍勋章剩余时间 = %NowTime% + 1800
LEG 引擎适配:
变量存储路径需用绝对路径,如SAVEVAR HUMAN 双倍勋章剩余时间 D:\MirServer\Mir200\Envir\QuestDiary\变量存储\双倍勋章变量.txt。
(二)增加实时提示(可选)
若需游戏内实时显示剩余时间,可在QuestDiary目录新建TimeTip.txt,添加定时脚本:
(@TimeTipLoop)
#IF
CHECKITEM 双倍勋章 1
CHECKVAR HUMAN 双倍勋章剩余时间 >0
#ACT
GETTIME NowTime
CALCVAR HUMAN 双倍勋章剩余时间 - %NowTime% = 剩余总秒
CALCVAR 剩余总秒 /60 = 剩余分钟
CALCVAR 剩余总秒 %60 = 剩余秒
SENDMSG 6 双倍勋章剩余:%剩余分钟%分%剩余秒%秒 # 每60秒提示一次
WAIT 60000 # 等待60秒(60000毫秒)
GOTO @TimeTipLoop # 循环执行
在LoginLoad脚本中添加GOTO @TimeTipLoop,实现实时提示。
五、实操注意事项
变量唯一性:
变量名 “双倍勋章剩余时间” 需唯一,避免与其他脚本变量冲突(可加前缀,如 “SX_双倍勋章剩余时间”)。
时间单位统一:
所有脚本需用同一时间单位(推荐秒),避免混用毫秒(1 秒 = 1000 毫秒)导致计算错误。
文件编码格式:
所有脚本文件需保存为 “ANSI” 编码(Notepad++ 右下角可切换),避免 UTF-8 编码导致中文乱码、脚本解析失败。
备份原始文件:
修改Item.txt、LoginQuest.txt前,复制原始文件到其他目录,若设置出错可直接替换恢复。

