电脑端传奇脚本主要写两类:一类是服务端NPC脚本,控制NPC对话、传送、合成、奖励;另一类是客户端挂机脚本,控制自动打怪、自动喝药、自动拾取。日常自己搭版本、改玩法,主要接触的是服务端NPC脚本。
一、脚本基本结构
传奇NPC脚本通常放在服务端脚本目录里,例如MirServerMir200EnvirMarket_Def下的txt文件。每个脚本以段落标签开头,主入口一般用[@Main]。
一个最基础的NPC脚本结构如下:
[@Main]
IF
ACT
SAY
IF负责检测条件,#ACT负责执行动作,#SAY负责显示对话文字。
二、最常用命令
检测类命令只能放在#IF下面,执行类命令只能放在#ACT或#ELSEACT下面。
常用检测命令:
CHECKLEVEL数值:检测角色等级是否达到指定值
CHECKGOLD数值:检测金币是否足够
CHECKGAMEGOLD数值:检测元宝是否足够
CHECKITEM物品名数量:检测背包里是否有指定物品
CHECKJOBWARR/WIZARD/TAOS:检测职业
CHECKBAGGAGE:检测背包是否已满
RANDOM数值:按概率触发
常用执行命令:
GIVE物品数量:给玩家物品或金币
TAKE物品数量:扣除玩家物品
MAP地图名:传送到指定地图随机坐标
MAPMOVE地图名XY:传送到指定坐标
SENDMSG提示类型文字:发送系统提示
GOTO@段落:跳转到指定段落
BREAK:结束当前脚本段执行
CLOSE:关闭对话框
三、写一个等级奖励NPC
下面是一个简单示例:角色达到50级可以领取奖励,每人只能领一次。
[@Main]
IF
CHECKLEVEL50
CHECK[101]0
ACT
GIVE屠龙1
SET[101]1
SENDMSG6恭喜领取等级奖励
ELSESAY
等级不足50级,或已经领取过奖励。
这里[101]是逻辑变量,初始为0。领取后设为1,再次点击就不会重复发放。
四、写一个传送NPC
传送脚本通常先检测条件,再执行传送。
[@Main]
IF
CHECKGAMEGOLD>100
ACT
TAKEGAMEGOLD100
MAPMOVE3150150
SENDMSG6已传送至目标地图
ELSESAY
元宝不足100,无法传送。
注意先检测再扣除,避免误扣。
五、写一个合成NPC
合成脚本核心是先检测材料,再扣除材料并发放成品。
[@Main]
IF
CHECKITEM黄金战刀2
ACT
TAKE黄金战刀2
GIVE神兵1
SENDMSG6合成成功
ELSESAY
背包里没有2把黄金战刀,无法合成。
如果版本有背包空格检测,可以再加一条CHECKBAGGAGE或CheckBagSize,防止合成后背包满导致物品丢失。
六、多条件写法
如果多个条件需要同时满足,直接写在#IF下面。
IF
CHECKLEVEL60
CHECKGAMEGOLD>500
CHECKITEM传送卷轴1
ACT
TAKE传送卷轴1
TAKEGAMEGOLD500
MAPMOVE5200200
如果只需要满足其中一个条件,可以用#OR。
OR
CHECKJOBWARR
CHECKJOBWIZARD
ACT
SENDMSG6战士或法师可进入
七、变量和限购控制
传奇脚本常用变量做记录:
P0-P9:临时变量,当前对话有效
D0-D9:角色在线期间有效
[N]:逻辑变量,通常用于开关、限购、任务标记
限购示例:
IF
CHECK[200]0
ACT
SET[200]1
GIVE奖励物品1
IF
CHECK[200]1
ACT
SENDMSG6已经领取过,无法重复领取
不同引擎变量范围可能不同,GEE、GOM、BLUE、996等引擎的变量命名会有差异,写之前要看当前引擎说明书。
八、事件触发脚本
有些脚本不需要点击NPC,而是自动触发。常见触发文件是QFunction-0.txt。
例如升级触发:
[@PlayLevelUp10]
IF
ACT
GIVE新手礼包1
SENDMSG6恭喜升至10级,获得新手礼包
这类标签在同一文件里通常只能出现一次,修改后需要在M2控制台重新加载脚本。
九、客户端挂机脚本
如果是写客户端挂机脚本,语法和服务端NPC脚本不同。客户端脚本常用类Lua或类C语法,例如:
ifstatus==2then...end
fori=1100do...end
myChar:getStatus()
myChar:setTarget(xy)
wait(0.01)
这类脚本依赖具体辅助或引擎,不能直接放到服务端NPC脚本里使用。
十、调试和生效方法
写完脚本后,常见步骤是:
保存为正确编码,通常用ANSI,避免中文乱码
检查段落标签是否完整
检查#IF、#ACT、#SAY顺序是否正确
在M2控制台重载脚本
大退重进测试
用SENDMSG输出提示,确认脚本是否执行到对应位置
如果点击NPC没反应,优先看M2控制台有没有报错,再检查GOTO跳转的标签是否存在,最后确认条件是否满足。
一、脚本基本结构
传奇NPC脚本通常放在服务端脚本目录里,例如MirServerMir200EnvirMarket_Def下的txt文件。每个脚本以段落标签开头,主入口一般用[@Main]。
一个最基础的NPC脚本结构如下:
[@Main]
IF
ACT
SAY
IF负责检测条件,#ACT负责执行动作,#SAY负责显示对话文字。
二、最常用命令
检测类命令只能放在#IF下面,执行类命令只能放在#ACT或#ELSEACT下面。
常用检测命令:
CHECKLEVEL数值:检测角色等级是否达到指定值
CHECKGOLD数值:检测金币是否足够
CHECKGAMEGOLD数值:检测元宝是否足够
CHECKITEM物品名数量:检测背包里是否有指定物品
CHECKJOBWARR/WIZARD/TAOS:检测职业
CHECKBAGGAGE:检测背包是否已满
RANDOM数值:按概率触发
常用执行命令:
GIVE物品数量:给玩家物品或金币
TAKE物品数量:扣除玩家物品
MAP地图名:传送到指定地图随机坐标
MAPMOVE地图名XY:传送到指定坐标
SENDMSG提示类型文字:发送系统提示
GOTO@段落:跳转到指定段落
BREAK:结束当前脚本段执行
CLOSE:关闭对话框
三、写一个等级奖励NPC
下面是一个简单示例:角色达到50级可以领取奖励,每人只能领一次。
[@Main]
IF
CHECKLEVEL50
CHECK[101]0
ACT
GIVE屠龙1
SET[101]1
SENDMSG6恭喜领取等级奖励
ELSESAY
等级不足50级,或已经领取过奖励。
这里[101]是逻辑变量,初始为0。领取后设为1,再次点击就不会重复发放。
四、写一个传送NPC
传送脚本通常先检测条件,再执行传送。
[@Main]
IF
CHECKGAMEGOLD>100
ACT
TAKEGAMEGOLD100
MAPMOVE3150150
SENDMSG6已传送至目标地图
ELSESAY
元宝不足100,无法传送。
注意先检测再扣除,避免误扣。
五、写一个合成NPC
合成脚本核心是先检测材料,再扣除材料并发放成品。
[@Main]
IF
CHECKITEM黄金战刀2
ACT
TAKE黄金战刀2
GIVE神兵1
SENDMSG6合成成功
ELSESAY
背包里没有2把黄金战刀,无法合成。
如果版本有背包空格检测,可以再加一条CHECKBAGGAGE或CheckBagSize,防止合成后背包满导致物品丢失。
六、多条件写法
如果多个条件需要同时满足,直接写在#IF下面。
IF
CHECKLEVEL60
CHECKGAMEGOLD>500
CHECKITEM传送卷轴1
ACT
TAKE传送卷轴1
TAKEGAMEGOLD500
MAPMOVE5200200
如果只需要满足其中一个条件,可以用#OR。
OR
CHECKJOBWARR
CHECKJOBWIZARD
ACT
SENDMSG6战士或法师可进入
七、变量和限购控制
传奇脚本常用变量做记录:
P0-P9:临时变量,当前对话有效
D0-D9:角色在线期间有效
[N]:逻辑变量,通常用于开关、限购、任务标记
限购示例:
IF
CHECK[200]0
ACT
SET[200]1
GIVE奖励物品1
IF
CHECK[200]1
ACT
SENDMSG6已经领取过,无法重复领取
不同引擎变量范围可能不同,GEE、GOM、BLUE、996等引擎的变量命名会有差异,写之前要看当前引擎说明书。
八、事件触发脚本
有些脚本不需要点击NPC,而是自动触发。常见触发文件是QFunction-0.txt。
例如升级触发:
[@PlayLevelUp10]
IF
ACT
GIVE新手礼包1
SENDMSG6恭喜升至10级,获得新手礼包
这类标签在同一文件里通常只能出现一次,修改后需要在M2控制台重新加载脚本。
九、客户端挂机脚本
如果是写客户端挂机脚本,语法和服务端NPC脚本不同。客户端脚本常用类Lua或类C语法,例如:
ifstatus==2then...end
fori=1100do...end
myChar:getStatus()
myChar:setTarget(xy)
wait(0.01)
这类脚本依赖具体辅助或引擎,不能直接放到服务端NPC脚本里使用。
十、调试和生效方法
写完脚本后,常见步骤是:
保存为正确编码,通常用ANSI,避免中文乱码
检查段落标签是否完整
检查#IF、#ACT、#SAY顺序是否正确
在M2控制台重载脚本
大退重进测试
用SENDMSG输出提示,确认脚本是否执行到对应位置
如果点击NPC没反应,优先看M2控制台有没有报错,再检查GOTO跳转的标签是否存在,最后确认条件是否满足。

