添加自定义NPC必须同步修改两个核心文件:Mir200\Envir\MerChant.txt注册表与Mir200\Envir\Market_Def\目录下的脚本文件,缺一不可。引擎通过这两个文件的映射关系在指定地图坐标生成交互实体。
一、MerChant.txt字段结构拆解
文件路径:D:\MirServer\Mir200\Envir\MerChant.txt
标准行格式(空格或制表符分隔):
文件名地图号XYNPC名称朝向外观沙城移动间隔税率变色变色间隔固定色
实例解析(盟重330:268坐标添加“装备大师”):
装备大师3330268装备大师080000000
•文件名:装备大师(对应Market_Def\装备大师-3.txt)
•地图号:3(盟重省,必须与MapInfo.txt中[3盟重省]的数字对应,填中文无效)
•XY:330268(地图坐标,需确保该点非障碍物)
•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种系统颜色)
带子目录写法(推荐,便于管理):
盟重省/装备大师3330268装备大师080000000
对应脚本路径: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
SENDMSG6恭喜!裁决之杖已强化为强攻裁决!
BREAK
#ELSESAY
条件不足!需要等级36且持有裁决之杖。\
[@upgrade]
#IF
CHECKGOLD>100000
CHECKITEM战神盔甲1
#ACT
TAKE金币100000
TAKE战神盔甲1
GIVE天魔神甲1
SENDMSG6升级成功!战神盔甲进化为天魔神甲!
BREAK
#ELSESAY
金币不足10万或缺少战神盔甲!\
[@exit]
#SAY
感谢惠顾,欢迎下次再来!\
#ACT
CLOSE
四、脚本核心指令解析
•[@段名]:脚本标签,@main为入口,@exit为退出,@buy/@sell为系统交易标签
•#SAY:显示文本内容,反斜杠\为换行符
•#IF:条件判断开始,支持多层嵌套
•#ACT:条件满足时执行的操作
•#ELSESAY:条件不满足时显示的内容
•CHECKLEVEL:检测等级
•CHECKITEM:检测背包物品
•CHECKGOLD:检测金币数量
•CHECKGAMEGOLD:检测元宝数量(GOM/GEE引擎)
•TAKE:从背包扣除物品/金币
•GIVE:给予物品
•SENDMSG6:发送系统提示(6为黄色字体)
•CLOSE:关闭对话框
五、交易类NPC脚本(卖装备)
[@main]
#SAY
<购买装备>/@buy\
<出售装备>/@sell\
<修理装备>/@repair\
<特殊修理>/@s_repair\
<离开>/@exit\
[@buy]
#SAY
选择要购买的装备:\
[goods]
屠龙50000000
嗜魂法杖50000000
逍遥扇50000000
圣战项链1000000
法神戒指1000000
天尊手镯1000000
金创药(大)5000
魔法药(大)5000
[goods]段格式:物品名单价库存(0为无限)
六、重载与生效
修改完成后需重载脚本:
1.M2Server控制台→查看→列表信息→重新加载→重新加载NPC脚本
2.或GM角色游戏内输入:@ReloadNpc或@loadnpc
3.重进当前地图即可看到新NPC
七、常见故障排查
1.NPC不显示:
•地图号错误(必须填数字,非地图名)
•坐标在障碍物上(换330268等安全点)
•脚本文件名错误(必须文件名-地图号.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(NM)>
•翎风引擎:支持CHECKNEWITEM检测新物品,GIVE支持绑定属性
十、脚本调试方法
1.开启M2日志:选项→参数设置→日志→脚本调试勾选
2.使用SENDMSG输出变量值:SENDMSG6变量值:<$STR(0)>
3.简化脚本:先写最小可用版本,逐步添加功能
4.分段测试:每个[@段]单独测试,确保逻辑正确
5.备份脚本:修改前复制原文件,异常时快速回滚
脚本文件修改后无需重启服务端,重载即可生效。复杂NPC建议分多个@段编写,逻辑清晰便于维护。物品名称必须与StdItems.DB完全一致,包括括号和空格。坐标选择需避开传送点、刷怪点,防止NPC被挤掉或遮挡。外观码建议选择常用NPC素材(8-20之间),避免客户端缺失贴图。
一、MerChant.txt字段结构拆解
文件路径:D:\MirServer\Mir200\Envir\MerChant.txt
标准行格式(空格或制表符分隔):
文件名地图号XYNPC名称朝向外观沙城移动间隔税率变色变色间隔固定色
实例解析(盟重330:268坐标添加“装备大师”):
装备大师3330268装备大师080000000
•文件名:装备大师(对应Market_Def\装备大师-3.txt)
•地图号:3(盟重省,必须与MapInfo.txt中[3盟重省]的数字对应,填中文无效)
•XY:330268(地图坐标,需确保该点非障碍物)
•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种系统颜色)
带子目录写法(推荐,便于管理):
盟重省/装备大师3330268装备大师080000000
对应脚本路径: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
SENDMSG6恭喜!裁决之杖已强化为强攻裁决!
BREAK
#ELSESAY
条件不足!需要等级36且持有裁决之杖。\
[@upgrade]
#IF
CHECKGOLD>100000
CHECKITEM战神盔甲1
#ACT
TAKE金币100000
TAKE战神盔甲1
GIVE天魔神甲1
SENDMSG6升级成功!战神盔甲进化为天魔神甲!
BREAK
#ELSESAY
金币不足10万或缺少战神盔甲!\
[@exit]
#SAY
感谢惠顾,欢迎下次再来!\
#ACT
CLOSE
四、脚本核心指令解析
•[@段名]:脚本标签,@main为入口,@exit为退出,@buy/@sell为系统交易标签
•#SAY:显示文本内容,反斜杠\为换行符
•#IF:条件判断开始,支持多层嵌套
•#ACT:条件满足时执行的操作
•#ELSESAY:条件不满足时显示的内容
•CHECKLEVEL:检测等级
•CHECKITEM:检测背包物品
•CHECKGOLD:检测金币数量
•CHECKGAMEGOLD:检测元宝数量(GOM/GEE引擎)
•TAKE:从背包扣除物品/金币
•GIVE:给予物品
•SENDMSG6:发送系统提示(6为黄色字体)
•CLOSE:关闭对话框
五、交易类NPC脚本(卖装备)
[@main]
#SAY
<购买装备>/@buy\
<出售装备>/@sell\
<修理装备>/@repair\
<特殊修理>/@s_repair\
<离开>/@exit\
[@buy]
#SAY
选择要购买的装备:\
[goods]
屠龙50000000
嗜魂法杖50000000
逍遥扇50000000
圣战项链1000000
法神戒指1000000
天尊手镯1000000
金创药(大)5000
魔法药(大)5000
[goods]段格式:物品名单价库存(0为无限)
六、重载与生效
修改完成后需重载脚本:
1.M2Server控制台→查看→列表信息→重新加载→重新加载NPC脚本
2.或GM角色游戏内输入:@ReloadNpc或@loadnpc
3.重进当前地图即可看到新NPC
七、常见故障排查
1.NPC不显示:
•地图号错误(必须填数字,非地图名)
•坐标在障碍物上(换330268等安全点)
•脚本文件名错误(必须文件名-地图号.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(NM)>
•翎风引擎:支持CHECKNEWITEM检测新物品,GIVE支持绑定属性
十、脚本调试方法
1.开启M2日志:选项→参数设置→日志→脚本调试勾选
2.使用SENDMSG输出变量值:SENDMSG6变量值:<$STR(0)>
3.简化脚本:先写最小可用版本,逐步添加功能
4.分段测试:每个[@段]单独测试,确保逻辑正确
5.备份脚本:修改前复制原文件,异常时快速回滚
脚本文件修改后无需重启服务端,重载即可生效。复杂NPC建议分多个@段编写,逻辑清晰便于维护。物品名称必须与StdItems.DB完全一致,包括括号和空格。坐标选择需避开传送点、刷怪点,防止NPC被挤掉或遮挡。外观码建议选择常用NPC素材(8-20之间),避免客户端缺失贴图。

