在热血传奇中通过NPC脚本实现装备合成,并加入成功率控制,需结合条件判断、随机数指令与物品操作命令。以下为完整实现逻辑,适用于标准Mir2服务端。
一、基础合成结构
首先定义合成入口与材料检测。例如合成“龙纹剑”需“炼狱”+“魔法书”:
[@main]
想合成龙纹剑吗?
[@make]
IF
CHECKITEM炼狱1
CHECKITEM魔法书1
ACT
TAKE炼狱1
TAKE魔法书1
CALL[MakeSwordProcess]
ELSEACT
MESSAGE材料不足!需要炼狱和魔法书各1个。
二、引入随机概率判定
在Process.txt中使用RANDOM指令控制成功率。假设成功率为70%(即7000/10000):
[@main]
IF
RANDOM7000
ACT
GIVE龙纹剑1
SENDMSG6合成成功!获得龙纹剑。
ELSEACT
SENDMSG1合成失败,材料已消耗。
RANDOM后数值为万分比,7000=70%,3000=30%,以此类推。
三、多档成功率设计(可选)
若需根据道具或等级调整概率,可加入前置判断。例如持有“祝福油”提升至90%:
[@main]
IF
CHECKITEM祝福油1
ACT
TAKE祝福油1
MOVS19000
ELSEACT
MOVS17000
IF
RANDOMS1
ACT
GIVE龙纹剑1
SENDMSG6合成成功!
ELSEACT
SENDMSG1合成失败。
S1作为动态概率变量,由前置条件赋值。
四、失败保留材料(可选机制)
若希望失败时不扣除材料,需将TAKE操作移至成功分支:
[@make]
IF
CHECKITEM炼狱1
CHECKITEM魔法书1
ACT
CALL[MakeSwordProcess]
ELSEACT
MESSAGE材料不足!
;Process.txt
[@main]
IF
RANDOM7000
ACT
TAKE炼狱1
TAKE魔法书1
GIVE龙纹剑1
SENDMSG6合成成功!
ELSEACT
SENDMSG1合成失败,材料未消耗。
五、防止重复触发与冷却
为避免快速连点,可加入冷却标记:
IF
EQUALS01
ACT
MESSAGE正在处理中,请稍候。
break
ACT
MOVS01
TIMERECALL@resetflag2
;执行合成逻辑
[@resetflag]
MOVS00
S0作为锁标志,2秒后自动重置。
六、注意事项
RANDOM指令必须大写,参数为整数;
物品名称需与Item.db中定义完全一致(区分全角半角);
多条件检测时,所有#IF条件需同时满足才执行#ACT;
脚本路径中的反斜杠在CALL指令中需转义为正斜杠或双反斜杠(依服务端版本而定);
测试时建议先用低价值物品验证概率逻辑,避免资源浪费。
通过上述方法,可灵活实现任意装备的带成功率合成系统,支持材料消耗策略调整与动态概率控制,满足多样化玩法需求。
一、基础合成结构
首先定义合成入口与材料检测。例如合成“龙纹剑”需“炼狱”+“魔法书”:
[@main]
想合成龙纹剑吗?
[@make]
IF
CHECKITEM炼狱1
CHECKITEM魔法书1
ACT
TAKE炼狱1
TAKE魔法书1
CALL[MakeSwordProcess]
ELSEACT
MESSAGE材料不足!需要炼狱和魔法书各1个。
二、引入随机概率判定
在Process.txt中使用RANDOM指令控制成功率。假设成功率为70%(即7000/10000):
[@main]
IF
RANDOM7000
ACT
GIVE龙纹剑1
SENDMSG6合成成功!获得龙纹剑。
ELSEACT
SENDMSG1合成失败,材料已消耗。
RANDOM后数值为万分比,7000=70%,3000=30%,以此类推。
三、多档成功率设计(可选)
若需根据道具或等级调整概率,可加入前置判断。例如持有“祝福油”提升至90%:
[@main]
IF
CHECKITEM祝福油1
ACT
TAKE祝福油1
MOVS19000
ELSEACT
MOVS17000
IF
RANDOMS1
ACT
GIVE龙纹剑1
SENDMSG6合成成功!
ELSEACT
SENDMSG1合成失败。
S1作为动态概率变量,由前置条件赋值。
四、失败保留材料(可选机制)
若希望失败时不扣除材料,需将TAKE操作移至成功分支:
[@make]
IF
CHECKITEM炼狱1
CHECKITEM魔法书1
ACT
CALL[MakeSwordProcess]
ELSEACT
MESSAGE材料不足!
;Process.txt
[@main]
IF
RANDOM7000
ACT
TAKE炼狱1
TAKE魔法书1
GIVE龙纹剑1
SENDMSG6合成成功!
ELSEACT
SENDMSG1合成失败,材料未消耗。
五、防止重复触发与冷却
为避免快速连点,可加入冷却标记:
IF
EQUALS01
ACT
MESSAGE正在处理中,请稍候。
break
ACT
MOVS01
TIMERECALL@resetflag2
;执行合成逻辑
[@resetflag]
MOVS00
S0作为锁标志,2秒后自动重置。
六、注意事项
RANDOM指令必须大写,参数为整数;
物品名称需与Item.db中定义完全一致(区分全角半角);
多条件检测时,所有#IF条件需同时满足才执行#ACT;
脚本路径中的反斜杠在CALL指令中需转义为正斜杠或双反斜杠(依服务端版本而定);
测试时建议先用低价值物品验证概率逻辑,避免资源浪费。
通过上述方法,可灵活实现任意装备的带成功率合成系统,支持材料消耗策略调整与动态概率控制,满足多样化玩法需求。

