在传奇服务端中,宝箱作为可交互物品,其行为由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”记录。
通过上述修正,可彻底解决宝箱无钥匙时消失的问题,确保交互逻辑完整可靠。

