传奇装备合成NPC脚本教程:材料检测概率生成与多引擎配置实例

来源: 作者: 点击:
[@主对话]
SAY

装备合成处开放。\
1.乌木剑+黑铁矿→铁剑,成功率60%\
2.沃玛项链+沃玛号角+金币→祖玛项链,成功率35%\
3.三把同阶武器自动合成高一阶武器,无需手动点选\
<乌木合成/@铁剑合成> <沃玛合成/@祖玛合成> <自动规则/@自动合成> <离开/@exit>

[@铁剑合成]
IF

CHECKITEM 乌木剑 1
CHECKITEM 黑铁矿 1
CHECKBAGGAGE 1
ACT

TAKE 乌木剑 1
TAKE 黑铁矿 1
RANDOM 100
IF

SMALL 60
ACT

GIVE 铁剑 1
SENDMSG 0 合成成功,获得铁剑1把
BREAK
ELSEACT

SENDMSG 0 合成失败,乌木剑与黑铁矿已消耗
BREAK

上面这段适合新手直接抄。CHECKITEM负责看背包有没有材料,数量按空格后数字写;CHECKBAGGAGE 1表示背包至少留1个空位,防止合成完新装备没地方放。TAKE放在前面先扣材料,再跑RANDOM 100生成0到99的随机数,SMALL 60表示0到59都算成功,也就是60%。如果想改成功率,把SMALL后面数字换掉就行,SMALL 30是30%,SMALL 80是80%。失败分支不返还材料,属于高风险合成;若要做保底,把TAKE挪到概率判断之后,只在成功时扣材料,或者在失败分支用GIVE把主材料退回去。

[@祖玛合成]
IF

CHECKITEM 沃玛项链 1
CHECKITEM 沃玛号角 2
CHECKGOLD 50000
CHECKBAGGAGE 1
ACT

TAKE 沃玛项链 1
TAKE 沃玛号角 2
TAKEGOLD 50000
RANDOM 1000
IF

SMALL 350
ACT

GIVE 祖玛项链 1
SENDMSG 0 合成成功,获得祖玛项链1条
BREAK
ELSEACT

SENDMSG 0 合成失败,材料与金币已扣除
BREAK

沃玛合祖玛这种多材料写法,重点是材料名必须和物品库完全一致。很多脚本不生效,不是命令错,而是“沃玛号角”写成“沃玛角号”、“祖玛项链”多了空格,引擎按字符串匹配,差一个字都不认。CHECKGOLD和TAKEGOLD用于金币消耗,若用元宝把CHECKGOLD换成CHECKGAMEGOLD,TAKEGOLD换成GAMEGOLD - 数量。RANDOM 1000配SMALL 350就是35%,概率精度更高,适合高阶装备控制产出。

多配方放在同一个NPC时,用不同跳转标签分开,避免所有装备走一套判断。比如再增加祖玛戒指、祖玛手镯,复制[@祖玛合成]改成对应材料名和产出名即可,标签改成[@祖玛戒指]、[@祖玛手镯],主对话里加对应菜单。材料数量、金币、成功率都单独写,后期改某一条不会影响其他配方。

概率多档产出可这样写:

[@多档合成]
IF

CHECKITEM 高级矿石 3
CHECKITEM 催化石 1
CHECKGAMEGOLD 50
CHECKBAGGAGE 1
ACT

TAKE 高级矿石 3
TAKE 催化石 1
GAMEGOLD - 50
RANDOM 1000
IF

SMALL 600
ACT

GIVE 普通品质装备 1
SENDMSG 0 合成成功,获得普通品质装备
BREAK
IF

SMALL 850
ACT

GIVE 精良品质装备 1
SENDMSG 0 合成成功,获得精良品质装备
BREAK
IF

SMALL 950
ACT

GIVE 优秀品质装备 1
SENDMSG 0 合成成功,获得优秀品质装备
BREAK
ELSEACT

GIVE 史诗品质装备 1
SENDMSG 0 合成成功,获得史诗品质装备
BREAK

这段用累加区间,0到599出普通,600到849出精良,850到949出优秀,950到999出史诗,合计覆盖全部随机值。写多档时不要把每个区间都从0开始,否则高品被低品拦截。RANDOM只跑一次,后面用多个#IF分段判断,能保证同一次合成只给一件装备。

自动合成适合刷材料阶段,不靠NPC点选,捡到材料就检测背包。Hero类引擎可放QFunction,用拾取事件触发:

[@PickUpItem]
IF

EQUAL 屠龙
ACT

GOTO @检测屠龙

[@检测屠龙]
IF

CHECKITEM 屠龙 3
CHECKBAGGAGE 1
ACT

TAKE 屠龙 3
GIVE 开天 1
SENDMSG 5 背包满足3把屠龙,已自动合成开天1把
BREAK

如果用ID写,CHECKITEM后面直接跟物品ID和数量,TAKE、GIVE也跟ID,避免同名不同ID导致发错东西。定时器自动检测可放OnTimer,设置每秒扫一次背包,材料够就扣就发;缺点是人多时频繁扫包占资源,材料少别开全局自动,只在合成地图或特定NPC开。

Blue引擎写法更简化,条件用ItemCount,扣发用DelItem、AddItem:

[@合成使者]
SAY

1把沃玛剑+2个沃玛号角+5金币→沃玛战刃\
<确认合成/@沃玛战刃>
<离开/@exit>

[@沃玛战刃]
IF

ItemCount(沃玛剑) >= 1
ItemCount(沃玛号角) >= 2
Gold >= 5
ACT

DelItem 沃玛剑 1
DelItem 沃玛号角 2
DelGold 5
AddItem 沃玛战刃 1
Msg 合成成功,沃玛战刃已入包
ELSE

Msg 材料或金币不足,合成取消
Return

GOM/GEE常用@前缀命令,材料批量检测可写@CheckItemEx 沃玛剑:1沃玛号角:2 金币:5,扣除写@TakeItem 沃玛剑:1 沃玛号角:2
金币:5,发放写@GiveItem 沃玛战刃 1。要加成功率就在扣除前跑@Random100,再用#IF RandomNum <= 80进成功分支,否则进失败分支;失败若只扣部分材料,把主材料放在失败分支用@GiveItem返还。

文件放置按引擎走。NPC脚本通常放Mir200\Envir\Market_Def,文件名和Merchant里NPC配置对应;普通任务类合成放QuestDiary子目录,拾取、登录、定时器触发放QFunction或相关系统脚本。物品名以StdItems/ItemDB为准,改完用DBCommander或引擎自带物品管理核对名称、ID、Stdmode、动画号。NPC脚本文本编码用ANSI,中文用GBK,避免UTF-8带签名导致#IF、#ACT不识别。

防刷和稳定性几个点必须写进脚本:

1. 先判背包空格再扣材料,CHECKBAGGAGE或CheckBagSize放#IF段,空格不足直接提示,不扣东西。
2. 概率合成若允许失败返料,先随机再扣;若允许失败全损,先扣再随机,但要在最前面用变量加锁,避免玩家连点同一帧多次触发。
3. 高价合成加操作日志,WriteLog记角色、材料、产出、时间,后期查异常直接翻日志。
4. 多配方NPC别用重复标签,@祖玛1、@祖玛2这种也会冲突,改成有业务含义的名字更好维护。
5. 货币判断和扣除用同一类型,金币用CHECKGOLD/TAKEGOLD,元宝用CHECKGAMEGOLD/GAMEGOLD - 数量,绑元宝按引擎命令换,别混写。
6. 自动合成加最小触发间隔,拾取事件里材料不够就退出,不要用死循环全包扫描。

排错按这个顺序:NPC没反应,先看Merchant是否加载脚本名、地图坐标是否能走到;点合成没扣材料,打印或SENDMSG把每个CHECKITEM单独拆开,缺哪个材料一目了然;扣了材料不发装备,查物品库有没有该装备名、Stdmode是否被客户端补丁屏蔽、背包是否实际有空位;发错装备查ID映射,很多版本屠龙、开天、裁决在不同库里ID不一样;概率永远成功或永远失败,查RANDOM范围与SMALL阈值,RANDOM 100配SMALL 60是60%,RANDOM 1000配SMALL 60只剩6%;改完脚本Hero用重载QM/QF,GOM用Reload脚本,Blue有的版本直接重读目录,不确定就重启M2再测。

等级、职业限制可插在#IF最前面。战士专属武器加CHECKJOB WARRIOR,法师用WIZARD,道士用TAOIST;等级限制用CHECKLEVEL 50表示不低于50级。多职业同NPC合成通用装备可不写职业,专武再写职业,避免玩家拿错材料合成后不能用。绑定装备如果在物品库设Bind字段,合成出来直接按库里绑定规则走,脚本无需额外命令;若要在合成时强制绑定,按引擎绑定命令处理,不同引擎函数名差异较大,改之前先在小号测试。

材料不足细分提示比一句“材料不足”好用:

IF

NOT CHECKITEM 乌木剑 1
ACT

SENDMSG 0 缺少乌木剑1把
BREAK
IF

NOT CHECKITEM 黑铁矿 1
ACT

SENDMSG 0 缺少黑铁矿1个
BREAK

这样玩家知道到底差哪样,不会反复点。多材料配方都按这个思路拆,三个材料就写三段NOT判断,虽然脚本长一点,但线上少很多客服问题。

合成大批量装备时,建议按“低级材料合中级、中级材料合高级”分NPC或分页。主NPC只放入门合成,高阶合成单独做祖玛、赤月、魔龙等页面,材料名、数量、金币、成功率列清楚。所有GIVE产出先在测试服用小号跑100次,记录成功次数,反推实际概率;脚本写60%不代表线上一定60%,还受随机数算法、同帧并发、命令执行顺序影响。确认概率、扣料、返料、日志都正常后再放到正式环境。