一、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,末尾加一行。
通用格式:
脚本名 地图号 X Y 显示名 方向 外观 城堡标记 是否移动
示例:
测试使者 0 330 270 测试使者 0 8 0 0
参数说明:
• 测试使者:脚本文件名前缀,后面Market_Def里的文件要对上
• 0:地图编号
• 330 270:坐标
• 测试使者:游戏里头顶显示的名字
• 0:面对方向,0上1右2下3左
• 8:外观编号,决定NPC长什么样
• 0:是否沙城归属
• 0:是否巡逻移动,写0站原地
外观编号不知道填多少,先填8、11、15这类常见老兵/商人外观,进游戏看人型对不对再改。
四、建脚本文件
到 Mir200\Envir\Market_Def 目录。
如果Merchant.txt里写的是:
测试使者 0 330 270 ...
那脚本文件命名必须是:
测试使者-0.txt
“-”后面跟地图号,格式固定。
建文件夹也行,比如 Market_Def\比奇\测试使者-0.txt,那Merchant.txt第一行就要写“比奇\测试使者”。新手建议先放Market_Def根目录,少踩路径坑。
五、最基础的NPC脚本写法
打开 测试使者-0.txt,写:
[@Main]
SAY
我是测试NPC。\
你要传送到盟重吗?\
传送到盟重\ \
[@ToMengZhong]
IF
ACT
MAPMOVE 3 333 333
SENDMSG 6 传送成功
BREAK
语法规则:
• [@Main] 是点NPC默认进的入口
• #SAY 后面写对话,\ 换行
• 尖括号加内容是可点按钮,@标签名 是跳转目标
• #IF 条件,#ACT 满足条件执行
• BREAK 结束这段脚本,防止往下穿透
保存编码必须 ANSI,用系统记事本容易存成UTF-8,中文会变乱码、脚本不加载。
六、带条件判断的NPC
比如花金币传送到某个地图:
[@Main]
SAY
传送需要1万金币\
花金币传送\ \
[@Go]
IF
CHECKGOLD 10000
ACT
TAKEGOLD 10000
MAPMOVE 3 333 333
SENDMSG 6 已花费金币传送
ELSEACT
SAY
金币不够。\
BREAK
常见判断命令:
• CHECKLEVEL 35 等级大于等于35
• CHECKITEM 金条 1 背包有金条
• CHECKGOLD 10000 金币足够
• CHECKGAMEGOLD 100 元宝足够(部分引擎用GAMEGOLD)
常见执行命令:
• GIVE 物品名 数量
• TAKE 物品名 数量
• TAKEGOLD 金币数
• GAMEGOLD + 100 加元宝
• MAPMOVE 地图号 X Y
• SENDMSG 颜色代码 提示文字
• SET [1] 1 设任务标记
• CLOSE 关对话框
七、做个领礼包NPC示例
Merchant.txt加:
礼包使者 0 335 270 礼包使者 0 11 0 0
Market_Def\礼包使者-0.txt:
[@Main]
SAY
欢迎来找礼包使者。\
领取新手礼包\ 离开\ \
[@LingQu]
IF
CHECK [1] 0
ACT
SET [1] 1
GIVE 金创药 5
GIVE 强效金创药 5
GIVE 木剑 1
GIVE 金币 1000
SENDMSG 6 领取成功
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刷到地图外,走到那也看不见。
先填330 270这种中间值。
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末行:
回收使者 0 340 270 回收使者 0 8 0 0
Market_Def\回收使者-0.txt:
[@Main]
SAY
武器回收员。\
回收一把乌木剑换100金币\ \
[@HuiShou]
IF
CHECKITEM 乌木剑 1
ACT
TAKE 乌木剑 1
GOLD + 100
SENDMSG 6 回收成功,获得100金币
ELSEACT
SAY
背包里没有乌木剑。\
BREAK
进游戏到比奇0地图340 270,点NPC就能用。
添加NPC本质就两件事:Merchant.txt让人刷出来,Market_Def脚本让人能对话执行。命令不用背太多,先会MAPMOVE、GIVE、TAKE、CHECKGOLD、SENDMSG,绝大部分单机功能NPC都能写。
单机传奇架设后添加新NPC的完整步骤与脚本写法
来源:
作者:
点击:

