热血传奇GM必看:从MerChant.txt到market_def自定义NPC全流程实操

来源: 作者: 点击:
一、先锁定两个核心文件路径
标准服务端结构下,所有自定义NPC只动这两个位置:
1. NPC注册表:MirServer\Mir200\Envir\MerChant.txt(有的引擎写成Merchant.txt,字母大小写按你服务端实际文件来)
2. NPC脚本目录:MirServer\Mir200\Envir\Market_Def\ (脚本必须放这里,带地图号后缀)

顺手备份:把MerChant.txt复制一份改名MerChant_bak.txt,Market_Def文件夹整体复制一份叫Market_Def_bak,写崩了能回滚。

二、MerChant.txt里怎么写一行NPC
用记事本或Notepad++打开MerChant.txt,拉到文件末尾换行,按空格分隔写下面字段:
脚本名 地图号 X Y 显示名字 朝向 外观码 沙城标记 移动标记 移动间隔 税率 变色模式 变色间隔 固定颜色

最小可用写法(盟重土城加个“装备回收员”):
装备回收员 3 330 320 装备回收员 0 15 0 0 0 0 0 0

字段逐个拆:
• 装备回收员:脚本主名,后面Market_Def里文件必须叫“装备回收员-3.txt”

- 3:地图编号,0=比奇省,3=盟重土城,其他地图看MapInfo.txt
• 330 320:X/Y坐标,别压在墙、树、水池上,土城安全区常用330 320、353 337附近

• 装备回收员:玩家鼠标悬停看到的名字

- 0:朝向(0-7,0朝左下通用)
• 15:外观码,15=老兵,8=书店/普通商,73=传送员造型,自定义wil素材另算

• 后面连续0:是否沙城、是否游走、游走间隔、税率、变色模式、变色毫秒、固定色,纯静态NPC全0就行

想让NPC身体变色就在末尾加:1 2000 0 (1=名字+身体变色,2000毫秒,0不固定颜色)

三、Market_Def里建脚本文件
进Mir200\Envir\Market_Def\,新建文本文件,文件名严格按“MerChant里第一字段-地图号.txt”:
上面例子 → 装备回收员-3.txt

最基础对话脚本:
[@main]
SAY

欢迎使用装备回收服务,把祖玛以上装备拿来换元宝。\
<回收祖玛/@hszm>\
<回收赤月/@hscd>\
<关闭/@exit>

[@hszm]
if

checkitem 祖玛头盔 1
act

take 祖玛头盔 1
gamegold + 50
sendmsg 6 回收成功,获得50元宝!
elsesay

背包里没有祖玛头盔。
[@hscd]
if

checkitem 圣战戒指 1
act

take 圣战戒指 1
gamegold + 200
sendmsg 6 回收成功,获得200元宝!
elsesay

背包里没有圣战戒指。
[@exit]
say

慢走。

语法死规矩:
• [@main]是点击NPC默认进的标签,不能拼成[@Main](部分引擎区分大小写)

- 菜单行用尖括号 <显示字/@标签> 跳转
• #if条件 → #act执行 → #elsesay不满足时回话;多条件继续叠#if

• 常用命令:GIVE 物品 数量、TAKE 物品 数量、GAMEGOLD + 数值、MAPMOVE 地图号 X Y、SENDMSG 6 文字、CHECKITEM 物品 数量、CHECKJOB Warrior/Wizard/Taoist、CHANGEEXP + 数值

- 文件必须ANSI编码保存,UTF-8中文必乱码、脚本不读

四、带子目录的写法(大版本常用)
很多成品端Market_Def下不是平铺,而是按地图建了子目录,比如 Market_Def\盟重土城\ 、Market_Def\比奇省\ 。
MerChant.txt第一字段就要带路径:
盟重土城/装备回收员 3 330 320 装备回收员 0 15 0 0 0
对应脚本放:Market_Def\盟重土城\装备回收员-3.txt
平铺还是带目录,看你服务端原本NPC怎么写的,照着抄结构最稳。

五、让NPC在游戏里活过来(加载)
改完MerChant.txt和Market_Def后必须重载,不然客户端看不到:
• GM号(权限一般10)游戏内输入:@ReloadNpc 或 @loadnpc 或 @重读NPC,提示重新加载NPC成功,跑出地图再回来就能看见

- 不想用命令就进M2控制器 → 控制 → 重新加载 → 所有NPC(GOM/GEE/Hero通用)
• 还不行就直接关M2Server重启,最硬但最稳

六、完整实操例子:比奇新村加“新人福利使者”
1. MerChant.txt末尾加:
福利使者 0 330 268 新人福利使者 0 8 0 0 0
2. Market_Def新建:福利使者-0.txt
3. 脚本内容:
[@main]
SAY

欢迎来到本服,选职业领起步装:\
<战士/@war>\
<法师/@mage>\
<道士/@tao>\
<关闭/@exit>

[@war]
if

checkjob Warrior
act

give 屠龙 1
give 战神盔甲(男) 1
sendmsg 6 战士起步装已发放!
elsesay

你不是战士,别乱点。

[@mage]
if

checkjob Wizard
act

give 骨玉权杖 1
give 法神披风 1
sendmsg 6 法师起步装已发放!
elsesay

你不是法师,别乱点。

[@tao]
if

checkjob Taoist
act

give 逍遥扇 1
give 天尊道袍 1
sendmsg 6 道士起步装已发放!
elsesay

你不是道士,别乱点。

[@exit]
say

再见。
4. 游戏里@ReloadNpc,回比奇新村330 268,点“新人福利使者”按职业领装。

七、常见起不来的原因
• 脚本文件名不对:MerChant写“装备回收员”,文件存成“装备回收 -3.txt”或漏了“-3” → 不读

- 地图号错:MerChant写3,文件命名成装备回收员-0.txt → 绑定失败
• 坐标在障碍物上 → NPC刷在墙里点不到,用地图编辑器或@map核对

• 外观码超出引擎wil范围 → NPC显示空白方块,换标准码8/15/73先验证

- 编码存成UTF-8 → 中文全变问号,记事本另存为选ANSI
• MapInfo.txt里没这地图号 → 直接报初始化失败

自定义NPC本质就两件事:MerChant.txt告诉引擎“谁、在哪、长啥样”,Market_Def里的“-地图号.txt”告诉引擎“点了说什么、做什么”。两处名字、地图号对齐,编码用ANSI,重载生效,整套链路就通了。