脚本编写基础:环境与核心语法
传奇脚本本质是纯文本文件(.txt),无需复杂开发环境,使用记事本或Notepad++即可编写。脚本逻辑基于“条件判断→执行动作”(IF-ACT)结构,需放置在服务端Mir200\Envir目录下(如Market_Def对应NPC,QuestDiary对应任务脚本)。
核心指令与基础结构
脚本由标签(Label)、条件判断(#IF)、执行动作(#ACT)三部分组成。常用指令如下:
-#IF:条件判断开始。其后接检测命令,如CHECKLEVELEX>35(等级检测)、CHECKGOLD10000(金币检测)。
-#ACT:条件成立时执行的动作。如GIVE屠龙1(给物品)、MAPMOVE3330268(传送)。
-#SAY:显示对话文字。用于NPC与玩家交互。
•BREAK:终止当前脚本段,防止代码继续向下执行导致逻辑错乱。
基础结构模板:
[@Main]
#IF
CHECKLEVELEX>30
CHECKGOLD5000
#ACT
TAKE金币5000
GIVE裁决之杖1
SENDMSG6兑换成功!
BREAK
#ELSEACT
SENDMSG6条件不足!
此脚本含义:若玩家等级大于30且拥有5000金币,则扣除金币并给予裁决之杖;否则提示条件不足。
实战案例:编写一个传送NPC
以“盟重省老兵”传送功能为例,演示完整NPC制作流程。
1.创建NPC配置文件
在Merchant.txt(位于Envir目录)中注册NPC。添加一行:
盟重省3330268老兵0800
参数说明:盟重省为地图名,3330268为坐标,老兵为名称,0为形象,8为功能码(8代表可对话)。
2.编写NPC脚本文件
在Market_Def目录下创建盟重省-老兵.txt文件,写入以下内容:
[@Main]
#SAY
欢迎来到盟重省,我可以送你前往练级地图。\\
<前往石墓阵/@go_shigu><前往祖玛寺庙/@go_zuma>\\
<关闭/@exit>
[@go_shigu]
#IF
CHECKGOLD1000
#ACT
TAKE金币1000
MAPMOVED717100100
SENDMSG6已传送至石墓阵,消耗1000金币。
BREAK
#ELSEACT
SENDMSG6金币不足1000,无法传送!
BREAK
[@go_zuma]
#IF
CHECKLEVELEX>25
#ACT
MAPMOVE01595050
SENDMSG6已传送至祖玛寺庙。
BREAK
#ELSEACT
SENDMSG6等级不足25级!
BREAK
逻辑解析:
•[@Main]:NPC主界面,显示对话和两个传送选项按钮。
•@go_shigu:点击“前往石墓阵”触发的标签。先检测金币,足够则扣钱传送。
-@go_zuma:点击“前往祖玛寺庙”触发的标签。检测等级,达标则直接传送。
-\\用于换行,<关闭/@exit>为关闭按钮。
3.重载脚本生效
保存文件后,在游戏M2控制器(M2Server)中点击“重新加载NPC”(或ReloadNpc),NPC即可生效。无需重启整个服务端。
进阶功能:QFunction-0.txt系统触发脚本
QFunction-0.txt是服务端的“总控脚本”,用于处理非NPC触发的全局事件(如升级、死亡、使用物品)。
1.升级触发送装备
在QFunction-0.txt中添加以下代码,实现玩家升级到35级自动送装备:
[@PlayLevelUp]
#IF
CHECKLEVELEX=35
#ACT
GIVE骨玉权杖1
GIVE恶魔长袍(男)1
SENDMSG0恭喜玩家【<$USERNAME>】达到35级,获得法师终极套装!
BREAK
[@PlayLevelUp]是引擎内置的升级触发标签,无需NPC点击,升级瞬间自动执行。
2.物品使用触发技能
实现双击“经验卷轴”增加经验值:
1.在数据库StdItems.DB中,将该卷轴的StdMode设为31(触发类物品),AniCount设为1(触发编号)。
2.在QFunction-0.txt中添加:
[@StdModeFunc1]
#ACT
CHANGEEXP+500000
SENDMSG6使用经验卷轴,获得50万经验!
BREAK
[@StdModeFunc1]中的“1”需与数据库中的AniCount编号对应。
调试技巧与常见错误
•M2报错:脚本语法错误(如缺少空格、标签重复)会导致M2Server启动失败或报错。务必检查命令格式,确保#IF和#ACT配对。
•路径错误:NPC脚本文件名必须与Merchant.txt中的登记名严格一致(格式:地图名-NPC名.txt)。
•变量冲突:避免在全局脚本(QFunction-0)中滥用全局变量,防止多个玩家数据串线。建议使用HUMAN(个人变量)或GLOBAL(全局变量)时加上玩家名标识。
掌握IF-ACT逻辑后,结合CHECK系列检测命令和GIVE、MAPMOVE等执行命令,即可编写出传送、兑换、任务等绝大多数游戏功能脚本。
传奇脚本本质是纯文本文件(.txt),无需复杂开发环境,使用记事本或Notepad++即可编写。脚本逻辑基于“条件判断→执行动作”(IF-ACT)结构,需放置在服务端Mir200\Envir目录下(如Market_Def对应NPC,QuestDiary对应任务脚本)。
核心指令与基础结构
脚本由标签(Label)、条件判断(#IF)、执行动作(#ACT)三部分组成。常用指令如下:
-#IF:条件判断开始。其后接检测命令,如CHECKLEVELEX>35(等级检测)、CHECKGOLD10000(金币检测)。
-#ACT:条件成立时执行的动作。如GIVE屠龙1(给物品)、MAPMOVE3330268(传送)。
-#SAY:显示对话文字。用于NPC与玩家交互。
•BREAK:终止当前脚本段,防止代码继续向下执行导致逻辑错乱。
基础结构模板:
[@Main]
#IF
CHECKLEVELEX>30
CHECKGOLD5000
#ACT
TAKE金币5000
GIVE裁决之杖1
SENDMSG6兑换成功!
BREAK
#ELSEACT
SENDMSG6条件不足!
此脚本含义:若玩家等级大于30且拥有5000金币,则扣除金币并给予裁决之杖;否则提示条件不足。
实战案例:编写一个传送NPC
以“盟重省老兵”传送功能为例,演示完整NPC制作流程。
1.创建NPC配置文件
在Merchant.txt(位于Envir目录)中注册NPC。添加一行:
盟重省3330268老兵0800
参数说明:盟重省为地图名,3330268为坐标,老兵为名称,0为形象,8为功能码(8代表可对话)。
2.编写NPC脚本文件
在Market_Def目录下创建盟重省-老兵.txt文件,写入以下内容:
[@Main]
#SAY
欢迎来到盟重省,我可以送你前往练级地图。\\
<前往石墓阵/@go_shigu><前往祖玛寺庙/@go_zuma>\\
<关闭/@exit>
[@go_shigu]
#IF
CHECKGOLD1000
#ACT
TAKE金币1000
MAPMOVED717100100
SENDMSG6已传送至石墓阵,消耗1000金币。
BREAK
#ELSEACT
SENDMSG6金币不足1000,无法传送!
BREAK
[@go_zuma]
#IF
CHECKLEVELEX>25
#ACT
MAPMOVE01595050
SENDMSG6已传送至祖玛寺庙。
BREAK
#ELSEACT
SENDMSG6等级不足25级!
BREAK
逻辑解析:
•[@Main]:NPC主界面,显示对话和两个传送选项按钮。
•@go_shigu:点击“前往石墓阵”触发的标签。先检测金币,足够则扣钱传送。
-@go_zuma:点击“前往祖玛寺庙”触发的标签。检测等级,达标则直接传送。
-\\用于换行,<关闭/@exit>为关闭按钮。
3.重载脚本生效
保存文件后,在游戏M2控制器(M2Server)中点击“重新加载NPC”(或ReloadNpc),NPC即可生效。无需重启整个服务端。
进阶功能:QFunction-0.txt系统触发脚本
QFunction-0.txt是服务端的“总控脚本”,用于处理非NPC触发的全局事件(如升级、死亡、使用物品)。
1.升级触发送装备
在QFunction-0.txt中添加以下代码,实现玩家升级到35级自动送装备:
[@PlayLevelUp]
#IF
CHECKLEVELEX=35
#ACT
GIVE骨玉权杖1
GIVE恶魔长袍(男)1
SENDMSG0恭喜玩家【<$USERNAME>】达到35级,获得法师终极套装!
BREAK
[@PlayLevelUp]是引擎内置的升级触发标签,无需NPC点击,升级瞬间自动执行。
2.物品使用触发技能
实现双击“经验卷轴”增加经验值:
1.在数据库StdItems.DB中,将该卷轴的StdMode设为31(触发类物品),AniCount设为1(触发编号)。
2.在QFunction-0.txt中添加:
[@StdModeFunc1]
#ACT
CHANGEEXP+500000
SENDMSG6使用经验卷轴,获得50万经验!
BREAK
[@StdModeFunc1]中的“1”需与数据库中的AniCount编号对应。
调试技巧与常见错误
•M2报错:脚本语法错误(如缺少空格、标签重复)会导致M2Server启动失败或报错。务必检查命令格式,确保#IF和#ACT配对。
•路径错误:NPC脚本文件名必须与Merchant.txt中的登记名严格一致(格式:地图名-NPC名.txt)。
•变量冲突:避免在全局脚本(QFunction-0)中滥用全局变量,防止多个玩家数据串线。建议使用HUMAN(个人变量)或GLOBAL(全局变量)时加上玩家名标识。
掌握IF-ACT逻辑后,结合CHECK系列检测命令和GIVE、MAPMOVE等执行命令,即可编写出传送、兑换、任务等绝大多数游戏功能脚本。

