传奇双倍勋章30分钟限时脚本:佩戴计时与小退提示

来源: 作者: 点击:
方案一:GOM/GEE引擎内置限时功能(推荐)

若使用GOM或GEE引擎,无需复杂脚本,直接利用引擎内置的Need字段实现。此方案最稳定,自动支持小退大退续时。

数据库设置

在服务端数据库(如HeroDB)中找到你的双倍勋章装备,修改以下字段:
- Need:设置为 101(代表限时物品)。
• NeedLevel:设置为 30(代表30分钟)。

- Source:建议设为 1。

保存后重启M2。玩家佩戴后自动倒计时,时间到自动消失,小退再上时间不重置。

小退提示脚本

在 QFunction-0.txt 中添加以下脚本,实现小退上线时的剩余时间弹窗:

[@Login]
#IF
CHECKUSEITEM 2 = 双倍勋章 ; 2是勋章位置编号
#ACT
GetItemRemainingTime 2 N1 ; 获取剩余时间存入N1
#IF
LARGE N1 0
#ACT
CALCVAR N2 = <$STR(N1)> / 60 ; 换算为分钟
SENDMSG 6 你的双倍勋章剩余时间:<$STR(N2)>分钟
BREAK


方案二:HERO引擎脚本计时方案

若引擎不支持GetItemRemainingTime命令,需手动编写计时逻辑,利用Unix时间戳记录结束时间。

数据库与穿戴触发

1. 数据库设置:勋章装备的 StdMode 设为勋章代码(如18),Shape 设为2(双倍经验属性需配合脚本)。
2. 穿戴触发:在 QFunction-0.txt 中写入:

[@TakeOn2] ; 2是勋章位置
#IF
CHECKITEMNAME 双倍勋章
#ACT
; 如果未记录过结束时间,则设置(当前时间+1800秒)
#IF
EQUAL G10 0
#ACT
MOV G10 <$UNIXTIME>
CALCVAR G10 + 1800
; 开启每秒检测的定时器
SetOnTimer 1 1
SENDMSG 6 双倍勋章已激活,剩余30分钟。
BREAK


定时检测与消失

在 QManage.txt 或 QFunction-0.txt 中继续写入定时器执行逻辑:

[@OnTimer1]
#IF
CHECKUSEITEM 2 = 双倍勋章
#ACT
; 计算剩余时间
CALCVAR N1 = <$STR(G10)> - <$UNIXTIME>
; 如果时间到
#IF
SMALL N1 1
#ACT
TakeOffItem 2
SENDMSG 6 双倍勋章时间已到,自动消失。
SetOffTimer 1
BREAK
; 正常倒计时
#IF
LARGE N1 0
#ACT
CALCVAR N2 = <$STR(N1)> / 60
SENDMSG 6 双倍勋章剩余:<$STR(N2)>分钟
BREAK


小退上线读取时间

在 QManage.txt 的 [@Login] 段加入检测,确保小退后定时器继续工作:

[@Login]
#IF
CHECKUSEITEM 2 = 双倍勋章
#ACT
; 检测G10是否已超时
#IF
LARGE G10 <$UNIXTIME>
#ACT
SetOnTimer 1 1
SENDMSG 6 双倍勋章计时继续。
#ELSEACT
TakeOffItem 2
SENDMSG 6 勋章已过期。
BREAK


关键参数与位置代码

• 装备位置:衣服(0)、武器(1)、勋章(2)、项链(3)、头盔(4)。脚本中的 TakeOn2 和 CheckUseItem 2 即针对勋章位。

- 时间存储:方案二使用 G变量(如G10)存储结束时间戳,因为G变量支持跨地图保存,小退不丢失。避免使用临时变量P或M。
- 双倍属性:真正的双倍经验通常需配合 CHANGEEXP + 命令或引擎M2的“双倍经验勋章”基础设置,脚本仅负责计时和消失逻辑。

常见报错与排查

1. 计时不准确:检查 !Setup.txt 中的 TimeZone 时区设置,确保服务器时间与本地一致。
2. 小退时间重置:确认使用的是 G变量(全局个人变量)而非 P变量(临时变量)。
3. 不触发TakeOn:确认数据库里勋章的 StdMode 和 Shape 字段正确,且 AniCount 未设置特殊触发编号(否则会走StdModeFunc触发)。