传奇脚本(主要指NPC对话脚本、任务脚本、触发脚本)是纯文本.txt文件,用记事本或Notepad++编写,按引擎规范放在服务端对应目录即可生效。以最常用的Hero引擎/GOM引擎为例:
脚本文件分类与存放路径
服务端通常在D:\MirServer\Mir200\Envir\
•NPC功能脚本:Market_Def\目录,每个可对话NPC一个.txt文件,文件名须与Merchant.txt注册名对应。
-任务脚本:MapQuest_def\目录(QuestDiary子目录按任务分类),用于定时任务、杀怪任务。
•登录/全局触发脚本:MapQuest_def\QManage.txt(上线触发)、QFunction-0.txt(物品使用/死亡/升级等全局事件)。
基础语法结构
脚本以标签[@标签名]分段,[@main]是NPC默认入口。核心关键字:
•[@标签]—程序跳转锚点,点击选项或GOTO跳转至此。
•#IF—条件判断开始,后跟检测命令(等级、金币、物品、职业等)。
-#ACT—#IF条件满足时执行的动作(给物品、扣金币、传送等)。
•#ELSEACT/#ELSESAY—条件不满足时执行或显示内容。
•#SAY—显示对玩家说的话,\换行,<选项@标签>生成可点击链接。
-BREAK—终止当前段执行,防止穿透到下一段。
常用检测命令:CheckLevel数字(等级)、CheckGold数字(金币)、CheckItem物品名数量(背包有某物)、CheckJobWarrior/Wizard/Taoist(检测职业)、IsOnMap地图编号(在某地图)。
常用动作命令:GIVE物品名数量(给)、TAKE物品名数量(扣)、TAKEMONEY数字(扣金币)、MAPMOVE地图号XY(传送到坐标)、SENDMSG6文字(系统提示)、SETHUMANVAR变量值(设变量)。
注册NPC(Merchant.txt)
在Envir\Merchant.txt添加一行注册NPC:
NPC显示名地图号XYNPC名称(与脚本文件名前缀一致)标志外观码其他参数
例:在新手村(地图0)坐标330268放一个名为"福利使者"的NPC,脚本文件叫"福利使者-0.txt"
福利使者0330268福利使者-00880000
标志填0为普通对话NPC,外观码对应NPC模型ID。改完保存,服务端控制台输@reloadnpc刷新或重启引擎。
实战:新手领装备NPC脚本示例
在Market_Def\新建"福利使者-0.txt",内容:
[@main]
#SAY
欢迎来到服务器!选择你的职业领取起步装备:\
\
<战士领屠龙@warrior>\
<法师领骨玉@mage>\
<道士领逍遥扇@taoist>\
<离开@exit>
[@warrior]
#IF
CHECKJOBWarrior
#ACT
GIVE屠龙1
GIVE战神盔甲(男)1
SENDMSG6战士装备已发放!
BREAK
#ELSEACT
SENDMSG6只有战士才能领这套!
[@mage]
#IF
CHECKJOBWizard
#ACT
GIVE骨玉权杖1
GIVE法神披风1
SENDMSG6法师装备已发放!
BREAK
[@taoist]
#IF
CHECKJOBTaoist
#ACT
GIVE逍遥扇1
GIVE天尊道袍(男)1
SENDMSG6道士装备已发放!
BREAK
保存时注意编码选ANSI避免中文乱码,文件名与Merchant.txt中注册的一致。
任务脚本(杀怪交任务)简例
在MapQuest.txt登记任务号,在QuestDiary\某分类\任务名.txt写:
[@杀鹿任务]
#IF
CheckItem鹿肉1
#ACT
TAKE鹿肉1
GIVE金币10000
GIVE沃玛戒指1
SENDMSG6任务完成,奖励已发!
BREAK
#ELSESAY
你还没打到鹿肉,去比奇外围杀鹿吧。
配合MonItems数据库让鹿掉鹿肉即可形成完整循环。
新手注意
•所有脚本文件必须ANSI编码保存,UTF-8会导致中文显示乱码或NPC不读脚本。
•标签名区分大小写,[@main]和[@Main]在某些引擎会被视为不同。
-修改脚本后需@reloadnpc或重启M2方可生效。
•复杂功能(变量、计时器、泡点、装备回收)在基础结构上叠加#IFCHECK[变量]、INCU01、SetOnTimer等命令实现。
掌握以上结构后可以照葫芦画瓢改现成脚本,大部分版本包里自带大量现成NPC脚本可参考模仿。
脚本文件分类与存放路径
服务端通常在D:\MirServer\Mir200\Envir\
•NPC功能脚本:Market_Def\目录,每个可对话NPC一个.txt文件,文件名须与Merchant.txt注册名对应。
-任务脚本:MapQuest_def\目录(QuestDiary子目录按任务分类),用于定时任务、杀怪任务。
•登录/全局触发脚本:MapQuest_def\QManage.txt(上线触发)、QFunction-0.txt(物品使用/死亡/升级等全局事件)。
基础语法结构
脚本以标签[@标签名]分段,[@main]是NPC默认入口。核心关键字:
•[@标签]—程序跳转锚点,点击选项或GOTO跳转至此。
•#IF—条件判断开始,后跟检测命令(等级、金币、物品、职业等)。
-#ACT—#IF条件满足时执行的动作(给物品、扣金币、传送等)。
•#ELSEACT/#ELSESAY—条件不满足时执行或显示内容。
•#SAY—显示对玩家说的话,\换行,<选项@标签>生成可点击链接。
-BREAK—终止当前段执行,防止穿透到下一段。
常用检测命令:CheckLevel数字(等级)、CheckGold数字(金币)、CheckItem物品名数量(背包有某物)、CheckJobWarrior/Wizard/Taoist(检测职业)、IsOnMap地图编号(在某地图)。
常用动作命令:GIVE物品名数量(给)、TAKE物品名数量(扣)、TAKEMONEY数字(扣金币)、MAPMOVE地图号XY(传送到坐标)、SENDMSG6文字(系统提示)、SETHUMANVAR变量值(设变量)。
注册NPC(Merchant.txt)
在Envir\Merchant.txt添加一行注册NPC:
NPC显示名地图号XYNPC名称(与脚本文件名前缀一致)标志外观码其他参数
例:在新手村(地图0)坐标330268放一个名为"福利使者"的NPC,脚本文件叫"福利使者-0.txt"
福利使者0330268福利使者-00880000
标志填0为普通对话NPC,外观码对应NPC模型ID。改完保存,服务端控制台输@reloadnpc刷新或重启引擎。
实战:新手领装备NPC脚本示例
在Market_Def\新建"福利使者-0.txt",内容:
[@main]
#SAY
欢迎来到服务器!选择你的职业领取起步装备:\
\
<战士领屠龙@warrior>\
<法师领骨玉@mage>\
<道士领逍遥扇@taoist>\
<离开@exit>
[@warrior]
#IF
CHECKJOBWarrior
#ACT
GIVE屠龙1
GIVE战神盔甲(男)1
SENDMSG6战士装备已发放!
BREAK
#ELSEACT
SENDMSG6只有战士才能领这套!
[@mage]
#IF
CHECKJOBWizard
#ACT
GIVE骨玉权杖1
GIVE法神披风1
SENDMSG6法师装备已发放!
BREAK
[@taoist]
#IF
CHECKJOBTaoist
#ACT
GIVE逍遥扇1
GIVE天尊道袍(男)1
SENDMSG6道士装备已发放!
BREAK
保存时注意编码选ANSI避免中文乱码,文件名与Merchant.txt中注册的一致。
任务脚本(杀怪交任务)简例
在MapQuest.txt登记任务号,在QuestDiary\某分类\任务名.txt写:
[@杀鹿任务]
#IF
CheckItem鹿肉1
#ACT
TAKE鹿肉1
GIVE金币10000
GIVE沃玛戒指1
SENDMSG6任务完成,奖励已发!
BREAK
#ELSESAY
你还没打到鹿肉,去比奇外围杀鹿吧。
配合MonItems数据库让鹿掉鹿肉即可形成完整循环。
新手注意
•所有脚本文件必须ANSI编码保存,UTF-8会导致中文显示乱码或NPC不读脚本。
•标签名区分大小写,[@main]和[@Main]在某些引擎会被视为不同。
-修改脚本后需@reloadnpc或重启M2方可生效。
•复杂功能(变量、计时器、泡点、装备回收)在基础结构上叠加#IFCHECK[变量]、INCU01、SetOnTimer等命令实现。
掌握以上结构后可以照葫芦画瓢改现成脚本,大部分版本包里自带大量现成NPC脚本可参考模仿。

