传奇脚本编写入门:段落标签、IF条件、ACT执行与常用命令实战

来源: 作者: 点击:
电脑端传奇脚本主要写两类:一类是服务端NPC脚本,控制NPC对话、传送、合成、奖励;另一类是客户端挂机脚本,控制自动打怪、自动喝药、自动拾取。日常自己搭版本、改玩法,主要接触的是服务端NPC脚本。

一、脚本基本结构

传奇NPC脚本通常放在服务端脚本目录里,例如 MirServerMir200EnvirMarket_Def 下的txt文件。每个脚本以段落标签开头,主入口一般用 [@Main]。

一个最基础的NPC脚本结构如下:

[@Main]
IF
ACT
SAY

IF 负责检测条件,#ACT 负责执行动作,#SAY 负责显示对话文字。

二、最常用命令

检测类命令只能放在 #IF 下面,执行类命令只能放在 #ACT 或 #ELSEACT 下面。

常用检测命令:

CHECKLEVEL 数值:检测角色等级是否达到指定值
CHECKGOLD 数值:检测金币是否足够
CHECKGAMEGOLD 数值:检测元宝是否足够
CHECKITEM 物品名 数量:检测背包里是否有指定物品
CHECKJOB WARR/WIZARD/TAOS:检测职业
CHECKBAGGAGE:检测背包是否已满
RANDOM 数值:按概率触发

常用执行命令:

GIVE 物品 数量:给玩家物品或金币
TAKE 物品 数量:扣除玩家物品
MAP 地图名:传送到指定地图随机坐标
MAPMOVE 地图名 X Y:传送到指定坐标
SENDMSG 提示类型 文字:发送系统提示
GOTO @段落:跳转到指定段落
BREAK:结束当前脚本段执行
CLOSE:关闭对话框

三、写一个等级奖励NPC

下面是一个简单示例:角色达到50级可以领取奖励,每人只能领一次。

[@Main]
IF
CHECKLEVEL 50
CHECK [101] 0
ACT
GIVE 屠龙 1
SET [101] 1
SENDMSG 6 恭喜领取等级奖励
ELSESAY
等级不足50级,或已经领取过奖励。

这里 [101] 是逻辑变量,初始为0。领取后设为1,再次点击就不会重复发放。

四、写一个传送NPC

传送脚本通常先检测条件,再执行传送。

[@Main]
IF
CHECKGAMEGOLD > 100
ACT
TAKE GAMEGOLD 100
MAPMOVE 3 150 150
SENDMSG 6 已传送至目标地图
ELSESAY
元宝不足100,无法传送。

注意先检测再扣除,避免误扣。

五、写一个合成NPC

合成脚本核心是先检测材料,再扣除材料并发放成品。

[@Main]
IF
CHECKITEM 黄金战刀 2
ACT
TAKE 黄金战刀 2
GIVE 神兵 1
SENDMSG 6 合成成功
ELSESAY
背包里没有2把黄金战刀,无法合成。

如果版本有背包空格检测,可以再加一条 CHECKBAGGAGE 或 CheckBagSize,防止合成后背包满导致物品丢失。

六、多条件写法

如果多个条件需要同时满足,直接写在 #IF 下面。

IF
CHECKLEVEL 60
CHECKGAMEGOLD > 500
CHECKITEM 传送卷轴 1
ACT
TAKE 传送卷轴 1
TAKE GAMEGOLD 500
MAPMOVE 5 200 200

如果只需要满足其中一个条件,可以用 #OR。

OR
CHECKJOB WARR
CHECKJOB WIZARD
ACT
SENDMSG 6 战士或法师可进入

七、变量和限购控制

传奇脚本常用变量做记录:

P0-P9:临时变量,当前对话有效
D0-D9:角色在线期间有效
[N]:逻辑变量,通常用于开关、限购、任务标记

限购示例:

IF
CHECK [200] 0
ACT
SET [200] 1
GIVE 奖励物品 1

IF
CHECK [200] 1
ACT
SENDMSG 6 已经领取过,无法重复领取

不同引擎变量范围可能不同,GEE、GOM、BLUE、996等引擎的变量命名会有差异,写之前要看当前引擎说明书。

八、事件触发脚本

有些脚本不需要点击NPC,而是自动触发。常见触发文件是 QFunction-0.txt。

例如升级触发:

[@PlayLevelUp10]
IF
ACT
GIVE 新手礼包 1
SENDMSG 6 恭喜升至10级,获得新手礼包

这类标签在同一文件里通常只能出现一次,修改后需要在M2控制台重新加载脚本。

九、客户端挂机脚本

如果是写客户端挂机脚本,语法和服务端NPC脚本不同。客户端脚本常用类Lua或类C语法,例如:

if status == 2 then ... end
for i = 1, 100 do ... end
myChar:getStatus()
myChar:setTarget(x, y)
wait(0.01)

这类脚本依赖具体辅助或引擎,不能直接放到服务端NPC脚本里使用。

十、调试和生效方法

写完脚本后,常见步骤是:

保存为正确编码,通常用ANSI,避免中文乱码
检查段落标签是否完整
检查 #IF、#ACT、#SAY 顺序是否正确
在M2控制台重载脚本
大退重进测试
用 SENDMSG 输出提示,确认脚本是否执行到对应位置

如果点击NPC没反应,优先看M2控制台有没有报错,再检查 GOTO 跳转的标签是否存在,最后确认条件是否满足。