传奇及传奇世界脚本运行核心遵循“加载-触发-执行-终止”全流程,执行顺序受脚本类型、触发条件、命令优先级三重约束。不同场景下脚本执行逻辑一致,核心差异集中在加载时机与触发方式,具体运行机制及执行顺序如下。
一、传奇与传奇世界脚本核心运行前提
脚本运行需满足两个基础条件,否则会出现执行失败或无响应:
1. 脚本文件完整性:所有脚本均以.txt格式存储,需放在服务端指定目录(传奇为Mir200/Envir,传奇世界为Data/Script),缺失核心脚本文件或路径错误,会导致脚本无法被引擎识别
2. 引擎加载有效性:服务端启动时,M2引擎(传奇)或WorldServer引擎(传奇世界)会自动扫描脚本目录,加载所有合法脚本;未加载的脚本需通过引擎“重载脚本”功能手动激活,否则触发条件满足也无法执行
二、传奇脚本执行顺序核心规则
传奇脚本执行遵循“全局加载优先、触发类型排序、命令自上而下”三大原则,具体顺序可分为脚本加载顺序和单脚本内部执行顺序两个层面:
1. 脚本加载执行顺序(服务端启动阶段)
1. 系统核心脚本优先:引擎首先加载全局配置类脚本,包括QManage.txt(登录脚本)、Login.txt(登录验证脚本)、MapQuest_def.txt(地图基础脚本),此类脚本控制全服基础规则,加载失败会导致服务端无法正常启动
2. 功能类脚本次之:加载完核心脚本后,引擎依次加载任务脚本(QuestDiary文件夹)、怪物脚本(MonItems.txt、MonSay.txt)、物品脚本(ItemUse.txt、MakeItem.txt),加载顺序按文件夹命名排序,同类脚本按文件名首字母排序
3. 自定义脚本最后:用户添加的自定义脚本(如泡点脚本、活动脚本)若放在自定义文件夹,需确保文件夹命名在QuestDiary之后,否则会滞后加载;可通过修改文件夹名称前缀(如“01-活动脚本”)调整加载优先级
2. 单脚本内部执行顺序(触发后阶段)
1. 触发条件判断优先:脚本被触发后,首先执行条件判断命令(#IF),未满足条件则直接跳转至#ELSEACT(若存在)或终止执行;多个#IF条件按书写顺序依次判断,满足第一个条件后不再执行后续条件判断
2. 命令执行自上而下:满足触发条件后,按脚本内命令书写顺序依次执行,即先执行#ACT下第一条命令,完成后再执行第二条,直至所有命令执行完毕或遇到终止命令(Break、Return)
3. 跳转命令中断顺序:若脚本中存在#GOTO或@goto跳转命令,会中断当前自上而下的执行顺序,直接跳转至指定标签(如@goto @main),从标签后第一条命令重新开始执行,形成循环或分支执行逻辑
3. 不同触发类型脚本执行优先级(同场景触发)
同一时间满足多个脚本触发条件时,按触发类型优先级排序执行,从高到低依次为:
1. 系统强制脚本:如服务器重启脚本、全服公告脚本,优先级最高,不受其他脚本执行状态影响
2. 玩家操作触发脚本:如物品使用(ItemUse.txt)、NPC对话(Dialog.txt)、技能释放触发脚本,优先级次之,触发后立即中断低优先级脚本执行
3. 地图事件脚本:如进入地图触发、怪物死亡触发、特定坐标触发脚本,优先级中等
4. 定时脚本:如泡点经验脚本、定时活动脚本,优先级最低,若与高优先级脚本冲突,会延迟至高优先级脚本执行完毕后再运行
三、传奇世界脚本运行机制与执行流程
传奇世界脚本运行机制与传奇同源,核心差异在于脚本目录结构与部分触发命令,运行流程可分为“加载-触发-执行-终止”四步,具体如下:
1. 第一步:脚本加载(服务端启动/重载阶段)
1. 引擎扫描Data/Script目录,优先加载GlobalScript.txt(全局脚本),定义全服脚本运行基础规则
2. 依次加载RoleScript(角色脚本)、MapScript(地图脚本)、ItemScript(物品脚本)、TaskScript(任务脚本),加载过程中自动校验脚本语法,存在语法错误(如缺少#END、命令拼写错误)的脚本会被标记为无效,不参与后续执行
2. 第二步:脚本触发(玩家/系统操作阶段)
传奇世界脚本触发方式与传奇一致,主要分为四类,触发条件满足后引擎会标记对应脚本为待执行状态:
1. 玩家主动触发:点击NPC、使用物品、释放技能、进入指定地图等操作,如使用“传送卷轴”触发ItemScript中对应的传送脚本
2. 系统定时触发:通过脚本中SetTimer命令设定执行周期,到点自动触发,如每小时执行一次的全服福利脚本
3. 事件被动触发:怪物死亡、玩家升级、完成任务等事件触发,如击杀BOSS后触发掉落奖励脚本
4. 强制手动触发:GM通过引擎“执行脚本”功能直接触发,优先级最高,可中断其他正在执行的脚本
3. 第三步:脚本执行(核心运行阶段)
1. 命令优先级排序:执行前引擎会对脚本内命令分类,系统命令(如SENDMSG、MAPMOVE)优先级高于功能命令(如ChangeExp、GiveItem),优先执行系统命令确保基础逻辑生效
2. 顺序执行与分支跳转:无跳转命令时,按书写顺序自上而下执行;存在@goto跳转时,跳转至指定标签后继续顺序执行,若跳转标签不存在,脚本直接终止并记录错误日志
3. 多脚本并发处理:同时触发多个脚本时,按“系统>玩家操作>事件>定时”优先级依次执行,高优先级脚本执行期间,低优先级脚本进入等待队列,直至高优先级脚本执行完毕
4. 第四步:脚本终止(执行完成阶段)
脚本终止分为三种情况,均会释放执行资源:
1. 正常终止:脚本内所有命令执行完毕,自动终止
2. 强制终止:执行过程中遇到Break(中断)、Return(返回)命令,或触发条件消失(如玩家离开触发地图),立即终止
3. 错误终止:执行过程中遇到无效命令、数据读取失败(如数据库连接异常),终止执行并在引擎日志中记录错误信息
三、传奇与传奇世界脚本执行共性案例(以泡点脚本为例)
以常见的泡点升级脚本为例,直观呈现执行顺序与运行流程:
1. 加载阶段:服务端启动时,引擎加载QuestDiary/泡点脚本.txt,校验脚本语法有效性
2. 触发阶段:玩家点击泡点NPC,触发脚本内(@main)标签对应的对话命令,执行#IF条件判断(检查玩家等级是否达标)
3. 执行阶段:满足等级条件后,按顺序执行#ACT下的SetScTimer(设置定时器)、MapMove(传送至泡点地图)、SENDMSG(发送提示信息)命令;定时器生效后,每间隔1秒执行一次(@OnTimer)标签下的ChangeExp(增加经验)命令
4. 终止阶段:玩家离开泡点地图,脚本触发#IF isonmap(检查是否在泡点地图)条件不满足,执行#ELSEACT下的KillScTimer(关闭定时器)、MapMove(传送回安全区)命令,脚本正常终止
四、脚本执行与运行核心注意事项
1. 脚本命令区分大小写,传奇与传奇世界脚本命令均对大小写敏感,如#If与#if不通用,拼写错误会导致命令执行失败
2. 避免循环执行死锁:跳转命令使用时需设置终止条件,如未设置等级上限的泡点脚本,会出现无限执行的情况,占用引擎资源
3. 重载脚本不中断当前执行:修改脚本后重载,正在执行的脚本会继续运行至终止,新脚本逻辑仅对重载后触发的脚本生效
4. 优先级冲突处理:若需让低优先级脚本优先执行,可在脚本内添加“Wait”命令延迟高优先级脚本触发,或通过引擎“脚本优先级设置”功能手动调整
5. 错误排查依赖日志:脚本执行失败时,可在引擎“日志管理”中查看脚本错误日志,按日志提示的行号定位错误命令,常见错误包括命令拼写错误、标签缺失、条件判断参数错误
传奇脚本执行顺序详解 传奇世界脚本运行机制与流程
来源:
作者:
点击:

