传奇QFunction-0脚本触发失效原因及排查方法

来源: 作者: 点击:
在传奇服务端中,QFunction-0文件内的脚本命令语法正确但功能失效(如使用回城卷物品消失却不传送、金条消失不加金币),通常与M2配置、文件命名、事件绑定或变量作用域有关。以下为系统性排查步骤。

一、确认QFunction-0文件是否被M2加载

HERO引擎默认读取的主脚本文件为 QFunction.txt,而非 QFunction-0.txt。若将脚本写入 QFunction-0.txt,M2不会自动加载该文件,导致所有标签无法触发。
解决方法:
将 QFunction-0.txt 重命名为 QFunction.txt,并确保位于 D:MirServerMir200Envir 目录下;
或在M2管理界面“选项”→“高级设置”中检查“用户脚本文件名”是否指定为 QFunction-0.txt(默认为空,即使用标准名)。

二、检查物品触发方式是否匹配

回城卷、金条等功能需通过特定事件触发,常见错误包括:
使用 [@ItemX] 标签但未在 !Item.txt 中设置物品的“特殊属性”为1;
物品类型设为普通药水或杂物,未启用“可触发脚本”标志。

验证方法:
打开 Dbase!Item.txt,找到对应物品行(如回城卷编号703),检查第6列(功能列)是否为1。例如:
703 回城卷 1 0 0 1 0 ...

若第6列为0,则拾取或使用时不会触发 [@Item703]。

三、M2脚本执行权限未开启

在M2控制面板中,若“允许执行QFunction脚本”选项被关闭,所有自定义逻辑将被跳过。
操作路径:M2 → 选项 → 高级设置 → 勾选“允许执行QFunction脚本”并重启M2。

四、脚本标签格式错误

HERO引擎对标签格式严格,常见无效写法:
多余空格:[@ Item703](正确应为 [@Item703]);
缺少换行:标签后未空一行直接写#IF;
使用中文括号:【@Item703】。

正确结构示例:
[@Item703]
IF
CHECKITEM 703 1
ACT
DELITEM 703 1
MAPMOVE 3 333 333

五、动作指令被条件阻断

即使物品触发进入标签,若前置条件不满足,#ACT部分不会执行。例如:
IF
CHECKGOLD > 1000
ACT
...

若玩家金币不足,后续动作跳过,但物品可能已在其他地方被删除(如客户端自动消耗)。需确保#ACT中的 DELITEM 与功能逻辑在同一条件分支内。

六、地图或状态限制

部分指令受当前环境限制。例如:
MAPMOVE 在安全区外可能被拦截(需检查MapInfo.txt中目标地图是否允许传送);
玩家处于战斗状态、死亡或封号状态时,多数脚本动作被禁止执行。

七、文件编码与换行符问题

QFunction.txt 必须保存为 ANSI 编码(非UTF-8),且使用 Windows 换行符(CRLF)。用记事本或Notepad++另存为ANSI格式可避免乱码导致标签识别失败。

八、多脚本文件冲突

若同时存在 QFunction.txt、QFunction-0.txt、UserCmd.txt 等,且内容重复,M2可能优先加载其他文件,导致预期逻辑未执行。建议统一使用标准文件名,避免混用。

综上,QFunction-0脚本失效主因是文件未被加载或物品未启用触发属性。优先检查文件名、!Item.txt配置及M2脚本开关,再逐项验证标签格式与执行条件。