包时物品到期自动回收分两种做法。一种用引擎原生包时/限时物品,双击或穿戴后由M2按天数或分钟计时,到期自动从背包或身上移除;另一种用触发物品加变量、机器人定时检测,到期手动执行回收并清状态。原生方案最稳,脚本只做提示和补发;变量方案适合会员、buff、称号这类不在StdItems直接计时的业务。
一、BLUE/LegendM2包时物品原生配置
物品数据库StdItems里建包时物品,核心字段:
StdMode=2
Shape=18
DuraMax=最大使用天数
AniCount=自定义触发号,例如50、51、100
Source、Reserved按版本留空或按补丁填
StdMode=2加Shape=18是BLUE包时物品类型,DuraMax填天数不是耐久秒数,比如填2就是2天。AniCount决定双击后走QFunction-0.txt哪个段。物品库示例:941;包时物品;2;18;0;51;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;10;20000;5;,其中shape=18、AniCount=51、DuraMax相关字段按库结构填天数,双击后触发[@StdModeFunc51]开始计时,到期引擎自动回收。
QFunction-0.txt写触发段:
[@StdModeFunc51]
IF
ACT
MESSAGEBOX你的包时物品已开始计时,到期由引擎自动回收
SENDMSG6包时物品生效,到期自动消失
只写提示也能用,引擎本身按DuraMax天数倒计,时间到自动删物品。若要到期再补一条系统消息,可结合引擎到期回调;BLUE包时类通常不需要自己写删除,硬用Take反而会和原生计时冲突。
注意BLUE该类型早期限制武器、衣服、首饰支持不全,主要做消耗品、临时道具、包时材料类;给装备做包时优先用下面GOM/GEE的Need计时或自己用变量方案。
二、GOM/GEE穿戴限时物品配置
GOM类在StdItems给目标装备设:
Need=101
NeedLevel=分钟数
NeedLevel=60就是60分钟,120就是120分钟,最大按引擎说明。规则文件用Mir200\Envir\UserData\LimitItem.txt,内容按物品名或Need写:
Need=101
NeedLevel=60
含义是限时物品,带上开始计时,到期必须在身上才会自动消失,引擎通常每分钟检测一次。配合规则可再加不允许取下、不允许修理、不允许交易,避免玩家脱下来暂停计时。
GEE对计时开始方式分得更细:
Need=101:带到身上开始计时,到期在身上自动消失,每分钟检测。
Need=102:使用/穿戴即开始,放背包也结算。
Need=103:刷出或给予即开始,在线就计时。
Need=104:刷出或给予即开始,不在线也继续计时。
例如给活动勋章设Need=101、NeedLevel=30,就是带身30分钟;给全服buff道具设Need=103、NeedLevel=120,发下去就开始算,不要求立刻穿。
QFunction-0.txt用到期段补逻辑:
[@ItemExpired]
IF
ACT
SENDMSG6你的限时物品<$PARAM(0)>已到期,系统已自动回收
;如需清称号、清变量、清buff,按本引擎命令继续写
[$PARAM(0)]在不同引擎可能换成具体物品名参数,按M2命令手册改。部分GOM用[@ItemExpired]接物品名,配合清理会员标记、称号、属性脚本。
三、触发物品加变量做包时会员/buff
不想依赖StdItems计时,用StdMode=31或本引擎双击触发物品,AniCount指向QFunction段,自己在变量里存到期时间。以个人到期时间戳为例:
QFunction-0.txt:
[@StdModeFunc101]
IF
CHECKITEM一日包时卡1
ACT
TAKE一日包时卡1
;设变量,命令名按引擎,下面用通用占位
SETVARHUMAN包时到期秒当前秒+86400
SENDMSG6已开通1天包时,到期自动回收权限
[@StdModeFunc102]
IF
CHECKITEM七天包时卡1
ACT
TAKE七天包时卡1
SETVARHUMAN包时到期秒当前秒+604800
SENDMSG6已开通7天包时
[@StdModeFunc103]
IF
CHECKITEM三十天包时卡1
ACT
TAKE三十天包时卡1
SETVARHUMAN包时到期秒当前秒+2592000
SENDMSG6已开通30天包时
不同引擎取当前秒、做加法、存个人变量的命令不一样,有的用N$变量、有的用P变量、有的用U变量、有的用HUMAN字符串变量。BLUE可用D/P/N系列加系统时间函数;GOM可用GetDate相关命令;HERO可用Unix时间命令。写之前在M2命令列表搜“当前时间”“系统时间”“存个人变量”,按本端例子改,不要跨引擎硬抄。
四、机器人定时检测到期并自动回收
变量方案必须有机理把“到期”转成“回收”。用Robot_def/AutoRunRobot.txt配周期,RobotManage.txt写执行段;没有机器人就用QFunction登录段、定期地图触发、或M2内置定时器。
RobotManage思路:
[@CheckBaoshi]
IF
ACT
;遍历在线玩家,命令按引擎;下面写单人判断示例
CALLEX在线检测段
单人在线检测段:
[@CheckOneUser]
IF
CHECKVAREXHUMAN包时到期秒>0
CHECKTIME当前秒大于包时到期秒
ACT
;回收包时权限
TAKE包时特权道具1
SETVARHUMAN包时到期秒0
;清称号、清buff、清会员标记,按本引擎命令写
SENDMSG6包时已到期,系统已回收相关物品与权限
break
[@CheckOneUser]
elseact
ACT
;未到期不处理
break
机器人周期别太短,全服每秒遍历会吃CPU;包时业务30秒、1分钟、5分钟一轮都行。人数多就把“到期检测”放在登录段补一次,机器人只做在线期间定期扫。
五、登录补检与断线后续处理
玩家离线期间包时到了,再次登录要补回收。QManage.txt或本引擎登录段:
[@Login]
IF
CHECKVAREXHUMAN包时到期秒>0
CHECKTIME当前秒大于包时到期秒
ACT
TAKE包时特权道具1
SETVARHUMAN包时到期秒0
;清称号、清buff
SENDMSG6欢迎上线,你的包时已过期,系统完成自动回收
break
[@Login]
if
CHECKVAREXHUMAN包时到期秒>0
act
;未到期可发剩余时间提示,命令按引擎取差值
SENDMSG6当前包时仍有效
break
原生StdItems包时/限时物品通常不需登录段回收,M2自己按到期删;变量方案一定要登录补检,否则玩家下线再上能继续用。
六、NPC手动回收与在线自动回收补充
包时到期如果还要回收普通装备、材料、任务物,用Market_Def的NPC或QuestDiary在线回收。UserCmd注册命令、QFunction绑定、在线回收段用CheckItem+Take+Give。
示例NPC:
[@main]
say
包时物品与装备回收。\
回收裁决类。\
回收限时段。\
[@take_luidao]
if
checkitem裁决之杖1
act
take裁决之杖1
give元宝5000
sendmsg6回收成功
break
[@auto_baoshi]
if
checkitem包时特权道具1
act
take包时特权道具1
set[HUMAN(包时到期秒)]0
;清buff、清称号
sendmsg6已手动回收包时物品并清权限
break
在线自动回收放QuestDiary,定时器每几秒扫背包:
[@AutoRecycle]
if
checkitem包时过期样本1
act
take包时过期样本1
sendmsg6自动回收包时样本
break
定时器启动按引擎写OnTimer/StartScTimer/#autorunNPCSEC,频率别低于1秒全服扫所有物品,容易高CPU。自动回收插件如GOM/GEE有PGStartAutoRecover一类命令时,先确认PlugList加载成功,再写规则文件;插件不加载命令无效。
七、包时物品避免重复叠加
卖包时卡最怕玩家连续双击多张,权限时间要累加而不是覆盖。变量方案:
[@add_baoshi]
if
checkitem一日包时卡1
act
take一日包时卡1
if
checkvarexHUMAN包时到期秒>0
checktime当前秒小于HUMAN包时到期秒
act
;原到期时间加1天
setvarHUMAN包时到期秒原值+86400
sendmsg6已累加1天
break
[@add_baoshi]
if
checkitem一日包时卡1
act
take一日包时卡1
act
;已过期或首次开
setvarHUMAN包时到期秒当前秒+86400
sendmsg6新开1天包时
break
原生BLUE包时物品若允许多个叠加,数据库别发重复同AniCount同DuraMax造成双计时;玩家同时拿两个包时物,按业务决定是分别计时还是只认一个。通常特权类用变量控制只保留一个到期时间,实物消耗类才允许多个各自计时。
八、常见不回收排错
双击包时物没反应:看StdItems的StdMode、Shape、AniCount是否和引擎类型匹配;BLUE包时用2/18,触发段名必须是QFunction-0.txt的[@StdModeFunc+AniCount];用StdMode=31触发要确认M2允许双击触发且AniCount对应段存在。
到期不自动消失:BLUE检查DuraMax是否填成耐久而不是天数;GOM/GEE检查Need=101、NeedLevel分钟、LimitItem规则是否重启后加载;穿戴类必须角色穿着才消失的,玩家放背包不会删,需要改Need=102/103/104或放变量方案。
到期删了但权限还在:原生物品只删物不清脚本称号/buff,必须在[@ItemExpired]或机器人段补Take、清变量、清称号、清buff;会员类别只删卡不删变量,否则到期仍享受属性。
机器人不执行:AutoRunRobot调用段名和RobotManage段名不一致会不触发;QuestDiary子程序用#call路径错也会空跑。所有脚本文件保存ANSI,UTF-8带BOM在老M2会乱码不加载。
回收发奖重复:自动回收段先Take再Give,先判断CheckItem再发奖;NPC回收用CheckItem+Take+Give顺序,别先发奖后扣物,避免BUG重复刷。
包时会员下线时间不算:原生穿戴计时通常只在线或按引擎规则;要做到关服、下线都按真实时间扣,用Need=104类或变量存Unix到期时间,登录段用当前系统时间比较,不用在线时长累加。
九、按业务给配置组合
纯消耗包时药、临时材料:BLUE用StdMode=2、Shape=18、DuraMax天数、AniCount触发;QFunction只发开始提示,到期M2自动回收,不写变量。
活动限时勋章:GOM/GEE用Need=101、NeedLevel分钟,LimitItem加禁摘禁修禁交易;QFunction[@ItemExpired]清称号发到期公告。
包时会员、打宝倍率、进图权限:用StdMode=31触发卡,QFunction写开始时间到个人变量,机器人1到5分钟检测,登录段补检,到期Take特权物、清变量、清倍率命令、清地图权限。
全天buff类不限穿戴:GEE用Need=103/104,发到背包即计时;或脚本双击给buff并记录到期时间戳,机器人到期RemoveBuff/清POWERRATE/清称号。
多卡累加包月:变量方案存到期秒,首次当前秒加时长,未到期在原到期秒加时长,登录和机器人双检;原生包时物不建议做累加,容易双计时冲突。
写包时自动回收优先用引擎原生计时,脚本只做提示、补清权限、补发公告;只有会员、buff、倍率、称号这类非实体计时才用变量加机器人。原生段、QFunction、RobotManage、StdItems字段三者对齐后,双击不触发查AniCount,到期不删查DuraMax/Need/NeedLevel,删了仍有权限查变量和[@ItemExpired]清理段。
一、BLUE/LegendM2包时物品原生配置
物品数据库StdItems里建包时物品,核心字段:
StdMode=2
Shape=18
DuraMax=最大使用天数
AniCount=自定义触发号,例如50、51、100
Source、Reserved按版本留空或按补丁填
StdMode=2加Shape=18是BLUE包时物品类型,DuraMax填天数不是耐久秒数,比如填2就是2天。AniCount决定双击后走QFunction-0.txt哪个段。物品库示例:941;包时物品;2;18;0;51;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;10;20000;5;,其中shape=18、AniCount=51、DuraMax相关字段按库结构填天数,双击后触发[@StdModeFunc51]开始计时,到期引擎自动回收。
QFunction-0.txt写触发段:
[@StdModeFunc51]
IF
ACT
MESSAGEBOX你的包时物品已开始计时,到期由引擎自动回收
SENDMSG6包时物品生效,到期自动消失
只写提示也能用,引擎本身按DuraMax天数倒计,时间到自动删物品。若要到期再补一条系统消息,可结合引擎到期回调;BLUE包时类通常不需要自己写删除,硬用Take反而会和原生计时冲突。
注意BLUE该类型早期限制武器、衣服、首饰支持不全,主要做消耗品、临时道具、包时材料类;给装备做包时优先用下面GOM/GEE的Need计时或自己用变量方案。
二、GOM/GEE穿戴限时物品配置
GOM类在StdItems给目标装备设:
Need=101
NeedLevel=分钟数
NeedLevel=60就是60分钟,120就是120分钟,最大按引擎说明。规则文件用Mir200\Envir\UserData\LimitItem.txt,内容按物品名或Need写:
Need=101
NeedLevel=60
含义是限时物品,带上开始计时,到期必须在身上才会自动消失,引擎通常每分钟检测一次。配合规则可再加不允许取下、不允许修理、不允许交易,避免玩家脱下来暂停计时。
GEE对计时开始方式分得更细:
Need=101:带到身上开始计时,到期在身上自动消失,每分钟检测。
Need=102:使用/穿戴即开始,放背包也结算。
Need=103:刷出或给予即开始,在线就计时。
Need=104:刷出或给予即开始,不在线也继续计时。
例如给活动勋章设Need=101、NeedLevel=30,就是带身30分钟;给全服buff道具设Need=103、NeedLevel=120,发下去就开始算,不要求立刻穿。
QFunction-0.txt用到期段补逻辑:
[@ItemExpired]
IF
ACT
SENDMSG6你的限时物品<$PARAM(0)>已到期,系统已自动回收
;如需清称号、清变量、清buff,按本引擎命令继续写
[$PARAM(0)]在不同引擎可能换成具体物品名参数,按M2命令手册改。部分GOM用[@ItemExpired]接物品名,配合清理会员标记、称号、属性脚本。
三、触发物品加变量做包时会员/buff
不想依赖StdItems计时,用StdMode=31或本引擎双击触发物品,AniCount指向QFunction段,自己在变量里存到期时间。以个人到期时间戳为例:
QFunction-0.txt:
[@StdModeFunc101]
IF
CHECKITEM一日包时卡1
ACT
TAKE一日包时卡1
;设变量,命令名按引擎,下面用通用占位
SETVARHUMAN包时到期秒当前秒+86400
SENDMSG6已开通1天包时,到期自动回收权限
[@StdModeFunc102]
IF
CHECKITEM七天包时卡1
ACT
TAKE七天包时卡1
SETVARHUMAN包时到期秒当前秒+604800
SENDMSG6已开通7天包时
[@StdModeFunc103]
IF
CHECKITEM三十天包时卡1
ACT
TAKE三十天包时卡1
SETVARHUMAN包时到期秒当前秒+2592000
SENDMSG6已开通30天包时
不同引擎取当前秒、做加法、存个人变量的命令不一样,有的用N$变量、有的用P变量、有的用U变量、有的用HUMAN字符串变量。BLUE可用D/P/N系列加系统时间函数;GOM可用GetDate相关命令;HERO可用Unix时间命令。写之前在M2命令列表搜“当前时间”“系统时间”“存个人变量”,按本端例子改,不要跨引擎硬抄。
四、机器人定时检测到期并自动回收
变量方案必须有机理把“到期”转成“回收”。用Robot_def/AutoRunRobot.txt配周期,RobotManage.txt写执行段;没有机器人就用QFunction登录段、定期地图触发、或M2内置定时器。
RobotManage思路:
[@CheckBaoshi]
IF
ACT
;遍历在线玩家,命令按引擎;下面写单人判断示例
CALLEX在线检测段
单人在线检测段:
[@CheckOneUser]
IF
CHECKVAREXHUMAN包时到期秒>0
CHECKTIME当前秒大于包时到期秒
ACT
;回收包时权限
TAKE包时特权道具1
SETVARHUMAN包时到期秒0
;清称号、清buff、清会员标记,按本引擎命令写
SENDMSG6包时已到期,系统已回收相关物品与权限
break
[@CheckOneUser]
elseact
ACT
;未到期不处理
break
机器人周期别太短,全服每秒遍历会吃CPU;包时业务30秒、1分钟、5分钟一轮都行。人数多就把“到期检测”放在登录段补一次,机器人只做在线期间定期扫。
五、登录补检与断线后续处理
玩家离线期间包时到了,再次登录要补回收。QManage.txt或本引擎登录段:
[@Login]
IF
CHECKVAREXHUMAN包时到期秒>0
CHECKTIME当前秒大于包时到期秒
ACT
TAKE包时特权道具1
SETVARHUMAN包时到期秒0
;清称号、清buff
SENDMSG6欢迎上线,你的包时已过期,系统完成自动回收
break
[@Login]
if
CHECKVAREXHUMAN包时到期秒>0
act
;未到期可发剩余时间提示,命令按引擎取差值
SENDMSG6当前包时仍有效
break
原生StdItems包时/限时物品通常不需登录段回收,M2自己按到期删;变量方案一定要登录补检,否则玩家下线再上能继续用。
六、NPC手动回收与在线自动回收补充
包时到期如果还要回收普通装备、材料、任务物,用Market_Def的NPC或QuestDiary在线回收。UserCmd注册命令、QFunction绑定、在线回收段用CheckItem+Take+Give。
示例NPC:
[@main]
say
包时物品与装备回收。\
回收裁决类。\
回收限时段。\
[@take_luidao]
if
checkitem裁决之杖1
act
take裁决之杖1
give元宝5000
sendmsg6回收成功
break
[@auto_baoshi]
if
checkitem包时特权道具1
act
take包时特权道具1
set[HUMAN(包时到期秒)]0
;清buff、清称号
sendmsg6已手动回收包时物品并清权限
break
在线自动回收放QuestDiary,定时器每几秒扫背包:
[@AutoRecycle]
if
checkitem包时过期样本1
act
take包时过期样本1
sendmsg6自动回收包时样本
break
定时器启动按引擎写OnTimer/StartScTimer/#autorunNPCSEC,频率别低于1秒全服扫所有物品,容易高CPU。自动回收插件如GOM/GEE有PGStartAutoRecover一类命令时,先确认PlugList加载成功,再写规则文件;插件不加载命令无效。
七、包时物品避免重复叠加
卖包时卡最怕玩家连续双击多张,权限时间要累加而不是覆盖。变量方案:
[@add_baoshi]
if
checkitem一日包时卡1
act
take一日包时卡1
if
checkvarexHUMAN包时到期秒>0
checktime当前秒小于HUMAN包时到期秒
act
;原到期时间加1天
setvarHUMAN包时到期秒原值+86400
sendmsg6已累加1天
break
[@add_baoshi]
if
checkitem一日包时卡1
act
take一日包时卡1
act
;已过期或首次开
setvarHUMAN包时到期秒当前秒+86400
sendmsg6新开1天包时
break
原生BLUE包时物品若允许多个叠加,数据库别发重复同AniCount同DuraMax造成双计时;玩家同时拿两个包时物,按业务决定是分别计时还是只认一个。通常特权类用变量控制只保留一个到期时间,实物消耗类才允许多个各自计时。
八、常见不回收排错
双击包时物没反应:看StdItems的StdMode、Shape、AniCount是否和引擎类型匹配;BLUE包时用2/18,触发段名必须是QFunction-0.txt的[@StdModeFunc+AniCount];用StdMode=31触发要确认M2允许双击触发且AniCount对应段存在。
到期不自动消失:BLUE检查DuraMax是否填成耐久而不是天数;GOM/GEE检查Need=101、NeedLevel分钟、LimitItem规则是否重启后加载;穿戴类必须角色穿着才消失的,玩家放背包不会删,需要改Need=102/103/104或放变量方案。
到期删了但权限还在:原生物品只删物不清脚本称号/buff,必须在[@ItemExpired]或机器人段补Take、清变量、清称号、清buff;会员类别只删卡不删变量,否则到期仍享受属性。
机器人不执行:AutoRunRobot调用段名和RobotManage段名不一致会不触发;QuestDiary子程序用#call路径错也会空跑。所有脚本文件保存ANSI,UTF-8带BOM在老M2会乱码不加载。
回收发奖重复:自动回收段先Take再Give,先判断CheckItem再发奖;NPC回收用CheckItem+Take+Give顺序,别先发奖后扣物,避免BUG重复刷。
包时会员下线时间不算:原生穿戴计时通常只在线或按引擎规则;要做到关服、下线都按真实时间扣,用Need=104类或变量存Unix到期时间,登录段用当前系统时间比较,不用在线时长累加。
九、按业务给配置组合
纯消耗包时药、临时材料:BLUE用StdMode=2、Shape=18、DuraMax天数、AniCount触发;QFunction只发开始提示,到期M2自动回收,不写变量。
活动限时勋章:GOM/GEE用Need=101、NeedLevel分钟,LimitItem加禁摘禁修禁交易;QFunction[@ItemExpired]清称号发到期公告。
包时会员、打宝倍率、进图权限:用StdMode=31触发卡,QFunction写开始时间到个人变量,机器人1到5分钟检测,登录段补检,到期Take特权物、清变量、清倍率命令、清地图权限。
全天buff类不限穿戴:GEE用Need=103/104,发到背包即计时;或脚本双击给buff并记录到期时间戳,机器人到期RemoveBuff/清POWERRATE/清称号。
多卡累加包月:变量方案存到期秒,首次当前秒加时长,未到期在原到期秒加时长,登录和机器人双检;原生包时物不建议做累加,容易双计时冲突。
写包时自动回收优先用引擎原生计时,脚本只做提示、补清权限、补发公告;只有会员、buff、倍率、称号这类非实体计时才用变量加机器人。原生段、QFunction、RobotManage、StdItems字段三者对齐后,双击不触发查AniCount,到期不删查DuraMax/Need/NeedLevel,删了仍有权限查变量和[@ItemExpired]清理段。

