一、先锁定两个核心文件路径
标准服务端结构下,所有自定义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,重载生效,整套链路就通了。
热血传奇GM必看:从MerChant.txt到market_def自定义NPC全流程实操
来源:
作者:
点击:

