一、基础数据库配置(核心前提)
限时属性定义
打开服务端目录下Envri\UserData\LimitItem.txt文件,添加限时规则:
Need=101
NeedLevel=30
其中Need=101代表该物品为限时装备,NeedLevel=30设定持续时间为 30 分钟。
勋章属性配置
用无极数据库工具打开StdItems.DB,找到双倍勋章条目,修改以下字段:
「Need」设为 101,关联限时规则;
「NeedLevel」设为 30,匹配计时时长;
「Anicount」填入计时器编号(如 888),用于绑定检测脚本;
「Reserved」填写提示模板:"双倍勋章剩余:%d分钟",控制小退界面显示内容;
「Source」设置到期提示:"双倍勋章已到期并销毁"。
物品规则限制
在数据库「属性扩展」中勾选 “不可取下”“不可交易”“不可修理”,避免计时期间装备转移或取下导致计时失效。
二、核心脚本编写(实现计时与提示)
(一)佩戴触发脚本(启动计时)
在QFunction-0.txt文件添加佩戴检测逻辑:
(@佩戴双倍勋章)
#IF
CHECKITEMW 双倍勋章 1 ;检测是否佩戴勋章
#ACT
SET 计时开始 %DATE ;记录佩戴时间(秒级时间戳)
TIMERCLOSE @勋章计时检测 ;关闭旧计时器防止冲突
TIMERCALL 60 @勋章计时检测 ;启动每分钟检测
SAVEVAR 计时开始 ..\QuestDiary\玩家数据\<$USERNAME>.txt ;保存时间到本地文件
SENDMSG 6 "双倍勋章已激活,开始30分钟倒计时"
(二)定时检测脚本(更新时间与销毁)
继续在QFunction-0.txt添加检测逻辑:
(@勋章计时检测)
#IF
CHECKITEMW 双倍勋章 1 ;确认装备仍在身上
#ACT
;计算剩余时间(总时长30分钟=1800秒)
CALCVARINTEGER 剩余时间 = 1800 - ((%DATE - <$VAR(计时开始)>) / 1)
;更新小退界面提示
SETTEXTLINE2 "双倍勋章剩余:<$STR(剩余时间)/60>分钟"
;时间耗尽处理
IFEQUAL 剩余时间 0
TAKE 双倍勋章 1 ;移除勋章
SENDMSG 6 <$VAR(Source)> ;触发到期提示
TIMERCLOSE @勋章计时检测 ;关闭计时器
SAVEVAR 计时开始 0 ..\QuestDiary\玩家数据\<$USERNAME>.txt ;重置时间变量
(三)登录加载脚本(保留离线计时)
在Login.txt添加重登恢复逻辑:
(@登录加载)
#IF
CHECKVAR 计时开始 > 0 ;检测是否有未完成的计时
CHECKITEMW 双倍勋章 1 ;确认勋章仍在
#ACT
;计算离线后剩余时间
CALCVARINTEGER 剩余时间 = 1800 - ((%DATE - <$VAR(计时开始)>) / 1)
;剩余时间为负则直接销毁
IFGREATER 0 剩余时间
TAKE 双倍勋章 1
SENDMSG 6 "离线期间双倍勋章已到期"
SET 计时开始 0
ELSE
;恢复计时器
TIMERCALL 60 @勋章计时检测
SETTEXTLINE2 "双倍勋章剩余:<$STR(剩余时间)/60>分钟"
SENDMSG 6 "双倍勋章剩余时间:<$STR(剩余时间)/60>分钟"
ENDIF
SAVEVAR 计时开始 ..\QuestDiary\玩家数据\<$USERNAME>.txt
三、测试与验证步骤
重启服务端,佩戴双倍勋章,确认收到激活提示;
小退游戏,查看登录界面第二行是否显示剩余时间;
等待 30 分钟,检查装备是否自动消失并触发提示;
测试中途大退,重登后确认剩余时间是否准确延续。
四、关键注意事项
确保..\QuestDiary\玩家数据\目录有写入权限,避免时间变量无法保存;
若使用 GEE 引擎,将TIMERCALL替换为TIMER,变量存储路径改为Data\UserVar\<$USERNAME>.ini;
检查变量计时开始是否与现有脚本冲突,可替换为勋章计时_开始等独特名称。
限时属性定义
打开服务端目录下Envri\UserData\LimitItem.txt文件,添加限时规则:
Need=101
NeedLevel=30
其中Need=101代表该物品为限时装备,NeedLevel=30设定持续时间为 30 分钟。
勋章属性配置
用无极数据库工具打开StdItems.DB,找到双倍勋章条目,修改以下字段:
「Need」设为 101,关联限时规则;
「NeedLevel」设为 30,匹配计时时长;
「Anicount」填入计时器编号(如 888),用于绑定检测脚本;
「Reserved」填写提示模板:"双倍勋章剩余:%d分钟",控制小退界面显示内容;
「Source」设置到期提示:"双倍勋章已到期并销毁"。
物品规则限制
在数据库「属性扩展」中勾选 “不可取下”“不可交易”“不可修理”,避免计时期间装备转移或取下导致计时失效。
二、核心脚本编写(实现计时与提示)
(一)佩戴触发脚本(启动计时)
在QFunction-0.txt文件添加佩戴检测逻辑:
(@佩戴双倍勋章)
#IF
CHECKITEMW 双倍勋章 1 ;检测是否佩戴勋章
#ACT
SET 计时开始 %DATE ;记录佩戴时间(秒级时间戳)
TIMERCLOSE @勋章计时检测 ;关闭旧计时器防止冲突
TIMERCALL 60 @勋章计时检测 ;启动每分钟检测
SAVEVAR 计时开始 ..\QuestDiary\玩家数据\<$USERNAME>.txt ;保存时间到本地文件
SENDMSG 6 "双倍勋章已激活,开始30分钟倒计时"
(二)定时检测脚本(更新时间与销毁)
继续在QFunction-0.txt添加检测逻辑:
(@勋章计时检测)
#IF
CHECKITEMW 双倍勋章 1 ;确认装备仍在身上
#ACT
;计算剩余时间(总时长30分钟=1800秒)
CALCVARINTEGER 剩余时间 = 1800 - ((%DATE - <$VAR(计时开始)>) / 1)
;更新小退界面提示
SETTEXTLINE2 "双倍勋章剩余:<$STR(剩余时间)/60>分钟"
;时间耗尽处理
IFEQUAL 剩余时间 0
TAKE 双倍勋章 1 ;移除勋章
SENDMSG 6 <$VAR(Source)> ;触发到期提示
TIMERCLOSE @勋章计时检测 ;关闭计时器
SAVEVAR 计时开始 0 ..\QuestDiary\玩家数据\<$USERNAME>.txt ;重置时间变量
(三)登录加载脚本(保留离线计时)
在Login.txt添加重登恢复逻辑:
(@登录加载)
#IF
CHECKVAR 计时开始 > 0 ;检测是否有未完成的计时
CHECKITEMW 双倍勋章 1 ;确认勋章仍在
#ACT
;计算离线后剩余时间
CALCVARINTEGER 剩余时间 = 1800 - ((%DATE - <$VAR(计时开始)>) / 1)
;剩余时间为负则直接销毁
IFGREATER 0 剩余时间
TAKE 双倍勋章 1
SENDMSG 6 "离线期间双倍勋章已到期"
SET 计时开始 0
ELSE
;恢复计时器
TIMERCALL 60 @勋章计时检测
SETTEXTLINE2 "双倍勋章剩余:<$STR(剩余时间)/60>分钟"
SENDMSG 6 "双倍勋章剩余时间:<$STR(剩余时间)/60>分钟"
ENDIF
SAVEVAR 计时开始 ..\QuestDiary\玩家数据\<$USERNAME>.txt
三、测试与验证步骤
重启服务端,佩戴双倍勋章,确认收到激活提示;
小退游戏,查看登录界面第二行是否显示剩余时间;
等待 30 分钟,检查装备是否自动消失并触发提示;
测试中途大退,重登后确认剩余时间是否准确延续。
四、关键注意事项
确保..\QuestDiary\玩家数据\目录有写入权限,避免时间变量无法保存;
若使用 GEE 引擎,将TIMERCALL替换为TIMER,变量存储路径改为Data\UserVar\<$USERNAME>.ini;
检查变量计时开始是否与现有脚本冲突,可替换为勋章计时_开始等独特名称。

