传奇宝箱脚本正确写法与消失问题修复

来源: 作者: 点击:
在传奇服务端中,宝箱作为可交互物品,其行为由QFunction脚本控制。若未携带钥匙时双击宝箱导致物品消失,根本原因在于缺少对“无钥匙”情况的物品保留处理。标准流程应为:检测钥匙→有则开启并消耗→无则提示并保留宝箱。

一、问题根源分析
原脚本仅在 [@黄金钥匙开宝] 分支中处理开启逻辑,但未覆盖“直接双击宝箱”的默认行为。当玩家双击宝箱且未走指定按钮流程时,系统默认执行物品使用动作,若无对应处理指令,物品会被自动移除。

二、完整脚本结构要求
宝箱脚本必须包含两个核心标签:
[@StdModeFuncXXX]:定义物品右键/双击弹出的对话界面(XXX为物品StdMode值);
[@ItemUse_物品名]:拦截直接使用行为,防止物品消失。

三、修正后脚本写法
假设黄金宝箱的StdMode为133,物品名称为“黄金宝箱”,脚本应如下:

[@StdModeFunc133]
SAY
奇幻莫测的黄金宝箱,内含有各种特殊系列宝物!\
开启时需要在背包里放一把“黄金钥匙”\
黄金钥匙的获得可以在商城里用元宝购买\
有几率可以获得特殊戒指哦!真的,大家可以试试 \
\
注意:\
注意:

[@黄金钥匙开宝]
IF
CHECKITEM 黄金钥匙 1
ACT
TAKE 黄金钥匙 1
OPENITEMBOX 黄金宝箱
SENDMSG 0 玩家[]:打开了黄金宝箱,大量装备滚落地面,还有特殊戒指呢
CLOSE
ELSEACT
SENDMSG 5 开启黄金宝箱时需要1把黄金钥匙,你背包里没有此钥匙,黄金钥匙的获得可以在游戏商铺用元宝购买
CLOSE

[@ItemUse_黄金宝箱]
IF
CHECKITEM 黄金钥匙 1
ACT
TAKE 黄金钥匙 1
OPENITEMBOX 黄金宝箱
SENDMSG 0 玩家[]:打开了黄金宝箱,大量装备滚落地面,还有特殊戒指呢
ELSEACT
SENDMSG 5 没有黄金钥匙,无法开启宝箱!
GIVE 黄金宝箱 1

四、关键修正点说明
新增 [@ItemUse_黄金宝箱] 标签:
当玩家直接双击宝箱(不通过对话按钮),系统优先调用此标签;
若无此标签,引擎默认销毁物品,导致消失。

无钥匙时执行 GIVE 指令:
GIVE 黄金宝箱 1 将宝箱重新放回背包,确保物品不丢失;
必须放在 #ELSEACT 分支末尾,保证提示后立即返还。

统一开启逻辑:
[@黄金钥匙开宝] 与 [@ItemUse_黄金宝箱] 的成功分支代码一致,避免重复维护。

五、物品配置前提
确保 D:Mir200EnvirBoxs黄金宝箱.txt 文件存在,且内容格式正确,例如:
;黄金宝箱掉落列表
1000 1 ;屠龙
2000 1 ;天尊戒指

若Boxs目录无对应文件,OPENITEMBOX 将无效。

六、测试验证步骤
背包无钥匙时双击宝箱:应弹出“没有钥匙”提示,宝箱仍在背包;
携带钥匙时通过按钮或双击:正常消耗钥匙,爆出物品;
检查服务端日志是否有“ItemUse_黄金宝箱 called”记录。

通过上述修正,可彻底解决宝箱无钥匙时消失的问题,确保交互逻辑完整可靠。