传奇脚本格式核心围绕“文本文件载体+固定语法规则+引擎适配要求”展开,不同功能脚本(NPC、活动、道具)格式框架统一,仅细节存在差异。本文详解基础格式、核心结构、分引擎规范及常见错误,新手可直接对照套用。
一、传奇脚本基础文件格式(所有引擎通用)
1. 文件后缀与载体:所有传奇脚本核心文件均为.txt文本格式,可通过记事本、Notepad++等文本编辑器编写保存,无需特殊编译工具。例如NPC脚本、任务脚本、活动脚本的文件后缀统一为.txt。
2. 存储路径规范:脚本需放在引擎指定目录下才能被识别,常见路径:① NPC脚本:D:\Mirserver\Mir200\Envir\Market_Def;② 功能脚本(如任务、加星):D:\Mirserver\Mir200\Envir\QuestDiary;③ 全局脚本:HERO引擎为QFunction-0.txt,GOM引擎为QFunction-1.txt。
3. 编码格式要求:必须保存为ANSI编码,若用UTF-8或其他编码,会出现脚本乱码、指令失效问题。用Notepad++保存时,可在“格式”菜单中选择“以ANSI格式编码”。
二、传奇脚本核心语法格式(通用框架)
传奇脚本语法由“标签+指令+参数”构成,所有功能实现均遵循“触发标签→条件判断→执行动作”的逻辑,核心元素格式如下:
1. 标签格式(脚本触发入口)
标签是脚本的“触发开关”,用于定位脚本执行起点,格式统一为“[@标签名]”,部分引擎支持标签后加冒号(如[@标签名]:),常见标签类型及格式:
(1)独立NPC标签:所有独立NPC脚本顶部必须包含[@MAIN]标签,作为对话入口。示例:[@MAIN] #SAY 欢迎来到传奇大陆!\ 1.领取新手福利 \ 2.查询活动信息
(2)功能触发标签:按功能命名,用于触发特定逻辑。示例:[@GetNewbieGift](领取新手福利)、[@MonsterDie_活动BOSS](活动BOSS死亡触发)。
(3)注意事项:标签名不可含特殊字符(空格、中文符号、@),区分大小写的引擎需保持调用与定义一致(如[@Start]不可误写为[@start]);标签必须单独成行,前后不可有多余空格。
2. 核心指令格式(条件与执行)
指令分“条件判定指令”和“执行动作指令”两类,格式严格,错误会导致脚本失效:
(1)条件判定指令:以“#IF”开头,用于判断触发条件是否满足,格式为“#IF 条件表达式”。常见条件指令及格式:
- 检查等级:#IF CheckLevel 30(判断玩家等级≥30)
- 检查物品:#IF CheckItem 元宝 100(判断玩家拥有元宝≥100)
- 检查职业:#IF CheckJob Warr(判断玩家职业为战士,Warr=战士、Wizard=法师、Taos=道士)
- 多条件组合:#IF 后多个条件需同时满足,按顺序排列。示例:#IF CheckLevel 30 CheckJob Warr CheckItem 裁决之杖 1
(2)执行动作指令:以“#ACT”(满足条件)或“#ELSEACT”(不满足条件)开头,格式为“#ACT 动作指令 参数”。常见执行指令及格式:
- 发放物品:#ACT Give 新手套装 1(发放1套新手套装)
- 扣除物品:#ACT Take 元宝 100(扣除100元宝)
- 发送提示:#ACT SENDMSG 1 新手福利领取成功!(在游戏内发送提示)
- 跳转标签:#ACT goto @MAIN(跳转到[@MAIN]标签)
3. 注释格式(不影响脚本执行)
注释用于标注脚本功能,方便后期维护,格式为“; 注释内容”(分号后加空格),单独成行或放在指令后。示例:
; 新手福利领取脚本核心逻辑
[@GetNewbieGift]
#IF
CheckLevel 1 ; 判断玩家等级为1级(新手)
CheckItem 新手凭证 1
#ACT
Give 新手武器 1
Take 新手凭证 1
SENDMSG 1 领取成功!
#ELSEACT
SENDMSG 1 条件不足,无法领取!
三、主流引擎传奇脚本格式差异(关键区别)
HERO、GOM、BLUE三大引擎基础格式一致,但部分指令和配置要求存在差异,具体如下:
1. HERO引擎脚本格式特点
(1)核心脚本文件:全局功能脚本集中在QFunction-0.txt,支持内部标签调用(#call @标签名)。示例:#call @InnerTag(调用当前脚本内[@InnerTag]标签)。
(2)变量格式:物品变量、角色变量直接通过指令调用,格式为“$USERVAR(变量名)”。示例:#ACT SetUserVar IsGetGift 1(设置角色变量IsGetGift为1,标记已领取福利)。
(3)路径格式:调用外部脚本时需用绝对路径,格式为“#call \Quest\Task.txt @TaskStart”(从引擎根目录开始)。
2. GOM引擎脚本格式特点
(1)核心脚本文件:全局功能脚本在QFunction-1.txt,不支持#call调用内部标签(内部跳转需用goto指令)。
(2)指令大小写:部分指令支持大小写,但建议统一大写,避免失效。示例:#ACT GiveItem 新手套装 1(与Give功能一致)。
(3)变量格式:角色变量需加前缀“$”,格式为“$IsGetGift”。示例:#IF CheckUserVar $IsGetGift 0(判断变量$IsGetGift为0)。
3. BLUE引擎脚本格式特点
(1)文件后缀差异:支持.txt和.lua两种格式,.lua脚本需用Lua语法,.txt脚本格式与其他引擎一致。
(2)加载要求:脚本需在引擎控制台“脚本管理”中勾选加载,未加载的脚本无法执行。
(3)指令格式:部分执行指令后缀不同,示例:发放物品为“player:GiveItem("新手套装",1)”(Lua格式),txt格式与HERO一致。
四、传奇脚本格式规范与常见错误对比
1. 格式规范要点
(1)符号使用:所有符号需为英文半角,如“大于”用“>”而非“>”,“等于”用“=”而非“==”,逗号用“,”而非“,”。
(2)参数一致性:物品名、职业名、地图名需与服务端配置文件(如Item.txt、Job.txt)完全一致,避免错别字。示例:CheckItem 火龙神甲 1(不可误写为“火龙甲”)。
(3)分支终止:每个脚本分支末尾建议加“break”指令,避免逻辑溢出。示例:#ACT Give 福利 1 break。
2. 常见格式错误及修正示例
; 错误示例1:标签缺少@符号
[MAIN] ; 错误,应为[@MAIN]
#SAY 欢迎来到传奇大陆!
; 错误示例2:条件指令符号用中文全角
#IF CheckLevel > 30 ; 错误,应为CheckLevel > 30
#ACT Give 奖励 1
; 错误示例3:执行指令缺少参数
#ACT Give 新手套装 ; 错误,应为Give 新手套装 1(缺少数量)
; 错误示例4:编码格式错误(UTF-8)
; 表现为脚本乱码,指令无法识别,修正为ANSI编码即可
; 正确示例汇总
[@MAIN]
#IF
CheckLevel > 30
CheckItem 元宝 100
#ACT
Give 新手套装 1
Take 元宝 100
SENDMSG 1 奖励领取成功!
break
#ELSEACT
SENDMSG 1 等级或元宝不足!
break
五、不同功能脚本格式通用框架(可直接套用)
1. NPC对话脚本格式
[@MAIN]
#SAY
欢迎参与活动!\
1.领取每日奖励 \
2.查询活动规则 \
3.退出对话
#ACT
INPUTS 1 @SelectOption ; 获取玩家输入的序号
[@SelectOption]
#IF
EQUAL $INPUT 1
#ACT
goto @GetDailyReward
break
#IF
EQUAL $INPUT 2
#ACT
goto @QueryRule
break
#ELSEACT
SENDMSG 1 输入错误,请重新选择!
goto @MAIN
break
[@GetDailyReward]
; 领取奖励逻辑...
[@QueryRule]
; 查询规则逻辑...
2. 物品触发脚本格式
; 双击道具“活动令牌”触发功能
[@StdModeFunc100]
#IF
CheckItemInHand 活动令牌 1 ; 校验手持活动令牌
#ACT
Take 活动令牌 1
Give 活动奖励 1
SENDMSG 1 成功兑换活动奖励!
break
#ELSEACT
SENDMSG 1 未持有活动令牌,无法触发!
break
3. 活动定时脚本格式
; 每60秒检测一次活动时间
[@Timer60]
#IF
GetTime HOUR MINUTE
HOUR = 20
MINUTE <= 30 ; 活动时间20:00-20:30
#ACT
MonGen 活动BOSS 1 100 100 100 ; 刷新BOSS
SENDMSG 1 活动BOSS已刷新!
break

