一、先锁定两个核心文件路径
标准服务端结构下,所有自定义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,拉到文件末尾换行,按空格分隔写下面字段:
脚本名地图号XY显示名字朝向外观码沙城标记移动标记移动间隔税率变色模式变色间隔固定颜色
最小可用写法(盟重土城加个“装备回收员”):
装备回收员3330320装备回收员015000000
字段逐个拆:
•装备回收员:脚本主名,后面Market_Def里文件必须叫“装备回收员-3.txt”
-3:地图编号,0=比奇省,3=盟重土城,其他地图看MapInfo.txt
•330320:X/Y坐标,别压在墙、树、水池上,土城安全区常用330320、353337附近
•装备回收员:玩家鼠标悬停看到的名字
-0:朝向(0-7,0朝左下通用)
•15:外观码,15=老兵,8=书店/普通商,73=传送员造型,自定义wil素材另算
•后面连续0:是否沙城、是否游走、游走间隔、税率、变色模式、变色毫秒、固定色,纯静态NPC全0就行
想让NPC身体变色就在末尾加:120000(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
sendmsg6回收成功,获得50元宝!
elsesay
背包里没有祖玛头盔。
[@hscd]
if
checkitem圣战戒指1
act
take圣战戒指1
gamegold+200
sendmsg6回收成功,获得200元宝!
elsesay
背包里没有圣战戒指。
[@exit]
say
慢走。
语法死规矩:
•[@main]是点击NPC默认进的标签,不能拼成[@Main](部分引擎区分大小写)
-菜单行用尖括号<显示字/@标签>跳转
•#if条件→#act执行→#elsesay不满足时回话;多条件继续叠#if
•常用命令:GIVE物品数量、TAKE物品数量、GAMEGOLD+数值、MAPMOVE地图号XY、SENDMSG6文字、CHECKITEM物品数量、CHECKJOBWarrior/Wizard/Taoist、CHANGEEXP+数值
-文件必须ANSI编码保存,UTF-8中文必乱码、脚本不读
四、带子目录的写法(大版本常用)
很多成品端Market_Def下不是平铺,而是按地图建了子目录,比如Market_Def\盟重土城\、Market_Def\比奇省\。
MerChant.txt第一字段就要带路径:
盟重土城/装备回收员3330320装备回收员015000
对应脚本放: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末尾加:
福利使者0330268新人福利使者08000
2.Market_Def新建:福利使者-0.txt
3.脚本内容:
[@main]
SAY
欢迎来到本服,选职业领起步装:\
<战士/@war>\
<法师/@mage>\
<道士/@tao>\
<关闭/@exit>
[@war]
if
checkjobWarrior
act
give屠龙1
give战神盔甲(男)1
sendmsg6战士起步装已发放!
elsesay
你不是战士,别乱点。
[@mage]
if
checkjobWizard
act
give骨玉权杖1
give法神披风1
sendmsg6法师起步装已发放!
elsesay
你不是法师,别乱点。
[@tao]
if
checkjobTaoist
act
give逍遥扇1
give天尊道袍1
sendmsg6道士起步装已发放!
elsesay
你不是道士,别乱点。
[@exit]
say
再见。
4.游戏里@ReloadNpc,回比奇新村330268,点“新人福利使者”按职业领装。
七、常见起不来的原因
•脚本文件名不对: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,重载生效,整套链路就通了。
标准服务端结构下,所有自定义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,拉到文件末尾换行,按空格分隔写下面字段:
脚本名地图号XY显示名字朝向外观码沙城标记移动标记移动间隔税率变色模式变色间隔固定颜色
最小可用写法(盟重土城加个“装备回收员”):
装备回收员3330320装备回收员015000000
字段逐个拆:
•装备回收员:脚本主名,后面Market_Def里文件必须叫“装备回收员-3.txt”
-3:地图编号,0=比奇省,3=盟重土城,其他地图看MapInfo.txt
•330320:X/Y坐标,别压在墙、树、水池上,土城安全区常用330320、353337附近
•装备回收员:玩家鼠标悬停看到的名字
-0:朝向(0-7,0朝左下通用)
•15:外观码,15=老兵,8=书店/普通商,73=传送员造型,自定义wil素材另算
•后面连续0:是否沙城、是否游走、游走间隔、税率、变色模式、变色毫秒、固定色,纯静态NPC全0就行
想让NPC身体变色就在末尾加:120000(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
sendmsg6回收成功,获得50元宝!
elsesay
背包里没有祖玛头盔。
[@hscd]
if
checkitem圣战戒指1
act
take圣战戒指1
gamegold+200
sendmsg6回收成功,获得200元宝!
elsesay
背包里没有圣战戒指。
[@exit]
say
慢走。
语法死规矩:
•[@main]是点击NPC默认进的标签,不能拼成[@Main](部分引擎区分大小写)
-菜单行用尖括号<显示字/@标签>跳转
•#if条件→#act执行→#elsesay不满足时回话;多条件继续叠#if
•常用命令:GIVE物品数量、TAKE物品数量、GAMEGOLD+数值、MAPMOVE地图号XY、SENDMSG6文字、CHECKITEM物品数量、CHECKJOBWarrior/Wizard/Taoist、CHANGEEXP+数值
-文件必须ANSI编码保存,UTF-8中文必乱码、脚本不读
四、带子目录的写法(大版本常用)
很多成品端Market_Def下不是平铺,而是按地图建了子目录,比如Market_Def\盟重土城\、Market_Def\比奇省\。
MerChant.txt第一字段就要带路径:
盟重土城/装备回收员3330320装备回收员015000
对应脚本放: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末尾加:
福利使者0330268新人福利使者08000
2.Market_Def新建:福利使者-0.txt
3.脚本内容:
[@main]
SAY
欢迎来到本服,选职业领起步装:\
<战士/@war>\
<法师/@mage>\
<道士/@tao>\
<关闭/@exit>
[@war]
if
checkjobWarrior
act
give屠龙1
give战神盔甲(男)1
sendmsg6战士起步装已发放!
elsesay
你不是战士,别乱点。
[@mage]
if
checkjobWizard
act
give骨玉权杖1
give法神披风1
sendmsg6法师起步装已发放!
elsesay
你不是法师,别乱点。
[@tao]
if
checkjobTaoist
act
give逍遥扇1
give天尊道袍1
sendmsg6道士起步装已发放!
elsesay
你不是道士,别乱点。
[@exit]
say
再见。
4.游戏里@ReloadNpc,回比奇新村330268,点“新人福利使者”按职业领装。
七、常见起不来的原因
•脚本文件名不对: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,重载生效,整套链路就通了。

