一、NPC是怎么出来的
传奇里一个NPC要正常用,必须两处都配:
1.Merchant.txt里登记:让NPC出现在某张地图的某个坐标
2.Market_Def里建脚本文件:决定点开后说什么、能干什么
只改Merchant.txt,游戏里能看到人但点了没反应。
只建脚本文件,NPC根本不会刷出来。
核心目录都在服务端:
Mir200\Envir\Merchant.txt
Mir200\Envir\Market_Def\
二、先定NPC基础信息
动手前先想好四个东西:
•放哪张地图(地图编号)
•X、Y坐标
•显示名字
•外观编号
地图编号对照常见:
0=比奇省
3=盟重省
具体看你服务端MapInfo.txt里怎么写。
游戏里站着不动,按F11或开坐标显示,就能看到当前地图号和XY,照着填最准。
三、改Merchant.txt添加一行
用Notepad++打开Mir200\Envir\Merchant.txt,末尾加一行。
通用格式:
脚本名地图号XY显示名方向外观城堡标记是否移动
示例:
测试使者0330270测试使者0800
参数说明:
•测试使者:脚本文件名前缀,后面Market_Def里的文件要对上
•0:地图编号
•330270:坐标
•测试使者:游戏里头顶显示的名字
•0:面对方向,0上1右2下3左
•8:外观编号,决定NPC长什么样
•0:是否沙城归属
•0:是否巡逻移动,写0站原地
外观编号不知道填多少,先填8、11、15这类常见老兵/商人外观,进游戏看人型对不对再改。
四、建脚本文件
到Mir200\Envir\Market_Def目录。
如果Merchant.txt里写的是:
测试使者0330270...
那脚本文件命名必须是:
测试使者-0.txt
“-”后面跟地图号,格式固定。
建文件夹也行,比如Market_Def\比奇\测试使者-0.txt,那Merchant.txt第一行就要写“比奇\测试使者”。新手建议先放Market_Def根目录,少踩路径坑。
五、最基础的NPC脚本写法
打开测试使者-0.txt,写:
[@Main]
SAY
我是测试NPC。\
你要传送到盟重吗?\
传送到盟重\\
[@ToMengZhong]
IF
ACT
MAPMOVE3333333
SENDMSG6传送成功
BREAK
语法规则:
•[@Main]是点NPC默认进的入口
•#SAY后面写对话,\换行
•尖括号加内容是可点按钮,@标签名是跳转目标
•#IF条件,#ACT满足条件执行
•BREAK结束这段脚本,防止往下穿透
保存编码必须ANSI,用系统记事本容易存成UTF-8,中文会变乱码、脚本不加载。
六、带条件判断的NPC
比如花金币传送到某个地图:
[@Main]
SAY
传送需要1万金币\
花金币传送\\
[@Go]
IF
CHECKGOLD10000
ACT
TAKEGOLD10000
MAPMOVE3333333
SENDMSG6已花费金币传送
ELSEACT
SAY
金币不够。\
BREAK
常见判断命令:
•CHECKLEVEL35等级大于等于35
•CHECKITEM金条1背包有金条
•CHECKGOLD10000金币足够
•CHECKGAMEGOLD100元宝足够(部分引擎用GAMEGOLD)
常见执行命令:
•GIVE物品名数量
•TAKE物品名数量
•TAKEGOLD金币数
•GAMEGOLD+100加元宝
•MAPMOVE地图号XY
•SENDMSG颜色代码提示文字
•SET[1]1设任务标记
•CLOSE关对话框
七、做个领礼包NPC示例
Merchant.txt加:
礼包使者0335270礼包使者01100
Market_Def\礼包使者-0.txt:
[@Main]
SAY
欢迎来找礼包使者。\
领取新手礼包\离开\\
[@LingQu]
IF
CHECK[1]0
ACT
SET[1]1
GIVE金创药5
GIVE强效金创药5
GIVE木剑1
GIVE金币1000
SENDMSG6领取成功
ELSEACT
SAY
你已经领过了。\
BREAK
[@Exit]
IF
ACT
CLOSE
CHECK[1]0意思是任务标记1等于0,没领过。
领完SET[1]1,再点就走ELSEACT。
想每个角色只能领一次,这种标记存人物变量就行;具体变量写法看引擎版本,HERO和GOM略有差别。
八、生效方式
改完别傻等,两种办法:
方法1:重读NPC
M2控制台→控制→重新加载→交易NPC/所有NPC
或者游戏里GM命令@重读商人
方法2:直接重启M2
改了Merchant.txt坐标、外观、地图号,建议直接重启M2最稳。
只改了脚本内容,重读商人就够了。
九、NPC不显示排查
按这个顺序查:
1.Merchant.txt里那行格式对不对
参数数量少了、多了都会整行不读。
2.脚本文件名对不对
Merchant.txt写「测试使者」,文件就必须叫「测试使者-0.txt」
地图号也要一致,写在地图3就得是-3.txt
3.坐标是不是出界
XY填太大,NPC刷到地图外,走到那也看不见。
先填330270这种中间值。
4.编码是不是ANSI
脚本文件存成UTF-8会乱码,引擎解析失败,点了没反应。
5.有没有重读NPC
改完不重载,游戏里还是旧配置。
6.外观编号乱填
外观错只会变样子,一般不会导致人不显示;但填成字母或超范围可能整行失效。
7.Market_Def路径带中文文件夹
部分老引擎不认深层中文目录,先放根目录试。
十、NPC显示了但点不开
通常是脚本语法断了:
•[@Main]没写
•#SAY拼错成#Say或#SAY\
•按钮后面@标签,脚本里没这个[@标签]
•用了引擎不支持的命令
•引号、空格混用
看M2控制台,脚本报错会刷文件名和行号,照着改。
十一、加交易NPC(卖东西)
普通买卖NPC不用手写买卖逻辑,Merchant.txt里把NPC设成商人类型,脚本里写:
[@Main]
SAY
欢迎光临。\
买东西\卖东西\\
[@Buy]
IF
ACT
BUY
[@Sell]
IF
ACT
SELL
具体BUY/SELL支持不支持看引擎;GOM、HERO一般直接认,BLUE有些要配商品列表文件。
十二、加自定义外观(可选)
不想用系统自带老兵铁匠样子,可以自己挂外观:
•外观编号从10001开始填(部分引擎规则)
•用WIL编辑器把图片塞进客户端Data
•登录器重新生成让客户端拿到补丁
•Merchant.txt外观位填10001、10002……
单机自己玩不配补丁也行,外观会显示默认人型,不影响功能。
十三、新手最稳操作流程
1.复制Merchant.txt里一个现成NPC行
2.改名字、地图、坐标,外观先填8
3.Market_Def里建「名字-地图号.txt」
4.脚本先写最简[@Main]+#SAY+一个按钮
5.进游戏重读NPC,确认能点开
6.再往脚本里加MAPMOVE、GIVE、条件判断
7.每一步改完重读,别一次堆一堆命令
这样哪句错了一眼能看出来。
十四、完整最小示例
Merchant.txt末行:
回收使者0340270回收使者0800
Market_Def\回收使者-0.txt:
[@Main]
SAY
武器回收员。\
回收一把乌木剑换100金币\\
[@HuiShou]
IF
CHECKITEM乌木剑1
ACT
TAKE乌木剑1
GOLD+100
SENDMSG6回收成功,获得100金币
ELSEACT
SAY
背包里没有乌木剑。\
BREAK
进游戏到比奇0地图340270,点NPC就能用。
添加NPC本质就两件事:Merchant.txt让人刷出来,Market_Def脚本让人能对话执行。命令不用背太多,先会MAPMOVE、GIVE、TAKE、CHECKGOLD、SENDMSG,绝大部分单机功能NPC都能写。
传奇里一个NPC要正常用,必须两处都配:
1.Merchant.txt里登记:让NPC出现在某张地图的某个坐标
2.Market_Def里建脚本文件:决定点开后说什么、能干什么
只改Merchant.txt,游戏里能看到人但点了没反应。
只建脚本文件,NPC根本不会刷出来。
核心目录都在服务端:
Mir200\Envir\Merchant.txt
Mir200\Envir\Market_Def\
二、先定NPC基础信息
动手前先想好四个东西:
•放哪张地图(地图编号)
•X、Y坐标
•显示名字
•外观编号
地图编号对照常见:
0=比奇省
3=盟重省
具体看你服务端MapInfo.txt里怎么写。
游戏里站着不动,按F11或开坐标显示,就能看到当前地图号和XY,照着填最准。
三、改Merchant.txt添加一行
用Notepad++打开Mir200\Envir\Merchant.txt,末尾加一行。
通用格式:
脚本名地图号XY显示名方向外观城堡标记是否移动
示例:
测试使者0330270测试使者0800
参数说明:
•测试使者:脚本文件名前缀,后面Market_Def里的文件要对上
•0:地图编号
•330270:坐标
•测试使者:游戏里头顶显示的名字
•0:面对方向,0上1右2下3左
•8:外观编号,决定NPC长什么样
•0:是否沙城归属
•0:是否巡逻移动,写0站原地
外观编号不知道填多少,先填8、11、15这类常见老兵/商人外观,进游戏看人型对不对再改。
四、建脚本文件
到Mir200\Envir\Market_Def目录。
如果Merchant.txt里写的是:
测试使者0330270...
那脚本文件命名必须是:
测试使者-0.txt
“-”后面跟地图号,格式固定。
建文件夹也行,比如Market_Def\比奇\测试使者-0.txt,那Merchant.txt第一行就要写“比奇\测试使者”。新手建议先放Market_Def根目录,少踩路径坑。
五、最基础的NPC脚本写法
打开测试使者-0.txt,写:
[@Main]
SAY
我是测试NPC。\
你要传送到盟重吗?\
传送到盟重\\
[@ToMengZhong]
IF
ACT
MAPMOVE3333333
SENDMSG6传送成功
BREAK
语法规则:
•[@Main]是点NPC默认进的入口
•#SAY后面写对话,\换行
•尖括号加内容是可点按钮,@标签名是跳转目标
•#IF条件,#ACT满足条件执行
•BREAK结束这段脚本,防止往下穿透
保存编码必须ANSI,用系统记事本容易存成UTF-8,中文会变乱码、脚本不加载。
六、带条件判断的NPC
比如花金币传送到某个地图:
[@Main]
SAY
传送需要1万金币\
花金币传送\\
[@Go]
IF
CHECKGOLD10000
ACT
TAKEGOLD10000
MAPMOVE3333333
SENDMSG6已花费金币传送
ELSEACT
SAY
金币不够。\
BREAK
常见判断命令:
•CHECKLEVEL35等级大于等于35
•CHECKITEM金条1背包有金条
•CHECKGOLD10000金币足够
•CHECKGAMEGOLD100元宝足够(部分引擎用GAMEGOLD)
常见执行命令:
•GIVE物品名数量
•TAKE物品名数量
•TAKEGOLD金币数
•GAMEGOLD+100加元宝
•MAPMOVE地图号XY
•SENDMSG颜色代码提示文字
•SET[1]1设任务标记
•CLOSE关对话框
七、做个领礼包NPC示例
Merchant.txt加:
礼包使者0335270礼包使者01100
Market_Def\礼包使者-0.txt:
[@Main]
SAY
欢迎来找礼包使者。\
领取新手礼包\离开\\
[@LingQu]
IF
CHECK[1]0
ACT
SET[1]1
GIVE金创药5
GIVE强效金创药5
GIVE木剑1
GIVE金币1000
SENDMSG6领取成功
ELSEACT
SAY
你已经领过了。\
BREAK
[@Exit]
IF
ACT
CLOSE
CHECK[1]0意思是任务标记1等于0,没领过。
领完SET[1]1,再点就走ELSEACT。
想每个角色只能领一次,这种标记存人物变量就行;具体变量写法看引擎版本,HERO和GOM略有差别。
八、生效方式
改完别傻等,两种办法:
方法1:重读NPC
M2控制台→控制→重新加载→交易NPC/所有NPC
或者游戏里GM命令@重读商人
方法2:直接重启M2
改了Merchant.txt坐标、外观、地图号,建议直接重启M2最稳。
只改了脚本内容,重读商人就够了。
九、NPC不显示排查
按这个顺序查:
1.Merchant.txt里那行格式对不对
参数数量少了、多了都会整行不读。
2.脚本文件名对不对
Merchant.txt写「测试使者」,文件就必须叫「测试使者-0.txt」
地图号也要一致,写在地图3就得是-3.txt
3.坐标是不是出界
XY填太大,NPC刷到地图外,走到那也看不见。
先填330270这种中间值。
4.编码是不是ANSI
脚本文件存成UTF-8会乱码,引擎解析失败,点了没反应。
5.有没有重读NPC
改完不重载,游戏里还是旧配置。
6.外观编号乱填
外观错只会变样子,一般不会导致人不显示;但填成字母或超范围可能整行失效。
7.Market_Def路径带中文文件夹
部分老引擎不认深层中文目录,先放根目录试。
十、NPC显示了但点不开
通常是脚本语法断了:
•[@Main]没写
•#SAY拼错成#Say或#SAY\
•按钮后面@标签,脚本里没这个[@标签]
•用了引擎不支持的命令
•引号、空格混用
看M2控制台,脚本报错会刷文件名和行号,照着改。
十一、加交易NPC(卖东西)
普通买卖NPC不用手写买卖逻辑,Merchant.txt里把NPC设成商人类型,脚本里写:
[@Main]
SAY
欢迎光临。\
买东西\卖东西\\
[@Buy]
IF
ACT
BUY
[@Sell]
IF
ACT
SELL
具体BUY/SELL支持不支持看引擎;GOM、HERO一般直接认,BLUE有些要配商品列表文件。
十二、加自定义外观(可选)
不想用系统自带老兵铁匠样子,可以自己挂外观:
•外观编号从10001开始填(部分引擎规则)
•用WIL编辑器把图片塞进客户端Data
•登录器重新生成让客户端拿到补丁
•Merchant.txt外观位填10001、10002……
单机自己玩不配补丁也行,外观会显示默认人型,不影响功能。
十三、新手最稳操作流程
1.复制Merchant.txt里一个现成NPC行
2.改名字、地图、坐标,外观先填8
3.Market_Def里建「名字-地图号.txt」
4.脚本先写最简[@Main]+#SAY+一个按钮
5.进游戏重读NPC,确认能点开
6.再往脚本里加MAPMOVE、GIVE、条件判断
7.每一步改完重读,别一次堆一堆命令
这样哪句错了一眼能看出来。
十四、完整最小示例
Merchant.txt末行:
回收使者0340270回收使者0800
Market_Def\回收使者-0.txt:
[@Main]
SAY
武器回收员。\
回收一把乌木剑换100金币\\
[@HuiShou]
IF
CHECKITEM乌木剑1
ACT
TAKE乌木剑1
GOLD+100
SENDMSG6回收成功,获得100金币
ELSEACT
SAY
背包里没有乌木剑。\
BREAK
进游戏到比奇0地图340270,点NPC就能用。
添加NPC本质就两件事:Merchant.txt让人刷出来,Market_Def脚本让人能对话执行。命令不用背太多,先会MAPMOVE、GIVE、TAKE、CHECKGOLD、SENDMSG,绝大部分单机功能NPC都能写。

