热血传奇GM自定义NPC添加全流程:MerChant.txt注册到Market_Def脚本编写实录

来源: 作者: 点击:
添加自定义NPC必须同步修改两个核心文件:Mir200\Envir\MerChant.txt 注册表与 Mir200\Envir\Market_Def\ 目录下的脚本文件,缺一不可。引擎通过这两个文件的映射关系在指定地图坐标生成交互实体。

一、MerChant.txt 字段结构拆解

文件路径:D:\MirServer\Mir200\Envir\MerChant.txt
标准行格式(空格或制表符分隔):

文件名 地图号 X Y NPC名称 朝向 外观 沙城 移动 间隔 税率 变色 变色间隔 固定色

实例解析(盟重330:268坐标添加“装备大师”):

装备大师 3 330 268 装备大师 0 8 0 0 0 0 0 0 0

• 文件名:装备大师(对应Market_Def\装备大师-3.txt)

• 地图号:3(盟重省,必须与MapInfo.txt中[3 盟重省]的数字对应,填中文无效)

• X Y:330 268(地图坐标,需确保该点非障碍物)

• NPC名称:装备大师(头顶显示名)

• 朝向:0(0-7对应上右下左等8个方向)

• 外观:8(NPC形象码,对应Data\npc.wil素材索引,计算公式:(图片序号÷60)-1,如480号图对应外观7)

• 沙城:0(0普通NPC,1沙巴克关联NPC)

• 移动:0(0静止,1允许随机移动)

• 间隔:0(移动间隔秒数,不移动则填0)

• 税率:0(买卖税率,0-100,仅交易类NPC生效)

• 变色:0(0不变色,1-3对应闪烁模式)

• 变色间隔:0(毫秒,变色切换速度)

• 固定色:0(0默认,1-7对应8种系统颜色)

带子目录写法(推荐,便于管理):

盟重省/装备大师 3 330 268 装备大师 0 8 0 0 0 0 0 0 0

对应脚本路径:Market_Def\盟重省\装备大师-3.txt

二、Market_Def脚本文件创建

命名规则强制为:MerChant.txt中的文件名-地图号.txt
上例对应:D:\MirServer\Mir200\Envir\Market_Def\装备大师-3.txt
编码要求:ANSI(GBK),UTF-8编码会导致中文乱码,M2日志报脚本解析错误。

三、脚本基础结构编写

最小可用脚本模板:

[@main]
#SAY
欢迎光临装备大师工作室!\
请选择你需要的服务:\
\<装备强化>/@strong\
\<装备升级>/@upgrade\
\<离开>/@exit\

[@strong]
#IF
CHECKLEVEL > 35
CHECKITEM 裁决之杖 1
#ACT
TAKE 裁决之杖 1
GIVE 强攻裁决 1
SENDMSG 6 恭喜!裁决之杖已强化为强攻裁决!
BREAK
#ELSESAY
条件不足!需要等级36且持有裁决之杖。\

[@upgrade]
#IF
CHECKGOLD > 100000
CHECKITEM 战神盔甲 1
#ACT
TAKE 金币 100000
TAKE 战神盔甲 1
GIVE 天魔神甲 1
SENDMSG 6 升级成功!战神盔甲进化为天魔神甲!
BREAK
#ELSESAY
金币不足10万或缺少战神盔甲!\

[@exit]
#SAY
感谢惠顾,欢迎下次再来!\
#ACT
CLOSE


四、脚本核心指令解析

• [@段名]:脚本标签,@main为入口,@exit为退出,@buy/@sell为系统交易标签

• #SAY:显示文本内容,反斜杠\为换行符

• #IF:条件判断开始,支持多层嵌套

• #ACT:条件满足时执行的操作

• #ELSESAY:条件不满足时显示的内容

• CHECKLEVEL:检测等级

• CHECKITEM:检测背包物品

• CHECKGOLD:检测金币数量

• CHECKGAMEGOLD:检测元宝数量(GOM/GEE引擎)

• TAKE:从背包扣除物品/金币

• GIVE:给予物品

• SENDMSG 6:发送系统提示(6为黄色字体)

• CLOSE:关闭对话框

五、交易类NPC脚本(卖装备)


[@main]
#SAY
<购买装备>/@buy\
<出售装备>/@sell\
<修理装备>/@repair\
<特殊修理>/@s_repair\
<离开>/@exit\

[@buy]
#SAY
选择要购买的装备:\

[goods]
屠龙 5000000 0
嗜魂法杖 5000000 0
逍遥扇 5000000 0
圣战项链 100000 0
法神戒指 100000 0
天尊手镯 100000 0
金创药(大) 500 0
魔法药(大) 500 0

[goods]段格式:物品名 单价 库存(0为无限)

六、重载与生效

修改完成后需重载脚本:
1. M2Server控制台 → 查看 → 列表信息 → 重新加载 → 重新加载NPC脚本
2. 或GM角色游戏内输入:@ReloadNpc 或 @loadnpc
3. 重进当前地图即可看到新NPC

七、常见故障排查

1. NPC不显示:
• 地图号错误(必须填数字,非地图名)

• 坐标在障碍物上(换330 268等安全点)

• 脚本文件名错误(必须文件名-地图号.txt)

• 脚本编码非ANSI(用记事本另存为ANSI)

2. NPC显示但无法对话:
• 脚本无[@main]标签

• 脚本语法错误(M2日志有报错)

• 物品名与StdItems.DB不匹配

3. NPC外观异常:
• 外观码超出npc.wil范围

• 客户端缺少对应NPC补丁

4. 交易窗口打不开:
• 未使用@buy/@sell系统标签

• [goods]段物品名错误

• 税率设置异常

八、高级脚本技巧

• 变量传递:用<$STR(N)>存储玩家输入,<INPUTSTRING(提示,变量,最小,最大)>获取输入

• 多条件判断:CHECKITEM+CHECKLEVEL+CHECKGOLD组合验证

• 定时功能:DAY/HOUR/MINUTE检测时间

• 地图检测:CHECKMEMAP判断玩家所在地图

• 职业检测:CHECKJOB区分战法道

• 性别检测:CHECKSEX区分男女

• 行会检测:CHECKGUILD验证行会成员

• PK值检测:CHECKPKPOINT限制红名操作

九、引擎差异注意

• Hero引擎:变量槽位0-99,物品库为DBC2000的StdItems.db

• GOM引擎:变量槽位0-499,支持CHECKGAMEGOLD元宝检测

• GEE引擎:支持@trading原生交易标签,变量支持数组<$STRARR(N,M)>

• 翎风引擎:支持CHECKNEWITEM检测新物品,GIVE支持绑定属性

十、脚本调试方法

1. 开启M2日志:选项→参数设置→日志→脚本调试勾选
2. 使用SENDMSG输出变量值:SENDMSG 6 变量值:<$STR(0)>
3. 简化脚本:先写最小可用版本,逐步添加功能
4. 分段测试:每个[@段]单独测试,确保逻辑正确
5. 备份脚本:修改前复制原文件,异常时快速回滚

脚本文件修改后无需重启服务端,重载即可生效。复杂NPC建议分多个@段编写,逻辑清晰便于维护。物品名称必须与StdItems.DB完全一致,包括括号和空格。坐标选择需避开传送点、刷怪点,防止NPC被挤掉或遮挡。外观码建议选择常用NPC素材(8-20之间),避免客户端缺失贴图。