一、传奇脚本语法核心定位及适用范围
传奇脚本语法是编写传奇各类脚本的基础规则集合,涵盖脚本结构、命令规范、变量使用、注释规则等核心内容,所有传奇脚本(包括功能脚本、封挂脚本、任务脚本等)均需遵循这套语法规则,确保脚本可被服务端引擎正常解析执行。
传奇脚本语法适配所有主流传奇引擎,包括GOM、GEE、Hero、旭玩等,不同引擎仅在扩展命令上存在细微差异,核心语法规则完全一致,无需因引擎不同单独学习不同语法,掌握核心规则即可编写所有类型传奇脚本。
传奇脚本语法无需专业编程基础,核心特点是简洁易懂、规则固定,所有脚本均以纯文本形式编写,通过记事本即可编辑,只要严格遵循语法规则,就能避免脚本报错、无效等问题,实现预设的游戏功能。
二、传奇脚本核心语法结构(必学基础)
所有传奇脚本的语法结构均遵循“三段式”核心框架,即检测段、执行段、否则段,部分简单脚本可省略否则段,但检测段和执行段是必备部分,三段式结构贯穿所有脚本编写,是传奇脚本语法的核心。
1. 核心三段式结构详解
传奇脚本的三段式结构分工明确,检测段负责判断触发条件,执行段负责执行具体操作,否则段负责条件不满足时的备用操作,具体格式及说明如下:
#IF
// 检测段(必备):用于设置脚本触发的条件,可设置单个条件或多个条件叠加,只有条件满足时,才会执行后续执行段的内容
#ACT
// 执行段(必备):检测段条件满足后,执行的具体操作,可编写多条操作命令,按顺序依次执行
#ELSEACT
// 否则段(可选):检测段条件不满足时,执行的备用操作,可省略,省略后条件不满足则脚本无任何反应
BREAK
// 终止命令(必备):用于终止当前脚本段的执行,避免脚本重复触发、逻辑混乱,每个完整的三段式脚本末尾必须添加
2. 结构使用示例(新手易懂)
结合简单的游戏场景,展示三段式结构的具体应用,直观理解语法结构的使用逻辑,可直接复制测试:
// 示例:玩家等级≥30级,发放新手装备;否则提示等级不足
#IF
CheckLevel 30 // 检测条件:玩家等级≥30级
#ACT
Give 新手剑 1 // 执行操作1:发放新手剑1把
Give 新手甲 1 // 执行操作2:发放新手甲1件
SendMsg 5 等级达标,已为您发放新手装备!; // 执行操作3:弹出提示
#ELSEACT
SendMsg 5 等级不足30级,无法领取新手装备!; // 条件不满足时的备用操作
BREAK // 终止脚本执行
3. 结构使用注意事项
① 三段式结构的顺序不可颠倒,必须严格遵循“#IF→#ACT→#ELSEACT”的顺序,颠倒后引擎无法解析,脚本直接失效。
② 检测段(#IF)可无具体条件,此时视为无条件触发,直接执行#ACT后的操作,常用于无需判断条件的脚本(如点击NPC直接传送)。
③ 每个完整的三段式脚本末尾必须添加BREAK命令,若遗漏,脚本会持续重复执行,导致服务端卡顿、报错。
④ #ELSEACT段可省略,省略后,当#IF条件不满足时,脚本不执行任何操作,直接终止。
三、传奇脚本语法核心规则(重中之重)
传奇脚本语法有明确的固定规则,违反任何一条规则,都会导致脚本报错、无效或执行异常,以下规则适用于所有类型传奇脚本,必须严格遵循。
1. 命令大小写规则
传奇脚本所有核心命令、关键字均严格区分大小写,这是最容易出错的语法规则,也是脚本无效的常见原因,具体要求如下:
① 核心关键字(#IF、#ACT、#ELSEACT、BREAK)必须全部大写,不可小写或大小写混合,例如“#if”“#Act”“break”均会导致引擎无法识别。
② 所有脚本命令(如CheckLevel、SendMsg、MapMove等)必须全部大写,命令中的字母不可有任何小写,例如“checklevel”“sendmsg”会被判定为未知命令。
③ 变量、物品名称、地图名称等可大小写混合,但建议统一大写,避免因大小写差异导致脚本识别错误(如“金币”和“金幣”视为两种不同物品)。
2. 标点符号规则
传奇脚本仅支持英文标点符号,禁止使用中文标点,标点错误会直接导致脚本语法报错,具体要求如下:
① 所有脚本命令结尾必须添加英文分号“;”,用于分隔不同命令,若遗漏分号,引擎会将相邻命令视为一条,导致语法错误。
② 注释内容(//后面的文字)末尾无需添加标点,注释仅用于说明脚本功能,不参与引擎解析,可随意编写,但不可使用中文分号、句号等标点。
③ 脚本中不可出现中文标点(如,。?!:;),即使是提示内容中,也需使用英文标点,例如“检测到违规,即将处罚!;”需改为“检测到违规,即将处罚!;”。
3. 换行与空格规则
脚本的换行和空格有明确要求,格式混乱会导致引擎无法正确解析脚本,具体规则如下:
① 每行只能编写一条脚本命令,不可将多条命令写在同一行,即使是简短的命令,也需单独换行,例如不可写“Give 金币 1000; SendMsg 5 发放金币!;”。
② 核心关键字(#IF、#ACT、#ELSEACT、BREAK)需单独占一行,不可与其他命令、注释写在同一行,例如不可写“#IF CheckLevel 30”。
③ 脚本中可添加空行用于分隔不同脚本段,便于后续修改和查看,但不可在关键字、命令中间添加空行,否则会导致脚本断裂。
④ 命令与参数之间需添加一个空格,不可多空格或少空格,例如“CheckLevel30”“CheckLevel 30”(两个空格)均会导致命令无效,正确写法为“CheckLevel 30”。
4. 注释规则
注释用于说明脚本功能、命令含义,方便后续修改和维护,注释不参与引擎解析,可随意编写,但需遵循以下语法规则:
① 注释以双斜杠“//”开头,“//”后面的所有文字均视为注释,引擎会自动忽略。
② 注释可单独占一行,也可写在命令后面(需与命令之间添加一个空格),例如“CheckLevel 30 // 检测玩家等级是否≥30级”。
③ 注释不可嵌套,不可在注释中再添加“//”,例如“// 检测等级// 发放装备”会导致后面的“// 发放装备”被视为命令的一部分,引发报错。
④ 注释建议简洁明了,重点说明脚本功能、命令作用或参数含义,避免冗长,便于后续快速理解脚本逻辑。
5. 编码格式规则
脚本编码格式是脚本正常解析的基础,编码错误会导致脚本出现乱码、命令无法识别,具体要求如下:
① 所有传奇脚本文件必须设置为ANSI编码,不可使用UTF-8、Unicode等其他编码格式,否则会出现中文乱码,引擎无法解析脚本。
② 编码设置方法:右键点击脚本文件→选择“打开方式”→选择“记事本”→点击菜单栏“文件”→选择“另存为”→编码选择“ANSI”→保存覆盖原有文件。
③ 若脚本复制粘贴后出现乱码,需删除乱码内容,重新手动输入,或修改编码为ANSI后保存,避免复制粘贴导致的编码错乱。
四、传奇脚本变量语法(核心难点)
变量是传奇脚本中用于记录数据、存储状态的核心元素,常用于任务进度、违规次数、玩家状态等场景,变量语法规则复杂,需重点掌握,避免使用错误导致脚本逻辑异常。
1. 变量分类及命名规则
传奇脚本变量分为系统自带变量和自定义变量,两类变量的命名规则不同,不可混淆使用,具体分类及规则如下:
(1)系统自带变量
系统自带变量是引擎预设的变量,无需定义即可直接使用,用于记录玩家基础信息、游戏状态等,常用自带变量及规则如下:
① 私人变量:以P、D开头,用于记录单个玩家的私人数据,仅对当前玩家生效,例如P0、P1、D0、D1(0-99均可使用),不可自定义私人变量前缀。
② 全局变量:以G、A开头,用于记录全服通用数据,对所有玩家生效,例如G0、G1、A0、A1(0-499均可使用),适用于全服活动、全服统计等场景。
③ 临时变量:以M、N、S、I开头,用于记录临时数据,脚本执行完毕后变量值自动清空,例如M0、N1、S2,适用于临时判断、临时计算等场景。
④ 系统变量:预设的固定变量,用于调用玩家、游戏的基础信息,例如<$USERNAME>(玩家名称)、<$LEVEL>(玩家等级)、<$TIME>(当前时间),使用时需用<$>包裹。
(2)自定义变量
自定义变量是玩家根据脚本需求自行定义的变量,用于记录特定数据,命名需遵循以下规则:
① 自定义变量名称不可以P、D、M、N、S、I、G、A开头,避免与系统自带变量冲突。
② 变量名称仅可包含字母(大写)、数字,不可包含中文、特殊符号(如@、#、$),例如“Task01”“FightCount”是合法变量,“任务01”“Fight#Count”是非法变量。
③ 自定义变量需先定义后使用,定义方法为“SetVar 变量名 初始值”,例如“SetVar Task01 0”,将自定义变量Task01的初始值设为0。
2. 变量操作语法(常用命令)
变量的核心操作包括赋值、判断、增减,对应不同的脚本命令,所有命令需严格遵循语法规则,常用操作命令及用法如下:
① 赋值命令:SetVar 变量名 数值,用于给变量设置具体数值,例如“SetVar P0 1”,将私人变量P0的值设为1;“SetVar Task01 5”,将自定义变量Task01的值设为5。
② 判断命令:CheckVar 变量名 运算符 数值,用于判断变量值是否满足条件,运算符包括=(等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于),例如“CheckVar P0 = 1”,判断P0的值是否等于1;“CheckVar Task01 > 3”,判断Task01的值是否大于3。
③ 增减命令:IncVar 变量名 数值(变量值增加)、DecVar 变量名 数值(变量值减少),数值可正可负,例如“IncVar P0 1”,将P0的值增加1;“DecVar Task01 2”,将Task01的值减少2。
④ 清空命令:ClearVar 变量名,用于清空变量值,将变量值设为0,例如“ClearVar P0”,清空私人变量P0的值;“ClearVar G0”,清空全局变量G0的值。
3. 变量使用注意事项
① 变量使用时需全部大写,包括自定义变量,例如“setvar task01 0”“CheckVar p0 = 1”均会导致命令无效,正确写法为“SetVar TASK01 0”“CheckVar P0 = 1”。
② 私人变量、临时变量仅对当前玩家、当前脚本生效,切换玩家或脚本执行完毕后,临时变量会自动清空,私人变量需手动清空。
③ 全局变量对全服玩家生效,修改后所有玩家均可读取,需谨慎操作,避免误改全局变量导致全服脚本异常。
④ 变量值仅可设置为数字,不可设置为中文、字母或特殊符号,例如“SetVar P0 完成”是非法操作,会导致脚本报错。
五、传奇脚本常用命令语法(实操必备)
传奇脚本命令是实现游戏功能的核心,所有命令均需遵循固定语法格式,掌握常用命令的语法的格式,即可完成大部分基础脚本编写,以下按功能分类,详解常用命令的语法及用法。
1. 检测类命令语法
检测类命令主要用于检测段(#IF),判断玩家状态、物品、地图等条件,语法格式固定,常用命令如下:
① 等级检测:CheckLevel 数值,语法格式“CheckLevel N”,N为具体等级,用于检测玩家等级是否≥N,例如“CheckLevel 50”,检测玩家等级是否≥50级。
② 物品检测:CheckItem 物品名称 数量,语法格式“CheckItem 物品名 数量”,用于检测玩家是否拥有指定数量的物品,数量可省略(默认检测1个),例如“CheckItem 金币 10000”,检测玩家是否拥有10万金币。
③ 地图检测:IsOnMap 地图ID,语法格式“IsOnMap 地图ID”,用于检测玩家是否在指定地图内,地图ID为数字,例如“IsOnMap 5”,检测玩家是否在地图ID为5的副本内。
④ 无操作检测:CheckNoOperate 数值,语法格式“CheckNoOperate N”,N为时间(单位:秒),用于检测玩家无操作时间是否超过N秒,例如“CheckNoOperate 300”,检测玩家无操作时间是否超过300秒。
⑤ 变量检测:CheckVar 变量名 运算符 数值,语法格式“CheckVar 变量名 运算符 数值”,用于检测变量值是否满足条件,例如“CheckVar P0 = 2”,检测P0的值是否等于2。
2. 执行类命令语法
执行类命令主要用于执行段(#ACT、#ELSEACT),执行具体的游戏操作,语法格式固定,常用命令如下:
① 物品发放:Give 物品名称 数量,语法格式“Give 物品名 数量”,数量可省略(默认发放1个),命令结尾需加英文分号,例如“Give 元宝 10;”,发放10个元宝。
② 物品扣除:Take 物品名称 数量,语法格式“Take 物品名 数量”,数量可省略(默认扣除1个),命令结尾需加英文分号,例如“Take 金币 50000;”,扣除5万金币。
③ 传送命令:MapMove 地图ID 坐标X 坐标Y,语法格式“MapMove 地图ID X Y”,地图ID为数字,X、Y为坐标值,命令结尾需加英文分号,例如“MapMove 3 330 330;”,将玩家传送到地图ID为3、坐标330,330的位置。
④ 提示命令:SendMsg 颜色代码 提示内容,语法格式“SendMsg 颜色值 内容;”,颜色代码为1-255(5为红色、1为白色、255为金色),内容需用英文标点,例如“SendMsg 5 操作成功!;”。
⑤ 等级修改:ChangeLevel 数值,语法格式“ChangeLevel N”,N为目标等级,可正数(升级)或负数(降级),命令结尾需加英文分号,例如“ChangeLevel 1;”,将玩家等级降至1级。
⑥ 公告命令:SendBroad 颜色代码 公告内容,语法格式“SendBroad 颜色值 内容;”,全服发送公告,例如“SendBroad 5 全服活动开启!;”。
3. 辅助类命令语法
辅助类命令用于辅助脚本执行,提升脚本逻辑完整性,常用命令及语法如下:
① 脚本调用:#CALL 脚本路径 @脚本标识,语法格式“#CALL (脚本路径) @标识;”,用于调用其他脚本文件中的指定脚本段,例如“#CALL (\任务脚本\主线任务.txt) @主线1;”,调用主线任务脚本中的主线1脚本段。
② 日志记录:WriteLog 日志文件名 日志内容,语法格式“WriteLog 文件名 内容;”,用于记录脚本执行日志,例如“WriteLog 操作日志.txt 玩家<$USERNAME> 领取新手装备;”。
③ 客户端关闭:CloseClient;,语法格式“CloseClient;”,用于强制关闭玩家游戏客户端,无参数,命令结尾需加英文分号。
④ 登录禁止:BanLogin 数值,语法格式“BanLogin N;”,N为禁止登录时间(单位:分钟),N=0为永久禁登,例如“BanLogin 60;”,禁止玩家登录60分钟。
六、传奇脚本语法常见错误及排查(新手必看)
新手编写脚本时,常因违反语法规则导致脚本报错、无效,以下是最常见的语法错误及排查解决方法,逐一排查即可快速解决问题,无需复杂操作。
1. 命令大小写错误(最常见)
症状:服务端控制台提示“未知脚本命令”,脚本无法执行,例如将CheckLevel写为checklevel、#IF写为#if。
排查解决:逐一核对脚本中的所有关键字、命令,确保#IF、#ACT、#ELSEACT、BREAK及所有命令(CheckLevel、SendMsg等)全部大写,修改后保存,重启引擎即可。
2. 命令结尾遗漏分号
症状:服务端控制台提示“脚本语法错误”,脚本无法执行,或执行到某条命令后停止,例如“Give 金币 10000”遗漏分号。
排查解决:检查所有执行类命令、检测类命令,确保每条命令结尾都添加了英文分号“;”,尤其是多条命令连续编写时,不可遗漏任何一条。
3. 编码格式错误
症状:脚本文件打开后中文内容乱码,服务端提示“无法识别的字符”,脚本无法执行,或提示内容乱码。
排查解决:右键点击脚本文件,用记事本打开,点击“文件-另存为”,编码选择ANSI,保存覆盖原有文件,关闭记事本后重启服务端,乱码问题即可解决。
4. 变量使用错误
症状:脚本执行异常,变量判断失效,或服务端提示“变量未定义”,例如自定义变量未定义就使用、变量名称与系统自带变量冲突。
排查解决:① 自定义变量需先通过SetVar命令定义,再使用;② 检查变量名称,不可用系统自带变量前缀(P、D、G等);③ 确保变量使用时全部大写,变量值为数字。
5. 脚本结构错误
症状:脚本无效,服务端无报错,但无法触发执行,例如三段式结构顺序颠倒、遗漏BREAK命令、#IF与#ACT之间添加空行。
排查解决:核对脚本结构,确保#IF、#ACT、#ELSEACT顺序正确,每个完整脚本段末尾添加BREAK命令,关键字单独占一行,不可在关键字之间添加空行。
6. 标点符号错误
症状:服务端提示“脚本语法错误”,脚本无法执行,例如使用中文分号、中文句号,或命令中间添加中文标点。
排查解决:将脚本中的所有中文标点替换为英文标点,确保命令结尾用英文分号,提示内容中使用英文标点,修改后保存测试。
七、传奇脚本语法实操示例(直接可用)
结合常见游戏场景,编写符合语法规则的完整脚本,新手可直接复制粘贴,修改参数即可生效,直观掌握语法规则的实际应用。
示例1:等级达标领取奖励脚本
// 语法要点:三段式结构、等级检测命令、物品发放命令、提示命令,严格遵循大小写、标点规则
#IF
CheckLevel 40 // 检测玩家等级≥40级
CheckVar P0 = 0 // 检测玩家未领取过奖励(P0=0)
#ACT
Give 高级装备 1; // 发放高级装备1件
Give 元宝 50; // 发放元宝50个
SendMsg 5 等级达标,奖励已发放,请注意查收!; // 弹出提示
SetVar P0 1; // 将P0设为1,标记已领取奖励
#ELSEACT
SendMsg 5 等级不足40级,或已领取过奖励,无法领取!; // 条件不满足提示
BREAK // 终止脚本
示例2:物品兑换脚本
// 语法要点:物品检测命令、物品扣除命令、变量操作、多条件检测
#IF
CheckItem 低级材料 10 // 检测玩家拥有10个低级材料
CheckLevel ≥ 30 // 检测玩家等级≥30级
#ACT
Take 低级材料 10; // 扣除10个低级材料
Give 高级材料 1; // 发放1个高级材料
IncVar P1 1; // 兑换次数增加1次(P1记录兑换次数)
SendMsg 5 兑换成功,获得高级材料1个!; // 提示兑换成功
#ELSEACT
SendMsg 5 低级材料不足10个,或等级不足30级,无法兑换!; // 提示条件不满足
BREAK
示例3:定时执行脚本(机器人脚本)
// 语法要点:机器人命令、公告命令、定时检测语法
// 存放路径:Mirserver\Mir200\Envir\Robot_def\AutoRunRobot.txt
#AutoRun NPC HOUR 1 @全服公告; // 每1小时执行一次@全服公告脚本
// 存放路径:Mirserver\Mir200\Envir\Robot_def\RobotManage.txt
@全服公告
#ACT
SendBroad 255 全服提示:请各位玩家规范游戏行为,共同维护公平环境!; // 全服发送金色公告
WriteLog 公告日志.txt <$TIME> 发送全服公告一次; // 记录日志
BREAK
八、补充说明
1. 传奇脚本语法规则适用于所有类型传奇脚本,无论编写功能脚本、封挂脚本还是任务脚本,均需严格遵循上述规则,避免因语法错误导致脚本失效。
2. 不同引擎的扩展命令语法可能存在细微差异,编写脚本前,可查看对应引擎的帮助文档,确认扩展命令的语法格式,核心语法规则完全一致。
3. 编写脚本时,建议边编写边测试,每完成一个脚本段,就保存并重启引擎测试,及时发现语法错误,避免后续大面积修改。
4. 脚本编写完成后,建议备份脚本文件,避免修改错误导致脚本损坏,同时便于后续恢复和修改。
5. 避免使用复杂语法和冗余命令,脚本逻辑尽量简洁明了,既便于引擎解析,也便于后续修改和维护,基础语法即可满足大部分游戏功能需求。
6. 若服务端出现脚本相关报错,优先排查语法错误(大小写、标点、结构),再排查路径、编码等问题,大部分报错均可通过语法检查解决。

