FQ脚本错误在M2引擎的运行日志中通常以“ScriptError:FQCommandSyntaxError”或直接标记“FQ”关键词的形式出现。这里的FQ本质上是引擎内部对某一类脚本指令的代号,多与消息发送、条件检测或功能触发相关。报错发生后,表现为脚本执行到特定行时中断,对应NPC对话无响应、功能按钮失效,严重时M2控制台会持续刷红字并伴随卡顿。修复的核心思路不是重装引擎,而是根据日志中给出的文件路径和行号,逐一核对脚本的语法、参数与编码格式。
###第一步:从日志中锁定报错的具体位置
M2引擎会将脚本错误记录在`Mir200\Log\ScriptError.log`文件中,控制台的红字信息也会同步显示文件名、行号和错误类型。打开该日志,找到最新一条包含“FQ”或“ScriptError”的记录,记录下三个关键信息:脚本文件名(例如QFunction-0.txt或某NPC脚本)、行号、以及括号内的具体错误描述(如Missing‘)’或Unknowncommand)。有了这些信息,后续排查就有明确目标,不需要盲目翻找所有脚本文件。
###第二步:检查FQ指令的语法格式
FQ相关指令对格式的要求比较严格,最常见的错误集中在三个方面。
括号不匹配。FQ指令中使用的圆括号必须成对出现。例如`@FQ(CheckItem10011`缺少右侧闭合括号,引擎解析到行尾时无法找到配对符号,直接抛出语法错误。正确写法是`@FQ(CheckItem10011)`。用Notepad++打开脚本后,开启“显示所有字符”功能,可以直观看到括号是否配对。
参数分隔符用错。FQ指令的参数之间必须用英文半角空格分隔,不能用逗号、中文空格或制表符。比如`@FQ(CheckMap3330270)`中的逗号会导致解析失败,应改为`@FQ(CheckMap3330270)`。同样,参数之间的空格也不能是中文全角空格,否则引擎会将参数识别为一个整体字符串,导致类型不匹配。
命令关键词拼写错误。FQ指令的关键词区分大小写且拼写固定。将`CheckLevel`误写为`CheckLeval`、`TakeItem`误写为`TakeItme`,引擎无法识别命令,直接报错“FQ指令未定义”或“未知命令”。修复时建议直接对照引擎自带的脚本命令手册进行核对,不要凭记忆书写。
###第三步:检查脚本文件的编码与换行符
M2引擎对脚本文件的编码格式有硬性要求,只支持ANSI编码,不支持UTF-8(无论是否带BOM),也不支持Unicode。如果脚本文件是用Windows记事本另存为UTF-8格式,或者从网页复制粘贴时引入了Unicode字符,引擎读取时会在FQ指令附近出现解析错位,报错行号可能与实际出错位置存在偏差。
用Notepad++打开报错的脚本文件,在菜单栏选择“编码”,确认当前编码为ANSI。如果显示的是UTF-8或UTF-8BOM,点击“转为ANSI编码”后保存。同时检查换行符格式:选择“视图→显示符号→显示行尾符”,确认每行结尾显示为CRLF(Windows格式)。如果显示为LF(Unix格式),引擎同样可能解析异常,通过“编辑→档案格式转换→转换为Windows格式”进行修复。
###第四步:核对变量声明与条件逻辑
部分FQ脚本错误与变量的使用直接相关。如果报错发生在包含条件判断的FQ指令附近,需要检查被判断的变量是否已经在脚本中正确声明。
M2引擎的自定义变量分为数字型和字符型两类。数字型变量以P、G、M、I、D、N开头,字符型变量以S、A开头。如果在一个FQ条件中使用了变量`<$STR(S10)>`,但S10从未被赋值或声明过,引擎读取该变量时得到空值,导致FQ指令的参数类型不匹配而报错。
检查方法是在报错脚本的头部或全局变量声明文件中,搜索该变量名。如果没有声明,需要补充声明语句或先执行一次赋值操作。例如,在`QFunction-0.txt`中,全局变量应在文件开头区域用`VAR`命令进行声明。
###第五步:检查FQ脚本功能是否被引擎禁用
M2引擎的某些版本中,FQ脚本功能可能默认处于关闭状态,或者被之前的操作意外禁用了。进入M2引擎主界面,点击“选项”菜单,找到“脚本设置”或“功能设置”,查看其中是否有“启用FQ命令支持”或类似名称的复选框。如果未被勾选,将其勾选后重启M2引擎。部分较老的引擎版本可能完全不支持某些高级FQ指令,此时需要对照引擎版本说明,确认当前使用的FQ命令是否在该版本的支持范围内。如果引擎版本过低,要么升级引擎,要么将脚本中的FQ指令替换为旧版本支持的替代写法。
###第六步:验证修复并重载脚本
完成上述任意一处修改后,保存文件并确保编码为ANSI。不需要重启整个服务端,在M2控制台输入`@ReloadQFunction`命令(如果修改的是QFunction-0.txt)或使用引擎自带的“重载脚本”功能,让引擎重新加载修改后的脚本。观察控制台是否还有FQ相关红字。如果报错消失,进入游戏测试对应的NPC或功能是否恢复正常。如果报错依然存在但行号发生了变化,说明修改引入的新问题或原本存在多个错误点,继续按照日志提示处理下一处即可。
###第一步:从日志中锁定报错的具体位置
M2引擎会将脚本错误记录在`Mir200\Log\ScriptError.log`文件中,控制台的红字信息也会同步显示文件名、行号和错误类型。打开该日志,找到最新一条包含“FQ”或“ScriptError”的记录,记录下三个关键信息:脚本文件名(例如QFunction-0.txt或某NPC脚本)、行号、以及括号内的具体错误描述(如Missing‘)’或Unknowncommand)。有了这些信息,后续排查就有明确目标,不需要盲目翻找所有脚本文件。
###第二步:检查FQ指令的语法格式
FQ相关指令对格式的要求比较严格,最常见的错误集中在三个方面。
括号不匹配。FQ指令中使用的圆括号必须成对出现。例如`@FQ(CheckItem10011`缺少右侧闭合括号,引擎解析到行尾时无法找到配对符号,直接抛出语法错误。正确写法是`@FQ(CheckItem10011)`。用Notepad++打开脚本后,开启“显示所有字符”功能,可以直观看到括号是否配对。
参数分隔符用错。FQ指令的参数之间必须用英文半角空格分隔,不能用逗号、中文空格或制表符。比如`@FQ(CheckMap3330270)`中的逗号会导致解析失败,应改为`@FQ(CheckMap3330270)`。同样,参数之间的空格也不能是中文全角空格,否则引擎会将参数识别为一个整体字符串,导致类型不匹配。
命令关键词拼写错误。FQ指令的关键词区分大小写且拼写固定。将`CheckLevel`误写为`CheckLeval`、`TakeItem`误写为`TakeItme`,引擎无法识别命令,直接报错“FQ指令未定义”或“未知命令”。修复时建议直接对照引擎自带的脚本命令手册进行核对,不要凭记忆书写。
###第三步:检查脚本文件的编码与换行符
M2引擎对脚本文件的编码格式有硬性要求,只支持ANSI编码,不支持UTF-8(无论是否带BOM),也不支持Unicode。如果脚本文件是用Windows记事本另存为UTF-8格式,或者从网页复制粘贴时引入了Unicode字符,引擎读取时会在FQ指令附近出现解析错位,报错行号可能与实际出错位置存在偏差。
用Notepad++打开报错的脚本文件,在菜单栏选择“编码”,确认当前编码为ANSI。如果显示的是UTF-8或UTF-8BOM,点击“转为ANSI编码”后保存。同时检查换行符格式:选择“视图→显示符号→显示行尾符”,确认每行结尾显示为CRLF(Windows格式)。如果显示为LF(Unix格式),引擎同样可能解析异常,通过“编辑→档案格式转换→转换为Windows格式”进行修复。
###第四步:核对变量声明与条件逻辑
部分FQ脚本错误与变量的使用直接相关。如果报错发生在包含条件判断的FQ指令附近,需要检查被判断的变量是否已经在脚本中正确声明。
M2引擎的自定义变量分为数字型和字符型两类。数字型变量以P、G、M、I、D、N开头,字符型变量以S、A开头。如果在一个FQ条件中使用了变量`<$STR(S10)>`,但S10从未被赋值或声明过,引擎读取该变量时得到空值,导致FQ指令的参数类型不匹配而报错。
检查方法是在报错脚本的头部或全局变量声明文件中,搜索该变量名。如果没有声明,需要补充声明语句或先执行一次赋值操作。例如,在`QFunction-0.txt`中,全局变量应在文件开头区域用`VAR`命令进行声明。
###第五步:检查FQ脚本功能是否被引擎禁用
M2引擎的某些版本中,FQ脚本功能可能默认处于关闭状态,或者被之前的操作意外禁用了。进入M2引擎主界面,点击“选项”菜单,找到“脚本设置”或“功能设置”,查看其中是否有“启用FQ命令支持”或类似名称的复选框。如果未被勾选,将其勾选后重启M2引擎。部分较老的引擎版本可能完全不支持某些高级FQ指令,此时需要对照引擎版本说明,确认当前使用的FQ命令是否在该版本的支持范围内。如果引擎版本过低,要么升级引擎,要么将脚本中的FQ指令替换为旧版本支持的替代写法。
###第六步:验证修复并重载脚本
完成上述任意一处修改后,保存文件并确保编码为ANSI。不需要重启整个服务端,在M2控制台输入`@ReloadQFunction`命令(如果修改的是QFunction-0.txt)或使用引擎自带的“重载脚本”功能,让引擎重新加载修改后的脚本。观察控制台是否还有FQ相关红字。如果报错消失,进入游戏测试对应的NPC或功能是否恢复正常。如果报错依然存在但行号发生了变化,说明修改引入的新问题或原本存在多个错误点,继续按照日志提示处理下一处即可。

