当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

单机传奇架设后添加新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,末尾加一行。

通用格式:

脚本名地图号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都能写。
[顶部]