传奇M2引擎FQ脚本错误:根源排查与傻瓜式修复方案

来源: 作者: 点击:
传奇M2引擎报“FQ脚本错误”或者弹出带“FQ”字样的脚本报错,通常不是指某个具体的命令错了,而是脚本在执行过程中触发了引擎的“防穷举”或“循环次数限制”机制。FQ在这里可以理解为“防穷”或“循环防护”。老GM都知道,这种错误多半是因为脚本里用了太多的GOTO跳转,跳来跳去把引擎跳烦了,直接给你掐断报错。下面直接给解决办法,分两种情况处理。


一、什么是FQ脚本错误?先看懂报错信息

M2引擎弹红字报错,最常见的是这种格式:

[脚本死循环] NPC:XXX 位置:0(0:0) 命令:GOTO @XXX

或者类似:

ScriptGotoCountLimit exceeded (1000)

这种报错的核心意思是:脚本里出现了无限循环或过多的跳转,引擎为了保护服务器不被拖垮,强制终止了脚本执行。FQ类的错误通常指向“防穷举检测”,也就是引擎检测到某个脚本段在短时间内被反复调用,或者GOTO循环次数超过了默认限制(通常是10次或1000次)。

导致FQ脚本错误的几个常见原因:

1. 脚本里GOTO命令用得太多,形成死循环
2. #CALL调用嵌套过深,互相跳转导致循环
3. 检测类脚本(比如定时检测在线、检测装备)循环间隔太短,触发频率过高
4. 脚本标签重复,导致跳转逻辑混乱


二、傻瓜式修复方法一:修改循环次数限制(最简单)

如果报错信息里明确提到“ScriptGotoCountLimit”,或者报错格式是“命令:GOTO @XXX”,那么90%的情况可以通过修改引擎配置文件解决。

操作步骤:

1. 打开你的服务端文件夹,找到这个路径:
D:\MirServer\Mir200\!Setup.txt

注意:文件名是“!Setup.txt”,前面有个感叹号,别找错了。

2. 用记事本打开!Setup.txt,按Ctrl+F搜索关键词:
ScriptGotoCountLimit

你会看到类似这样的一行:
ScriptGotoCountLimit=10
或者
ScriptGotoCountLimit=1000

3. 把等号后面的数字改大。建议改成:
ScriptGotoCountLimit=50000

这个数值足够应付绝大多数脚本循环,又不至于让服务器卡死。

4. 保存文件,关闭记事本。

5. 最关键的一步:重启M2服务器。不改重启不生效。

改完之后再观察M2窗口,那个烦人的FQ报错应该就消失了。


三、傻瓜式修复方法二:排查脚本本身(如果改数值没用)

有时候改了循环次数还是报错,那就是脚本本身写的有问题,导致逻辑死循环。这种情况需要找到具体是哪个NPC或功能在报错。

先看M2报错信息里提示的“NPC:XXX”,比如“NPC:QFunction”或“NPC:RobotManage”或“NPC:VIP泡点”。这告诉你问题出在哪个脚本文件里。

常见问题脚本及处理方法:

1. QFunction-0.txt(功能脚本)
如果报错指向QFunction,说明是功能触发脚本里出了问题。通常是因为某个触发段(比如捡物品、穿装备、杀怪)里用了GOTO跳转,而且跳转目标又跳回来,形成死循环。
处理方法:打开QFunction-0.txt,搜索GOTO命令,看看有没有连续跳转。尽量把GOTO改成其他写法,或者用#CALL调用外部脚本但注意不要互相调用。

2. RobotManage.txt(机器人脚本)
如果报错指向RobotManage,说明是自动执行的机器人脚本(比如每小时触发、每分钟触发)里循环次数太多。
处理方法:打开RobotManage.txt,找到对应的脚本段,检查GOTO使用频率。机器人脚本里尽量少用GOTO,直接用#IF判断后执行命令就行。

3. NPC脚本(比如“VIP泡点”、“传送员”)
如果报错指向具体NPC名称,比如“VIP泡点”,就去Envir\Market_Def或Envir\NPCs目录下找到这个NPC的脚本文件。
打开脚本,搜索GOTO,看看有没有出现A跳B、B跳A的互相跳转,或者自己跳自己的情况。这种是典型的死循环。
处理方法:把互相跳转的逻辑改成单向的,或者用#ELSEIF来划分条件,避免反复跳转。

4. 标签重复问题
还有一种情况是脚本里标签重复,比如两个地方都写了[@一],导致跳转时不知道该去哪。
处理方法:打开脚本,搜索“@一”、“@二”之类的标签,确保每个标签只在脚本里出现一次。如果有重复,把其中一个改名,比如改成“@一1”、“@一2”之类的不重复名字。


四、额外提醒:写脚本时怎么避免FQ错误

修改完问题之后,以后写脚本注意几点,能大大降低FQ报错概率:

1. 少用GOTO,多用#CALL调用外部文件。但注意#CALL不要嵌套太深,一般不超过三层。
2. 如果非要用GOTO,可以在跳转前加DelayGOTO延迟跳转,比如DelayGOTO 2 @XXX,让脚本喘口气。
3. #IF后面一定要跟检测条件,不要直接#ACT执行命令,否则容易导致无脑循环。
4. 同一个#ACT下面不要写多个GOTO,一个执行段只跳一次。


五、最后总结

遇到M2引擎报FQ脚本错误,别慌。先看M2报错信息里提示的NPC名称和命令。如果是GOTO类报错,先去!Setup.txt把ScriptGotoCountLimit改成50000,重启M2。如果还报,再去对应的脚本文件里找GOTO和标签重复的问题。

按这个顺序操作,90%以上的FQ脚本错误都能解决。如果还不行,那就要具体分析脚本逻辑了,但那种情况比较少见,多数都是上面两种原因。