当前位置:首页 > 实操教程 > Blue引擎 > 正文内容

Blue引擎宝箱物品触发脚本教程 - OpenTreasureChest命令实操

M2GM2026-09-19Blue引擎64
摘要:OpenTreasureChest是BLUE引擎QF中宝箱开完后的触发事件段,<$PARAM(4)>返回本次最后开出物品的ID,可堆叠物品无ID。本文说明该触发与OPENBOX开箱命令的区别、BoxItem.txt奖励配置分工、PARAM(4)取值规则和三步配置流程,解答开箱后物品不进包等常见问题。…
[TOCM]

宝箱开了一堆奖励,脚本却不知道玩家开的是哪个宝箱,想按宝箱类型发不同奖励都做不到。问题出在没读<$PARAM(4)>这个参数上。宝箱物品触发段[@OpenTreasureChest]在玩家每次开完宝箱时执行,引擎会把这次开出的物品ID塞进<$PARAM(4)>里,脚本拿到这个ID就能判断是哪个宝箱、该追加什么逻辑。

很多人把QF宝箱触发和NPC命令OPENBOX搞混,其实一个是开完宝箱后的事件钩子,一个是脚本里主动打开宝箱的命令,两者配合才是完整的开宝箱流程。下面按帮助文档原文拆开。

BLUE引擎OpenTreasureChest宝箱物品触发脚本配图 - M2GM

宝箱物品触发什么时候跑

当玩家使用宝箱道具完成一次开箱动作,BLUE引擎会执行QFUNCTION-0.txt里的[@OpenTreasureChest]段。这个触发是在宝箱奖励已经从BoxItem.txt里随机出来、物品已经进包之后跑的,属于事后通知性质。你在这个段里做的事情,不影响宝箱本身开出什么,只是在开完之后追加一段逻辑。做开宝箱奖励脚本时,这个段是你追加公告和额外发放的入口。

帮助文档给的标准写法非常简单:

[@OpenTreasureChest]
#IF
TRUE
#ACT
MOV M_宝箱ID <$PARAM(4)>

TRUE这个条件永远成立,意思是每次触发都往下走。MOV M_宝箱ID <$PARAM(4)>把这次开出的物品ID存到一个私人变量里,方便后面的脚本判断。M_宝箱ID是你自己起的变量名,引擎不限制,只要和其他变量不重名就行。

宝箱物品触发PARAM(4)参数内容示意图 - M2GM

PARAM(4)物品ID怎么读

<$PARAM(4)>是这个触发段里最关键的参数,它装的是本次开箱获得的物品ID。帮助文档说明了两种情况:如果一次开出多个物品,<$PARAM(4)>指向的是最后那个物品的ID;如果开出的是可重叠堆叠的物品,<$PARAM(4)>不会有物品ID,因为堆叠类物品没有独立ID。

这个参数的设计用途是让你知道玩家这次开出了什么。比如你想判断玩家有没有开出稀有道具,就把<$PARAM(4)>和稀有物品的数据库ID做比较,中了就发额外公告或追加奖励。但要注意它只指向最后一个物品,如果一次开了三样东西,前两样的ID在这个参数里读不到。

用MOV把<$PARAM(4)>存到M变量后,可以接IF条件判断,比如CompVal <$STR(M_宝箱ID)> = 1234,判断是不是某个特定物品,再决定要不要执行额外逻辑。

宝箱触发和OPENBOX命令的区别

这两个概念经常被搞混。[@OpenTreasureChest]是QF里的触发段,它在宝箱开完之后自动执行,你被动接收通知。OPENBOX是NPC命令,写在NPC脚本或StdModeFunc段里,由脚本主动调用去打开一个宝箱。

打个比方:OPENBOX是你伸手去开宝箱这个动作,[@OpenTreasureChest]是开完之后系统告诉你一声。典型流程是玩家双击宝箱物品,触发[@StdModeFuncXX]段,这段脚本先检查背包空格、检查钥匙,然后执行OPENBOX打开宝箱;宝箱开完奖励进包后,引擎自动跑[@OpenTreasureChest]段做事后处理。

宝箱配置奖励表放在BoxItem.txt里,这个文件按宝箱名分组,每组下面列物品名、数量、获取几率。OpenTreasureChest段不负责配奖励,奖励全在BoxItem.txt里设,这个段只做开完后的补充逻辑。

宝箱物品触发脚本配置操作示意图 - M2GM

触发脚本配置步骤

第一步,打开Market_Def目录下的QFunction-0.txt,写入[@OpenTreasureChest]段,条件用TRUE恒成立,在#ACT后面用MOV把<$PARAM(4)>存到一个M变量里。

第二步,如果要按开出物品做不同处理,在MOV后面加CompVal判断这个M变量是不是某个物品ID,中了就执行追加逻辑,比如SENDMSG发公告、GIVE额外奖励。

第三步,保存后在M2控制台重载QFunction,进游戏双击宝箱物品完成一次开箱,观察脚本是否被触发、M变量里存的物品ID是不是这次最后开出的那件。

常见疑问

1. 问:宝箱开完东西没进包是怎么回事?

先检查StdModeFunc段里的顺序:必须先TAKE扣掉钥匙和宝箱本身,再执行OPENBOX。如果顺序反了,或者忘了TAKE宝箱,引擎可能认为物品没被消耗就不发奖励。再看背包是不是满了,CHECKBAGSIZE要在开箱前判断,空格不够就MESSAGEBOX提示并BREAK,不要让OPENBOX在背包满的情况下执行。(本条问题整理自百度知道真实提问:宝箱开完东西没进包2020-07)

2. 问:右键卷轴没变成准星,点了直接用掉了?

这是StdMode字段填错了。右键选目标类道具StdMode必须填47,填成31就会直接执行脚本不进准星模式。填好后在M2里重载物品数据库再试。宝箱物品本身是StdMode31类双击触发,不是47类,别把宝箱和卷轴的StdMode搞混。(本条问题整理自百度知道真实提问:右键卷轴没变成准星点了直接用掉了怎么回事2017-12)

3. 问:怎么判断一件装备是武器还是衣服?

靠StdMode字段区分。武器是StdMode5和6,衣服是10和11,头盔15,项链19到21,戒指22到23,手镯24到26。宝箱物品在StdItems.db里StdMode填31,AniCount填触发段编号,双击时走[@StdModeFunc编号]。判断物品类型先看StdMode,再看Shape,两个字段配合才能确定物品具体功能。(本条问题整理自百度知道真实提问:怎么判断一件装备是武器还是衣服2014-01)

4. 问:一次开出多个物品PARAM(4)指向哪个?

帮助文档写明,如果一次开箱出了多个物品,<$PARAM(4)>指向最后一个物品的ID。前面出的物品ID在这个参数里读不到。如果你需要追踪每一件开出的物品,这个段做不到,只能靠BoxItem.txt里的几率配置控制产出。想做全量记录得换其他触发方式。

5. 问:开出可堆叠物品为什么PARAM(4)是空的?

帮助文档说明,给重叠物品也就是可堆叠物品时,<$PARAM(4)>不会有物品ID。因为可堆叠物品在数据库里是按数量叠加上去的,没有独立的单件ID标识。这种情况下MOV M_宝箱ID <$PARAM(4)>存到的是空值或0,不能拿它做物品ID比较。

6. 问:OpenTreasureChest段放在哪个文件?

放在Market_Def目录下的QFunction-0.txt里,和其他QF触发段写在一起。这个段不需要在NPC脚本里调用,宝箱开完引擎自动执行。奖励本身配置在BoxItem.txt里,和这个QF段是分开的两个文件,改奖励去BoxItem.txt,改开完后的附加逻辑来QFunction-0.txt。

7. 问:这个触发和BoxItem.txt是什么关系?

BoxItem.txt是宝箱奖励配置表,决定宝箱能开出什么、各自几率多少。OpenTreasureChest是开完后的事件钩子,不影响开箱结果。你在BoxItem.txt里加一件稀有物品,玩家开箱有概率拿到;你在OpenTreasureChest段里写逻辑,是在玩家已经拿到东西之后追加处理。两个文件一个管产出一个管事后,别混在一起改。

以上宝箱物品触发段的PARAM(4)读取和事后追加逻辑,均在本地BLUE引擎环境对照QFunction-0.txt实测跑通;[@OpenTreasureChest]触发段和<$PARAM(4)>物品ID参数仅适配BLUE引擎,换到其他引擎时参数序号和触发段名需要自行核对。宝箱物品触发是开箱后的钩子,配奖励还是要去BoxItem.txt。仅供单机本地学习调试。

扫描二维码推送至手机访问。

本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。

本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。

本文链接:https://www.m2gm.com/tech/blue/blue-yin-qing-bao-xiang-w/

分享给朋友:

相关文章

996引擎OpenWebSite怎么弹?游戏内打开网站地址脚本教程

996引擎OpenWebSite怎么弹?游戏内打开网站地址脚本教程

996引擎OpenWebSite打开网站地址教程:完整网址带http、NPC多页菜单跳转、带玩家名参数;网址缺协议与老客户端不支持内嵌浏览器排查,改完记得重启M2引擎才生效,单机测的时候记得开GM模式。…

996引擎AddMapRoute怎么设?地图动态链接点添加脚本教程

996引擎AddMapRoute怎么设?地图动态链接点添加脚本教程

996引擎AddMapRoute与SetMapRoute建地图动态链接点教程:标示号配对、两端坐标、双向互通、活动限时拆装;只写一半与标示不一致排查,上面这套改完直接丢进对应脚本段就行,不用额外配置。…

翎风引擎HumanHP怎么用?调整人物血量加减血命令详解

翎风引擎HumanHP怎么用?调整人物血量加减血命令详解

翎风引擎HumanHP教程:+加-减=设值三控制符、超上限自动截断、=是设值不是加血、和MAXHP区别、狂暴之力登录常驻,单机测试小号测。…

GOM引擎IP名单管理设置 - ADDIPLIST加IP名单脚本教程

GOM引擎IP名单管理设置 - ADDIPLIST加IP名单脚本教程

ADDIPLIST是GOM引擎往本地服务端IP名单里添加地址的管理命令,格式为ADDIPLIST后接列表类型与IP地址,0表示黑名单、1表示白名单,执行后即时生效但重启本地服务端会清空。本文拆解两类名单用法、操作步骤与避坑要点,解答重启失效、与CHECKIPLIST区别等问题,适合零基础版本搭建者对照学习。…

SD插件SDHumanDropUseItem怎么用?掉落身上指定装备脚本教程

SD插件SDHumanDropUseItem怎么用?掉落身上指定装备脚本教程

SD插件SDHumanDropUseItem教程:一个参数装备栏位;0武器1衣服2项链;空栏位无效果;装备掉地上不是掉背包;只掉主号不掉英雄,附避坑与实操步骤。…

LFM2引擎MobFireBurn怎么用?地图光环光圈特效脚本教程

LFM2引擎MobFireBurn怎么用?地图光环光圈特效脚本教程

LFM2引擎MobFireBurn教程:五参数地图名坐标XY光圈类型持续秒数;纯特效不挡路不伤怪;持续时间要设否则一直存在;能放多个;玩家下线光圈还在,附避坑与实操步骤。…

大秦插件NPC对话框绝对坐标怎么设?SetNpcDialogPos脚本教程

大秦插件NPC对话框绝对坐标怎么设?SetNpcDialogPos脚本教程

大秦插件NPC对话框绝对坐标教程:两参数屏幕坐标XY;原点在屏幕左上角;别超屏幕范围;不同分辨率坐标不同;每个对话段都要设;坐标只定位不缩放,附避坑与实操步骤。…