当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

热血传奇包时物品到期引擎自动回收QFunction触发与GOMGEE限时装备脚本配置教程

热度:
包时物品到期自动回收分两种做法。一种用引擎原生包时/限时物品,双击或穿戴后由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]清理段。
[顶部]