传奇与传奇世界脚本运行机制与执行顺序全解

来源: 作者: 点击:
脚本运行的核心逻辑:事件驱动

传奇(Mir2)与传奇世界(Woool)的服务端脚本本质是事件驱动。引擎(M2Server)监控游戏事件(如登录、升级、对话),触发对应的脚本文件,按从上到下、先检测后执行的顺序逐行解析。

单脚本内部执行顺序

在任何一个脚本文件(.txt)内,引擎遵循严格的线性解析规则:
1. 顺序执行:从 [@标签] 开始,按行向下读取。先执行 #IF 条件判断,条件成立则执行 #ACT 动作,最后执行 #SAY 对话显示。
2. 逻辑块结构:标准的 #IF(条件)→ #ACT(执行)→ #SAY(对话)必须完整。若 #IF 不成立,则跳过 #ACT 执行 #ELSEACT(否则执行)或进入下一段。
3. 流程控制:BREAK 用于结束当前段,阻止继续向下执行;GOTO @标签 用于跳转到指定段落。

全局脚本文件的加载与触发顺序

不同功能的脚本文件在服务端启动和游戏过程中的执行优先级不同。以下是标准的触发链条:

触发时机/类型 核心脚本文件 (Mir2路径) 核心脚本文件 (传世路径) 执行顺序与作用

服务端启动 Robot.txt / AutoRunRobot.txt Robot.txt 最先加载。初始化全服定时器,用于定时刷怪、全服公告等全局循环任务。

玩家登录 QManage.txt (MapQuest_Def) LoginManage.txt (MapQuest_Def) 第二步执行。角色进入游戏瞬间触发,用于初始化变量、发放首充、加载封号。

事件触发 QFunction-0.txt (Envir) UserEvent.txt (Envir) 第三步执行。响应升级、死亡、使用物品、穿戴装备等系统事件。

NPC交互 Market_Def\*.txt Market_Def\*.txt 被动触发。当玩家点击NPC时,根据 Merchant.txt 配置加载对应脚本。

地图事件 MapEvent.txt MapEvent.txt 坐标触发。当玩家移动到特定地图坐标时自动触发。

注意:传奇世界脚本的架构与传奇Mir2高度相似,主要区别在于文件名(如传世多用 LoginManage.txt 代替 QManage.txt)。

传奇(Mir2)脚本执行全流程

1. 服务端启动阶段:Robot机器人

服务端启动时,优先读取 Mir200\Envir\Robot.txt(或 Robot_def\AutoRunRobot.txt)。
• 作用:设定按秒(SEC)、分(MIN)、小时(HOUR)循环执行的任务。

• 示例:#AutoRun NPC SEC 10 @每10秒,会每10秒执行一次 RobotManage.txt 中的 [@每10秒] 段。

2. 玩家登录瞬间:QManage.txt

角色选择界面点击“开始”后,引擎立即执行 Mir200\Envir\MapQuest_Def\QManage.txt 中的 [@Login] 段。
• 核心任务:

◦ 检测新人(ISNEWHUMAN)并发放新手装备。

◦ 加载保存的变量(LOADVAR)。

◦ 调用子脚本(CALL)进行封号设置。

3. 游戏过程事件:QFunction-0.txt

该文件是全局事件监听器,根据不同的触发标签执行对应段落:
• 升级触发:[@LevelUp],升级瞬间执行。

• 死亡触发:[@PlayDie],被击杀后执行。

• 使用物品:[@StdModeFuncX](X为物品库中的Anicount字段值)。

• 挖矿/采集:[@Gather]。

4. NPC与任务脚本:Market_Def

当玩家点击NPC时,引擎根据 Merchant.txt 中的配置路径,加载 Market_Def 目录下的对应 .txt 文件。
• 交互流程:从 [@main] 开始 → 玩家点击按钮(如 <点我传送/@传送>)→ 跳转到 [@传送] 段 → 执行 #ACT 动作(如 MAPMOVE)。

传奇世界(Woool)脚本运行差异

传奇世界引擎的逻辑与传奇Mir2基本一致,主要差异在于核心文件名:
• 登录脚本:传世通常使用 LoginManage.txt(路径:MapQuest_Def\LoginManage.txt)作为登录入口,功能同 QManage.txt。

• 事件脚本:传世使用 UserEvent.txt 处理升级、死亡等事件,功能同 QFunction-0.txt。

• 机器人脚本:同样使用 Robot.txt 进行定时任务调度。

脚本冲突与优先级规则

当多个脚本同时触发时(如登录时同时触发 QManage 和 QFunction),引擎按固定优先级处理:
1. 系统级脚本优先:Robot.txt(定时任务) > QManage.txt(登录) > QFunction-0.txt(事件)。
2. 同文件内按标签顺序:在 QFunction-0.txt 中,若多个标签同时满足(如升级同时触发了 [@LevelUp] 和某个任务标签),则按文件内的物理顺序从上到下执行。
3. NPC交互最后:NPC脚本属于被动触发,优先级最低,需等待玩家主动点击。

调试技巧:如何查看执行顺序

若脚本不生效,可通过以下方法排查执行顺序:
1. 加入调试信息:在怀疑未执行的脚本段开头加入 SENDMSG 6 提示:已执行到XXX段,上线观察聊天框提示。
2. 检查编码:所有脚本文件必须保存为 ANSI 编码,UTF-8编码会导致引擎无法解析,脚本直接不运行。
3. 查看M2报错:若脚本语法错误(如括号不匹配),M2Server控制台会直接报“Script Error”,并指出错误文件和行号。

掌握“Robot→Login→Event→NPC”这一核心链条,就能准确预判脚本的运行时机,避免变量未初始化或功能冲突的问题。