单机传奇架设后添加新NPC的完整步骤与脚本写法

来源: 作者: 点击:
一、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都能写。