传奇脚本编写:从基础语法到实战NPC制作

来源: 作者: 点击:
脚本编写基础:环境与核心语法

传奇脚本本质是纯文本文件(.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等执行命令,即可编写出传送、兑换、任务等绝大多数游戏功能脚本。
[顶部]