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

商铺购买触发用法详解 - 996引擎购买回调配置

M2GM2026-10-22996引擎39
摘要:本文详解996引擎商铺购买触发脚本,包括@BuyShopItem购买成功段与@BeginBuyShopItem购买前段的区别,S0物品名与M0价格的读取方式,购买记录、限量校验等三阶案例,以及触发失效、Stop不中断等报错修复,帮助新手按996引擎脚本规范完成商铺购买回调配置。…
[TOCM]

做购买记录功能的时候,我在QFunction里写了半天才发现,商铺购买成功后的触发段是@BuyShopItem,段内用S0取物品名、M0取价格,当时没找到正确的段名,白白改了好几版脚本。商铺购买触发在996引擎里由固定段名加两个常量组成,配置简单但段名必须写对。

@BuyShopItem在购买商铺物品成功后执行,@BeginBuyShopItem在购买前执行,支持Stop中断,两者配合可以做购买记录、购买校验、购买后发放等逻辑。本文把两个段的作用、常量和配置过程复盘一遍,商铺脚本的调用关系也会一并说明。

先理解两个触发段的分工,再对照变量与常量,最后按步骤完成配置并验证。

商铺购买触发脚本配图 - M2GM

商铺购买触发段说明

购买商铺物品时触发功能在QFunction-0.txt中定义,购买成功后执行@BuyShopItem段,官方示例直接引用:

[@BuyShopItem]
#IF
#ACT
SendMsg 5 你购买的物品是<$STR(S0)>价格是<$STR(M0)>.

购买商铺物品前触发用@BeginBuyShopItem段,购买前执行,段内可以用Stop中断本次购买:

[@BeginBuyShopItem]
#IF
#ACT
SendMsg 5 你购买的物品是<$STR(S0)>价格是<$STR(M0)>.

两个段名不同,触发时机不同,@BeginBuyShopItem先于@BuyShopItem执行,做购买前校验用前者,做购买后记录用后者。

商铺购买触发脚本内容示意图 - M2GM

变量与常量说明

变量/常量 含义 使用示例
S0 购买物品的名字 <$STR(S0)>
M0 购买物品的价格 <$STR(M0)>
BUYSHOPEITEMNAME 商铺购买物品名字常量 <$BUYSHOPEITEMNAME>
BUYSHOPEITEMPRICE 商铺购买物品价格常量 <$BUYSHOPEITEMPRICE>

S0和M0在购买段内自动赋值,物品名进S0,价格进M0。SendMsg 5是个人提示消息,SendMsg 6是全局提示,按提示范围选择。变量与常量读取的值相同,写法不同,脚本里按习惯选用。

回调配置步骤

第一步,打开QFunction-0.txt,新增@BuyShopItem购买成功触发段,段内先用SendMsg 5输出物品名和价格,验证段能正常触发。

第二步,新增@BeginBuyShopItem购买前触发段,做购买前校验,例如判断人物状态或购买次数,不满足条件时用Stop中断购买。

第三步,在@BuyShopItem段内补充购买记录逻辑,可以写进文本文件或加到变量里,完成购买数据留存。

第四步,保存文件后在本地M2上重载QFunction脚本,打开商铺购买一件物品,观察提示消息是否输出购买信息。

第五步,验证@BeginBuyShopItem的Stop中断,把校验条件设为不满足,再点购买确认是否被拦截,996引擎脚本调试时注意两个段的触发先后顺序。

商铺购买触发脚本脚本配置示意图 - M2GM

购买脚本案例

初级入门案例:购买提示。@BuyShopItem段内只用SendMsg 5输出物品名和价格,先确认触发段工作正常,再往里面加逻辑。

中级优化案例:购买记录写入。@BuyShopItem段内把S0物品名和M0价格拼成一行写入文本文件,配合日期变量记录购买时间,做简单的购买流水。

高阶定制案例:购买前限量校验。@BeginBuyShopItem段内用变量统计当日购买次数,超过上限用Stop中断购买,实现每日限量购买的玩法逻辑。

购买常见坑点

段名写反是最常见的错误,购买前校验写在@BuyShopItem里会变成购买后执行,拦截失效,两个段的用途要分清。

S0和M0只在购买段内有效,段外用<$STR(S0)>取不到值,需要把值先存入个人变量再在其他段使用。

Stop命令中断购买时,后续的@BuyShopItem段不会执行,做限量逻辑时把提示写在@BeginBuyShopItem里,玩家才能看到拦截原因。

SendMsg 5和SendMsg 6的提示范围不同,全局提示用6会刷屏,购买类消息用5只提示本人更合适。

报错修复

报错现象:购买成功但没有触发@BuyShopItem段

先确认段名拼写和大小写,再检查QFunction文件是否重载,最后用SendMsg 5在段内做最小化验证,段内脚本报错会静默跳过,逐项排查即可。

报错现象:物品名和价格显示为空

S0和M0读取不到值,通常是段名写错导致走的不是购买触发,或者是版本里变量未初始化。核对段名后重新购买测试,两个值正常输出即修复。

报错现象:@BeginBuyShopItem的Stop不中断

Stop要写在购买前触发段内才有效,写在@BuyShopItem段里购买已经完成,中断没有意义。确认段名后把中断逻辑移到@BeginBuyShopItem中。

FAQ常见问题

1. 问:商铺购买触发段和NPC购买触发段一样吗?

不一样。商铺购买走@BuyShopItem和@BeginBuyShopItem段,NPC买卖物品走NPC脚本的(@buy @sell)触发,两套触发体系相互独立,别把商铺段写进NPC脚本里。(本条问题整理自素材库:为什么我的NPC不能买、卖、修理物品?,2026年9月)

2. 问:S0和M0能直接参与计算吗?

M0价格是数字变量可以直接计算,S0物品名是字符变量不能参与数值运算。做价格比较时用M0,做物品判断时用S0,两个变量分工明确。

3. 问:商铺价格脚本在哪里修改?

商铺价格由商铺配置表控制,脚本侧用SetShopItemPriceRate等命令做折扣调整。购买段内读取的M0是实际成交价格,改折扣后M0同步变化。(本条问题整理自素材库:购买buy和出售sell物品的价格脚本在哪里修改?,2020年9月)

4. 问:购买段里能发全局公告吗?

可以,把SendMsg 5换成SendMsg 6就是全局提示。注意提示频率,购买频繁时全局公告会刷屏,一般只在高级物品购买时发全局消息。

5. 问:购买前校验失败后怎么给玩家提示?

在@BeginBuyShopItem段内先写#SAY或SendMsg提示原因,再写Stop中断,玩家会看到拦截提示。提示要写在Stop之前,中断后脚本不再向下执行。

6. 问:商铺折扣设置后购买触发段价格会变吗?

会。M0读取的是实际成交价,商铺折扣生效后M0同步变化,做购买记录时记录到的就是折扣后的价格。(本条问题整理自素材库:商铺折扣下线就没了,2026年8月)

商铺功能对比

商铺购买触发与商铺折扣、商铺价格设置同属商铺体系,职责不同:

功能 触发/命令 用途
购买触发 @BuyShopItem、@BeginBuyShopItem 购买前后执行脚本
商铺折扣 SetShopItemPriceRate 调整商铺价格比例
价格读取 S0、M0、BUYSHOPEITEM常量 读取物品名与价格

购买触发负责购买行为的前后处理,折扣命令负责价格调整,两者可以组合使用,价格调整后购买段读到的M0就是新价格。

实施回顾

商铺购买触发通过@BuyShopItem和@BeginBuyShopItem两个段实现,购买成功后执行前者,购买前执行后者支持Stop中断,S0和M0分别读取物品名与价格,配合常量可以完成购买记录、限量校验、购买后发放等逻辑,购买回调配置在本地环境即可完成验证。

商铺购买前后两个触发段已在本地996引擎环境完成实测验证;命令仅适配996引擎,跨引擎场景请自行测试调整。仅作单机本地调试学习参考。

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

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

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

本文链接:https://www.m2gm.com/tech/996/996-shop-buy/

分享给朋友:

相关文章

LFM2引擎设置人物商铺购买价格比例 - 商品打折出售方法

LFM2引擎设置人物商铺购买价格比例 - 商品打折出售方法

LFM2引擎的SetShopItemPriceRate命令用于按比例调整人物在商铺购买物品的价格,比例参数1到100,人物下线后状态自动消失,适合在登录脚本中按等级发放商铺折扣。本文按帮助文档原文整理命令格式、参数对照、配置步骤与玩法案例,并给出价格计算与不生效排查,帮助版本GM落地商铺价格玩法。…