传奇脚本系统并非传统意义上的编程语言,而是一套基于标签跳转与逻辑判断的解释性指令集。其核心运行机制遵循严格的线性扫描原则,即引擎从脚本顶部开始逐行读取,直至遇到跳转指令或结束符。理解这一机制是掌握脚本编写的前提。一个标准的脚本段落通常由标签、条件判断、执行动作和对话显示四个部分组成,它们共同构成了NPC与玩家交互的基础逻辑。
脚本结构与核心关键字
脚本的骨架由特定的关键字搭建,这些关键字决定了指令的执行流向。最基础的组合是#IF、#ACT与#SAY。#IF用于引出检测条件,引擎会在此处暂停并验证后续的条件语句是否成立;若成立,则执行#ACT下方的具体指令,如给予物品或传送坐标;若不成立,则跳过#ACT块。#SAY用于在对话框中显示文本信息,通常紧跟在#ACT之后,告知玩家操作结果。
流程控制指令GOTO与BREAK是脚本逻辑跳转的关键。GOTO指令用于将执行权转移到指定的标签处,例如GOTO@main会将脚本读取指针瞬间移至[@main]标签下方,实现循环或分段执行。BREAK则用于强制结束当前脚本段的运行,防止引擎继续向下读取无关代码,这在多条件分支结构中尤为重要,能有效避免逻辑冲突。此外,#OR指令允许在#IF下方设置多重条件,只要满足其中任意一项即可触发执行,常用于兼容不同职业或物品的检测。
常用检测命令与逻辑判断
检测命令是脚本的“感官”,负责获取玩家的状态信息。CHECKLEVEL用于检测人物等级,配合比较运算符可实现等级门槛限制。CHECKJOB用于识别职业,通过参数Warr、Wizard或Taos区分战士、法师与道士。CHECKGOLD与CHECKGAMEGOLD分别用于检测金币和元宝数量,是交易类脚本的核心。CHECKITEM用于检测背包内的物品及数量,而CHECKITEMW则专门检测人物身上穿戴的装备。
逻辑变量的处理依赖于G变量与D变量。G变量为全局变量,数据在服务器重启前永久保存,适合记录任务进度或累计数值;D变量为临时变量,下线即清零,适合处理临时状态。MOV指令用于给变量赋值,INC与DEC分别用于变量的自增与自减。EQUAL、LARGE、SMALL则用于比较变量的数值大小,例如LARGEG10100表示检测G10变量是否大于100。RANDOM指令用于生成随机数,配合#IF可实现概率性事件,如“进入地图有10%几率遇到BOSS”。
执行指令与功能实现
执行命令是脚本的“手脚”,负责改变游戏世界的数据。GIVE与TAKE是最基础的物品操作指令,分别用于向玩家背包发放和回收物品。MAP与MAPMOVE用于地图传送,前者将玩家送至指定地图的随机坐标,后者可精确到具体的X、Y坐标。MONCLEAR用于清除指定地图内的所有怪物,常用于副本重置或活动结束后的清理工作。MONGEN则用于在指定位置刷出怪物,配合变量可实现动态刷怪。
人物属性修改指令提供了强大的后台管理功能。CHANGELEVEL可直接调整人物等级,CHANGEEXP用于增减经验值。CHANGEPKPOINT用于调整PK值,CHANGEGENDER与CHANGEJOB甚至能修改人物的性别与职业。ADDSKILL与DELSKILL用于技能的授予与剥夺。GAMEGOLD指令专门用于调整元宝数量,支持加减赋值。KICK指令用于将玩家踢下线,常用于违规处理。
符号定义与格式规范
脚本的编写必须遵循严格的符号规范,否则会导致引擎无法识别。[@标签名]用于定义脚本段落,标签名通常由字母或数字组成,是GOTO指令的目标锚点。用于在对话框中创建可点击的选项,点击后会自动跳转到对应的标签处,实现菜单式交互。符号用于文本换行,当对话框内容过长时,使用该符号可将文字分行显示,保持界面整洁。
注释符号;用于在代码中添加说明文字,引擎在读取时会忽略该行内容,这对于脚本的后期维护与调试至关重要。变量引用通常使用格式,用于将数值型变量转换为字符串并在对话框中显示,例如“你的当前积分是:”。#ELSEACT与#ELSESAY则构成了条件判断的否定分支,当#IF下的条件不满足时,引擎会执行这两个指令下方的内容,通常用于提示玩家“条件不足”或“背包已满”等反馈信息。
脚本结构与核心关键字
脚本的骨架由特定的关键字搭建,这些关键字决定了指令的执行流向。最基础的组合是#IF、#ACT与#SAY。#IF用于引出检测条件,引擎会在此处暂停并验证后续的条件语句是否成立;若成立,则执行#ACT下方的具体指令,如给予物品或传送坐标;若不成立,则跳过#ACT块。#SAY用于在对话框中显示文本信息,通常紧跟在#ACT之后,告知玩家操作结果。
流程控制指令GOTO与BREAK是脚本逻辑跳转的关键。GOTO指令用于将执行权转移到指定的标签处,例如GOTO@main会将脚本读取指针瞬间移至[@main]标签下方,实现循环或分段执行。BREAK则用于强制结束当前脚本段的运行,防止引擎继续向下读取无关代码,这在多条件分支结构中尤为重要,能有效避免逻辑冲突。此外,#OR指令允许在#IF下方设置多重条件,只要满足其中任意一项即可触发执行,常用于兼容不同职业或物品的检测。
常用检测命令与逻辑判断
检测命令是脚本的“感官”,负责获取玩家的状态信息。CHECKLEVEL用于检测人物等级,配合比较运算符可实现等级门槛限制。CHECKJOB用于识别职业,通过参数Warr、Wizard或Taos区分战士、法师与道士。CHECKGOLD与CHECKGAMEGOLD分别用于检测金币和元宝数量,是交易类脚本的核心。CHECKITEM用于检测背包内的物品及数量,而CHECKITEMW则专门检测人物身上穿戴的装备。
逻辑变量的处理依赖于G变量与D变量。G变量为全局变量,数据在服务器重启前永久保存,适合记录任务进度或累计数值;D变量为临时变量,下线即清零,适合处理临时状态。MOV指令用于给变量赋值,INC与DEC分别用于变量的自增与自减。EQUAL、LARGE、SMALL则用于比较变量的数值大小,例如LARGEG10100表示检测G10变量是否大于100。RANDOM指令用于生成随机数,配合#IF可实现概率性事件,如“进入地图有10%几率遇到BOSS”。
执行指令与功能实现
执行命令是脚本的“手脚”,负责改变游戏世界的数据。GIVE与TAKE是最基础的物品操作指令,分别用于向玩家背包发放和回收物品。MAP与MAPMOVE用于地图传送,前者将玩家送至指定地图的随机坐标,后者可精确到具体的X、Y坐标。MONCLEAR用于清除指定地图内的所有怪物,常用于副本重置或活动结束后的清理工作。MONGEN则用于在指定位置刷出怪物,配合变量可实现动态刷怪。
人物属性修改指令提供了强大的后台管理功能。CHANGELEVEL可直接调整人物等级,CHANGEEXP用于增减经验值。CHANGEPKPOINT用于调整PK值,CHANGEGENDER与CHANGEJOB甚至能修改人物的性别与职业。ADDSKILL与DELSKILL用于技能的授予与剥夺。GAMEGOLD指令专门用于调整元宝数量,支持加减赋值。KICK指令用于将玩家踢下线,常用于违规处理。
符号定义与格式规范
脚本的编写必须遵循严格的符号规范,否则会导致引擎无法识别。[@标签名]用于定义脚本段落,标签名通常由字母或数字组成,是GOTO指令的目标锚点。用于在对话框中创建可点击的选项,点击后会自动跳转到对应的标签处,实现菜单式交互。符号用于文本换行,当对话框内容过长时,使用该符号可将文字分行显示,保持界面整洁。
注释符号;用于在代码中添加说明文字,引擎在读取时会忽略该行内容,这对于脚本的后期维护与调试至关重要。变量引用通常使用格式,用于将数值型变量转换为字符串并在对话框中显示,例如“你的当前积分是:”。#ELSEACT与#ELSESAY则构成了条件判断的否定分支,当#IF下的条件不满足时,引擎会执行这两个指令下方的内容,通常用于提示玩家“条件不足”或“背包已满”等反馈信息。

