传奇服务端脚本命令完整讲解:NPC触发变量检测GOTO结构实战用法

来源: 作者: 点击:
传奇脚本命令由 M2 引擎解析,文件主要放在 Mir200\Envir\Market_Def\(NPC脚本)、QuestDiary\(任务脚本)、MapQuest_def\(QFunction.txt、QManage.txt 地图与全局触发)里,文本 ANSI 编码,改完在 M2 点“重载NPC/重载登录脚本”生效,不用重启。

一、脚本骨架:标签 + 段落指令
• [@段名]:定义入口,如 [@main]、[@buy]、[@Login],英文或数字,@开头。

• #SAY:输出对话,换行用 或 \ ,如 #SAY 欢迎来到盟重
请选择服务

- #ACT:条件成立后执行的命令块起点
• #IF:条件判断起点,后跟检测命令

• #ELSEACT / #ELSESAY:条件不成立走这里

• GOTO @段名:无条件跳转

• BREAK:终止脚本继续执行,防穿透到下一段

• CLOSE:关闭NPC对话框

- ; 或 // 开头:注释,引擎不执行

标准判断结构:
[@main]
IF

CHECKLEVEL 35
CHECKITEM 金矿 5
ACT

TAKE 金矿 5
GIVE 金条 1
SAY 兑换成功

ELSESAY

等级或材料不够

二、触发标识(引擎自动调用,名字不能乱改)
• [@Login]:角色进游戏,写在 QManage.txt 顶部

• [@KillMonster] / [@KillMon]:杀怪触发,写 QFunction-0.txt

- [@KillPlay]:杀人触发
• [@PlayDie]:角色死亡

• [@GetItem]:捡物品触发

• [@UseItem_物品名]:使用指定物品触发,如 [@UseItem_随机卷轴]

- [@SpeedClose]:加速掉线触发
• [@PlayReconnection]:小退触发

• NPC名触发:[@老兵]、[@服装店老板],点NPC进对应段

三、条件检测命令(写在 #IF 后)
- CHECKLEVEL 数值 / CHECKLEVEL >35 / =35:等级判断
• CHECKGOLD 数值:金币是否够

• CHECKGAMEGOLD 数值 / CHECKGOLD 元宝命令按引擎定:元宝判定

- CHECKITEM 物品名 数量:背包有无
• CHECKITEMW 装备名:是否穿在身上

• CHECKJOB Warrior/Wizard/Taoist:职业判定

• CHECKPKPOINT 数值:PK值

- CHECKEXP 数值:经验判定
• CHECKBAGSIZE 数量:背包空位

• CHECKDURA 物品名 数值:持久是否大于指定值

• ISONMAP 地图编号:是否在某图

• RANDOM 数值:1/N概率,如 RANDOM 5 即20%

- EQUAL 变量 数值 / LARGE / SMALL:变量比较
• CHECKDAYOFWEEK 1-7、CHECKTIME 时 分:时间类

• CHECKHUM 地图名 数量:地图在线人数

四、执行动作命令(写在 #ACT 后)
物品金钱:
• GIVE 物品名 数量:发物品,GIVE 金币 100000、GIVE 屠龙 1

• TAKE 物品名 数量:扣背包物品,TAKE 金条 5,第三参数1代表检测改名

- TAKEW 序列号:按序列号删物品
• TAKEB 装备位置/ALL:脱装备回包,TAKEB ALL 全身脱

• GAMEGOLD +500 / -500:元宝增减

• GOLD +1000000 / -数值:金币增减

- MAKE 物品名 数量:脚下生成物品

属性经验:
• CHANGEEXP +10000 / -数值:经验

• CHANGELEVEL +1 / -1:等级

• CHANGEPKPOINT -100:PK值

- SETONOFF 101 1:人物标志位,做任务进度锁
• CHANGEJOB 0/1/2、CHANGEGENDER 0/1:转职变性

• SETHEALTH、SETPOW、SETMAGIC:六维属性

传送地图:
• MAPMOVE 地图编号 X Y:定点传,MAPMOVE 0 330 330 比奇安全区

• MAP 地图名:传地图随机安全点

• RANDOMMOVE:随机传送

• MONCLEAR 地图编号:清图怪

- MONGEN 怪物名 数量 刷新时间 X Y:刷怪

消息:
• SENDMSG 频道 内容:0全服 1行会 2地图 5个人 6绿字提示 7特殊色

• MESSAGEBOX 内容:弹窗

• #BROADCAST 内容:全服广播

五、变量与运算
变量类型:P0-P9 临时(本次对话)、D0-D9 个人持久、N$开头 个人字符串、G0-G9 全局、S0-S9 临时字符串、U0-U9 通用,按引擎略有差异。
• MOV 变量 数值:赋值,MOV D0 100

• INC 变量 数值:自增,INC D0 1

• DEC 变量 数值:自减

• SUM 变量A 变量B:A=A+B

• CALC G10 = G10 + 1:四则运算+取模

• MOVR D0 5:给D0赋0-4随机数

• SAVEVAR / LOADVAR:存读变量到文件

• CHECKVAR 变量 值:检测变量

六、流程与控制细节
• 自上而下执行,遇 GOTO 改流,遇 BREAK/CLOSE 终止

• #IF 可叠多个检测,全真才进 #ACT

• #ELSEIF 多分支判断

• #CALL [\QuestDiary\功能\测试.txt] @段:调外部子程序

• 物品名带空格用引号包裹,如 GIVE "沃玛号角" 1

• 命令参数空格分隔,大小写多数引擎不敏感但建议统一大写

七、常用GM控制台命令(游戏内 @开头,Command.ini可改)
• @reloadnpc 重载NPC脚本、@reloadmanage 重载登录脚本

• @make 物品名、@mob 怪物名、@kick 角色名、@level 数值、@gamegold 数值

• @recall、@regoto、@superman、@observer、@realive

八、一段实战:杀怪计数领奖(QFunction-0.txt)
[@KillMonster]
IF

EQUAL N$杀怪计数 100
ACT

SENDMSG 5 已杀满100只,发放屠龙!
GIVE 屠龙 1
MOV N$杀怪计数 0
ELSEACT

INC N$杀怪计数 1

九、一段实战:NPC兑换(Market_Def\杂货商.txt)
[@main]
SAY 1.用5个金矿换金条|2.离开

[@exchange]
IF

CHECKITEM 金矿 5
CHECKBAGSIZE 1
ACT

TAKE 金矿 5
GIVE 金条 1
SENDMSG 5 兑换成功
BREAK
ELSESAY

金矿不够或背包满了
[@close]
ACT

CLOSE

写脚本先定触发点([@Login]/[@段名]/事件标签),再列 #IF 检测,最后 #ACT 动作,结尾 BREAK 防穿透;变量用错作用域、物品名和数据库不一致、MAPMOVE 坐标越界、ANSI 存成UTF8 是四类最常见报错源。