传奇脚本不是C/Python那种完整语言,是“标签+条件+动作+文本+跳转”组成的领域脚本。引擎从上往下读,遇到[@标签]进入段,遇到#IF做判断,成立走#ACT,不成立走#ELSEACT/#ELSESAY。
一、脚本骨架
[@main]
#IF
CHECKLEVELEX>35
CHECKGOLD10000
#ACT
TAKE金币10000
GIVE裁决之杖1
SENDMSG6兑换成功
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(><=>=<=都能用)
CHECKLEVEL35:老引擎基础等级判断
CHECKGOLD10000:金币≥10000
CHECKGAMEGOLD100:元宝,GOM用GAMEGOLD/HEROGOLD看版本
CHECKITEM回城卷1:背包有1个
CHECKITEMW屠龙:身上穿着屠龙
CHECKJOBWARRIOR/WIZARD/TAOIST:战法道
ISONMAP3:当前在比奇
RANDOM100:1%概率成立,RANDOM2是50%
CHECK[100]1:任务标记100为真
CHECKPKPOINT>0:红名
CHECKBAGGAGE:背包满没满
四、执行类关键字(只能放#ACT/#ELSEACT下)
ACT:条件成立后执行
SAY:弹对话文本,\换行,<选项/@段>做菜单
BREAK:不再往下执行本段
CLOSE:关NPC对话框
MAP3:传送到3号图随机点
MAPMOVE3330330:传送到3图330330
GIVE强效金创药5:发5个
TAKE金币5000:扣5000金币
GAMEGOLD+100/GAMEGOLD-100:加/扣元宝
SETLEVEL1:设1级
SETEXP0:清经验
CHANGESPEED253600:攻速+5持续3600秒
SENDMSG6文本:绿字提示,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>:系统宏
赋值与计算:
MOVP01:P0=1
INCP01:P0加1
DECP01:P0减1
MULP02:乘2
DIVP02:整除
CALCVARP0+5:P0=P0+5
SMALLP010:P0<10
LARGEP010:P0>10
EQUALP01:P0=1
表达式不是1+1写在纸上,而是“条件命令+比较符+数值”:
CHECKLEVELEX>=50
CHECKITEM沃玛号角1
CHECK[310]1
SMALLP0100
LARGEG17
六、菜单与文本符号
\:换行
\\:空行
<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
LARGEP0100
EQUAL[10]1
CHECKITEM金币1000
#ACT
MOVP00
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
SENDMSG6已领取30级礼包
BREAK
#ELSEACT
SENDMSG6等级不足或已领取
BREAK
[@exit]
#ACT
CLOSE
十一、关键字速查
标签类:[@xxx]
条件类:#IF#ELSEIF#OR
执行类:#ACT#SAY#ELSEACT#ELSESAY
流程类:GOTO#CALLBREAKCLOSEMESSAGEBOX
检测类:CHECKLEVELEXCHECKLEVELCHECKGOLDCHECKGAMEGOLDCHECKITEMCHECKITEMWCHECKJOBISONMAPRANDOMCHECK[n]CHECKPKPOINT
动作类:GIVETAKEMAPMAPMOVESENDMSGSETLEVELSETEXPCHANGESPEEDACCEPTQUESTCOMPLETEQUEST
变量类:MOVINCDECMULDIVCALCVARSMALLLARGEEQUALSET[n]SetInt(<$HUMAN(x)>)
传奇脚本里“表达式”就是:检测命令+比较符+值;“关键字”就是#IF/#ACT/#SAY/#ELSEACT/GOTO/#CALL/BREAK这一套。先把[@main]→#IF→#ACT→#SAY→#ELSESAY背熟,再碰变量、任务标记、概率、合击、机器人,就不会把检测命令塞进执行段里把M2刷红。
一、脚本骨架
[@main]
#IF
CHECKLEVELEX>35
CHECKGOLD10000
#ACT
TAKE金币10000
GIVE裁决之杖1
SENDMSG6兑换成功
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(><=>=<=都能用)
CHECKLEVEL35:老引擎基础等级判断
CHECKGOLD10000:金币≥10000
CHECKGAMEGOLD100:元宝,GOM用GAMEGOLD/HEROGOLD看版本
CHECKITEM回城卷1:背包有1个
CHECKITEMW屠龙:身上穿着屠龙
CHECKJOBWARRIOR/WIZARD/TAOIST:战法道
ISONMAP3:当前在比奇
RANDOM100:1%概率成立,RANDOM2是50%
CHECK[100]1:任务标记100为真
CHECKPKPOINT>0:红名
CHECKBAGGAGE:背包满没满
四、执行类关键字(只能放#ACT/#ELSEACT下)
ACT:条件成立后执行
SAY:弹对话文本,\换行,<选项/@段>做菜单
BREAK:不再往下执行本段
CLOSE:关NPC对话框
MAP3:传送到3号图随机点
MAPMOVE3330330:传送到3图330330
GIVE强效金创药5:发5个
TAKE金币5000:扣5000金币
GAMEGOLD+100/GAMEGOLD-100:加/扣元宝
SETLEVEL1:设1级
SETEXP0:清经验
CHANGESPEED253600:攻速+5持续3600秒
SENDMSG6文本:绿字提示,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>:系统宏
赋值与计算:
MOVP01:P0=1
INCP01:P0加1
DECP01:P0减1
MULP02:乘2
DIVP02:整除
CALCVARP0+5:P0=P0+5
SMALLP010:P0<10
LARGEP010:P0>10
EQUALP01:P0=1
表达式不是1+1写在纸上,而是“条件命令+比较符+数值”:
CHECKLEVELEX>=50
CHECKITEM沃玛号角1
CHECK[310]1
SMALLP0100
LARGEG17
六、菜单与文本符号
\:换行
\\:空行
<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
LARGEP0100
EQUAL[10]1
CHECKITEM金币1000
#ACT
MOVP00
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
SENDMSG6已领取30级礼包
BREAK
#ELSEACT
SENDMSG6等级不足或已领取
BREAK
[@exit]
#ACT
CLOSE
十一、关键字速查
标签类:[@xxx]
条件类:#IF#ELSEIF#OR
执行类:#ACT#SAY#ELSEACT#ELSESAY
流程类:GOTO#CALLBREAKCLOSEMESSAGEBOX
检测类:CHECKLEVELEXCHECKLEVELCHECKGOLDCHECKGAMEGOLDCHECKITEMCHECKITEMWCHECKJOBISONMAPRANDOMCHECK[n]CHECKPKPOINT
动作类:GIVETAKEMAPMAPMOVESENDMSGSETLEVELSETEXPCHANGESPEEDACCEPTQUESTCOMPLETEQUEST
变量类:MOVINCDECMULDIVCALCVARSMALLLARGEEQUALSET[n]SetInt(<$HUMAN(x)>)
传奇脚本里“表达式”就是:检测命令+比较符+值;“关键字”就是#IF/#ACT/#SAY/#ELSEACT/GOTO/#CALL/BREAK这一套。先把[@main]→#IF→#ACT→#SAY→#ELSESAY背熟,再碰变量、任务标记、概率、合击、机器人,就不会把检测命令塞进执行段里把M2刷红。

