传奇脚本表达式与关键字入门教程

来源: 作者: 点击:
传奇脚本不是 C/Python 那种完整语言,是“标签 + 条件 + 动作 + 文本 + 跳转”组成的领域脚本。引擎从上往下读,遇到 [@标签] 进入段,遇到 #IF 做判断,成立走 #ACT,不成立走 #ELSEACT / #ELSESAY。

一、脚本骨架

[@main]
#IF
CHECKLEVELEX > 35
CHECKGOLD 10000
#ACT
TAKE 金币 10000
GIVE 裁决之杖 1
SENDMSG 6 兑换成功
BREAK
#ELSESAY
等级或金币不够。

顺序不能乱:先检测再执行。把 GIVE 写进 #IF 下面、把 CHECKITEM 写进 #ACT 下面,M2 直接报脚本错误。

二、段标签
[@main]:NPC 入口,点开先跑这段
[@段名]:自定义段,英文/数字/下划线,中文容易出事
GOTO @段名:跳过去继续跑
CALL [\QuestDiary\功能\发奖.txt] @段名:调别的文件里的段

[C123]:逻辑变量/任务标记,SET [123] 1 标记完成,CHECK [123] 1 判断做过没

三、条件类关键字(只能放 #IF / #ELSEIF 下)
IF:条件开始

ELSEIF:再判断一个条件

OR:后面条件任一成立即可

AND:隐式存在,#IF 下多条条件默认“且”

ELSEACT:条件不成立时执行命令

ELSESAY:条件不成立时显示文字

常用条件命令:
CHECKLEVELEX > 35:等级大于35(> < = >= <= 都能用)
CHECKLEVEL 35:老引擎基础等级判断
CHECKGOLD 10000:金币 ≥10000
CHECKGAMEGOLD 100:元宝,GOM 用 GAMEGOLD/HEROGOLD 看版本
CHECKITEM 回城卷 1:背包有1个
CHECKITEMW 屠龙:身上穿着屠龙
CHECKJOB WARRIOR / WIZARD / TAOIST:战法道
ISONMAP 3:当前在比奇
RANDOM 100:1% 概率成立,RANDOM 2 是50%
CHECK [100] 1:任务标记100为真
CHECKPKPOINT > 0:红名
CHECKBAGGAGE:背包满没满

四、执行类关键字(只能放 #ACT / #ELSEACT 下)
ACT:条件成立后执行

SAY:弹对话文本,\ 换行,<选项/@段> 做菜单

BREAK:不再往下执行本段
CLOSE:关 NPC 对话框
MAP 3:传送到3号图随机点
MAPMOVE 3 330 330:传送到3图330,330
GIVE 强效金创药 5:发5个
TAKE 金币 5000:扣5000金币
GAMEGOLD + 100 / GAMEGOLD - 100:加/扣元宝
SETLEVEL 1:设1级
SETEXP 0:清经验
CHANGESPEED 2 5 3600:攻速+5持续3600秒
SENDMSG 6 文本:绿字提示,0全服 6个人 9红字
ACCEPTQUEST 任务名 / COMPLETEQUEST 任务名:接/交任务
SetInt(<$HUMAN(day_gift)>) = 1:玩家变量赋值
SetInt(<$G(开服天数)>) = 1:全局变量赋值

五、变量与表达式
传奇变量分几类:
P0-P99:个人数字变量
G0-G999:全局数字变量
S0-S99:字符串变量
M0-M99:临时变量
[0]-[999]:任务/逻辑标记
<$HUMAN(x)>:角色持久变量
<$G(x)>:全服变量
<USERNAME> <LEVEL> <JOB> <MAP>:系统宏

赋值与计算:
MOV P0 1:P0=1
INC P0 1:P0加1
DEC P0 1:P0减1
MUL P0 2:乘2
DIV P0 2:整除
CALCVAR P0 + 5:P0=P0+5
SMALL P0 10:P0<10
LARGE P0 10:P0>10
EQUAL P0 1:P0=1

表达式不是 1+1 写在纸上,而是“条件命令 + 比较符 + 数值”:
CHECKLEVELEX >= 50
CHECKITEM 沃玛号角 1
CHECK [310] 1
SMALL P0 100
LARGE G1 7

六、菜单与文本符号
\ :换行
\\ :空行
<SCOLOR=254>文字:客户端颜色(看引擎支持)
<领取/@get>:可点击选项,点了跳 @get
{文字|SCOLOR=243}:GOM/GEE 富文本写法
; 或 // :注释,引擎不执行(部分文件 ; 有效,QuestDiary 里别乱用 ; 否则整行没)

七、流程控制关键字
IF → #ACT → #SAY

IF → #ACT → #ELSEACT

IF → #ACT → #ELSESAY

GOTO @xxx:死跳,别双向互跳,会卡死
CALL 文件 @段:复用代码

BREAK:防止条件过了还往下走
CLOSE:关窗
MESSAGEBOX 文本:弹窗强制看

八、老 LEG / BLUE 表达式写法
LEG 里常见:

#IF
LARGE P0 100
EQUAL [10] 1
CHECKITEM 金币 1000
#ACT
MOV P0 0
GIVE 金币 1000

LARGE / SMALL / EQUAL 是老式比较词,GOM/HERO 里更多用 CHECKLEVELEX > 10 这种符号表达式。

九、常见写错
IF 下写 GIVE → 报错

ACT 下写 CHECKITEM → 不生效

[@Main] 和 [@main] 大小写敏感版本里是两个段
\ 和 / 混用,菜单跳不动
CHECKLEVELEX>35 没空格有时能跑,但 CHECKLEVELEX > 35 更稳
TAKE 金币 10000 写成 TAKE 金币10000 参数黏一起会解析错
CALL 路径用正斜杠混反斜杠,Windows 下 \QuestDiary\功能\发奖.txt 最稳

变量用中文名 领过礼包 → 存不进、读出来空
RANDOM 放 #ACT 下没用,必须放 #IF 下做概率

十、最小可跑模板

[@main]
#SAY
<领30级礼包/@gift30>\ <离开/@exit>

[@gift30]
#IF
CHECKLEVELEX >= 30
CHECK [888] 0
#ACT
GIVE 强效太阳水 5
SET [888] 1
SENDMSG 6 已领取30级礼包
BREAK
#ELSEACT
SENDMSG 6 等级不足或已领取
BREAK

[@exit]
#ACT
CLOSE


十一、关键字速查
标签类:[@xxx]
条件类:#IF #ELSEIF #OR
执行类:#ACT #SAY #ELSEACT #ELSESAY
流程类:GOTO #CALL BREAK CLOSE MESSAGEBOX
检测类:CHECKLEVELEX CHECKLEVEL CHECKGOLD CHECKGAMEGOLD CHECKITEM CHECKITEMW CHECKJOB ISONMAP RANDOM CHECK [n] CHECKPKPOINT
动作类:GIVE TAKE MAP MAPMOVE SENDMSG SETLEVEL SETEXP CHANGESPEED ACCEPTQUEST COMPLETEQUEST
变量类:MOV INC DEC MUL DIV CALCVAR SMALL LARGE EQUAL SET [n] SetInt(<$HUMAN(x)>)

传奇脚本里“表达式”就是:检测命令 + 比较符 + 值;“关键字”就是 #IF/#ACT/#SAY/#ELSEACT/GOTO/#CALL/BREAK 这一套。先把 [@main] → #IF → #ACT → #SAY → #ELSESAY 背熟,再碰变量、任务标记、概率、合击、机器人,就不会把检测命令塞进执行段里把 M2 刷红。