传奇M2引擎FQ脚本错误原因及修复方法

来源: 作者: 点击:
传奇M2引擎运行中出现“FQ脚本错误”通常指向脚本文件语法异常、路径缺失或触发逻辑冲突,直接影响任务、对话或功能执行。以下是具体分析与处理步骤:

一、定位FQ错误来源
FQ为“发送消息”指令(SendMsg)的内部代号,错误多发生在 NPC 脚本调用 SendMsg 时参数不合法。查看 Mir200Log 目录下最新 GameLog.txt,搜索关键词 “FQ” 或 “Script Error”,可获取具体脚本路径及行号,例如:

[14:22:05] Script error in D:MirServerMir200EnvirQuestDiaryLoginLogin.txt line 37


二、检查SendMsg语法格式
标准 SendMsg 用法为:

IF
ACT
SENDMSG 0 你的角色等级不足!

常见错误包括:
缺少消息类型参数(0=系统提示,1=弹窗,6=顶部滚动)
消息内容含未转义的特殊字符(如 |、#、%)
行首缺少 #ACT 或 #SAY 标签直接写 SENDMSG
修正示例:

IF
EQUAL $LEVEL 0
ACT
SENDMSG 6 等级不能为0!


三、验证脚本文件编码与换行符
M2引擎仅支持 ANSI 编码与 Windows 换行(CRLF)。若脚本用 UTF-8 或 Unix 换行(LF)保存,会导致指令解析错位。使用 Notepad++ 打开报错脚本:
菜单栏选择“编码 → 转为 ANSI”
选择“视图 → 显示符号 → 显示行尾符”,确认每行结尾为 CR LF
删除行尾多余空格或不可见控制字符

四、排查变量与条件冲突
FQ错误常伴随变量未定义或条件嵌套过深。例如:

IF
CHECK [100] 1
ACT
SENDMSG 0 你已完成任务!

若 [100] 未在 QFunction-0.txt 中声明为全局变量,引擎将中断执行。解决方法:
在 QFunction-0.txt 首行添加 ;@GlobalVar [100]
避免在 #IF 块内嵌套超过三层逻辑判断

五、检查脚本路径与文件名大小写
Windows 虽不区分文件名大小写,但部分 M2 引擎版本对路径敏感。确保:
脚本调用路径与实际目录完全一致(如 QuestDiaryMain 而非 questdiarymain)
文件名无中文或空格(推荐使用 Login.txt 而非 登录脚本.txt)

六、禁用第三方插件干扰
某些插件(如自动喊话、防脱机模块)会挂钩 SendMsg 函数。临时移除 PlugIn 目录下所有 .dll 文件,重启引擎测试。若 FQ 错误消失,则逐个启用插件定位冲突源。

七、修复QFunction-0.txt主控脚本
该文件为所有脚本的入口,若其结构损坏将引发连锁错误。检查要点:
每个标签(如 @Login、@PlayStart)必须独占一行且以 @ 开头
标签后不可紧跟空格或注释
避免在标签段内直接写 SENDMSG,必须包裹在 #IF / #ACT 中

八、使用脚本验证工具预检
通过 M2 脚本调试器(如 M2ScriptChecker)批量扫描 QuestDiary 目录:
加载全部 .txt 脚本
自动标红语法错误行(如缺少 #ENDIF、括号不匹配)
导出错误报告逐项修正

FQ脚本错误本质是消息发送指令执行失败,根源多在脚本书写规范性。优先从日志定位文件与行号,再依次验证语法、编码、变量及路径。保持脚本结构扁平化、消息内容简洁化,可大幅降低此类错误发生概率。