您的脚本逻辑与QManage.txt文件自身均无语法错误。报错根源在于脚本格式嵌套混乱,导致引擎解析时,将本属于 [@封号分类] 标签下的 SENDMSG 命令错误地解析到了 QManage.txt 文件的全局加载段。引擎在加载 QManage.txt 时,误将您封号脚本内的 SENDMSG 行当作了无标签的全局命令,因此报错“第1554行”。
一、核心错误:标签嵌套与逻辑块混乱
您的原始脚本将所有条件判断平铺书写,但未正确使用 #ELSEACT 来结束上一个条件块,导致引擎无法区分每个条件判断的边界。这是传奇脚本最常见的逻辑错误。
错误示例:
#IF
ISGUILDMASTER
#ACT
MOV s5 \〖行会掌门人〗
#ELSEACT
MOV s5
#IF
ISCASTLEGUILD
#ACT
MOV s5 \〖城主保镖〗
#ELSEACT
MOV s5
问题:第一个 #ELSEACT 之后,您又写了新的 #IF。在旧引擎中,这会使引擎认为“上一个条件判断已结束,现在开始一个全新的全局条件”,如果这段代码刚好在全局位置(如QManage.txt的开头或特定标签外),就会报错。
二、修复后的脚本代码
将逻辑改写为严格使用 #ELSEACT 和 #ELSEACT BREAK 分隔的独立判断块,避免条件交叉。同时,将 SENDMSG 消息的格式修正为标准格式。
[@封号分类]
{
#IF
ISGUILDMASTER
#ACT
MOV s5 \〖行会掌门人〗
#ELSEACT
BREAK
#IF
ISCASTLEGUILD
#ACT
MOV s5 \〖城主保镖〗
#ELSEACT
BREAK
#IF
ISCASTLEMASTER
#ACT
MOV s5 \〖沙城城主〗
SENDMSG 0 (*)伟大的沙城城主〖<$USERNAME>〗进入<$SERVERNAME>!
CHANGENAMECOLOR 253
#ELSEACT
BREAK
#IF
CheckVar GLOBAL 男战名字 = <$USERNAME>
#ACT
MOV s5 \↘天下第一男战↙
SENDMSG 0 (*)天下第一男战〖<$USERNAME>〗进入<$SERVERNAME>!
#ELSEACT
BREAK
#IF
CheckVar GLOBAL 男法名字 = <$USERNAME>
#ACT
MOV s5 \↘天下第一男法↙
SENDMSG 0 (*)天下第一男法〖<$USERNAME>〗进入<$SERVERNAME>!
#ELSEACT
BREAK
#IF
CheckVar GLOBAL 男道名字 = <$USERNAME>
#ACT
MOV s5 \↘天下第一男道↙
SENDMSG 0 (*)天下第一男道〖<$USERNAME>〗进入<$SERVERNAME>!
#ELSEACT
BREAK
#IF
CheckVar GLOBAL 女战名字 = <$USERNAME>
#ACT
MOV s5 \↘天下第一女战↙
SENDMSG 0 (*)天下第一女战〖<$USERNAME>〗进入<$SERVERNAME>!
#ELSEACT
BREAK
#IF
CheckVar GLOBAL 女法名字 = <$USERNAME>
#ACT
MOV s5 \↘天下第一女法↙
SENDMSG 0 (*)天下第一女法〖<$USERNAME>〗进入<$SERVERNAME>!
#ELSEACT
BREAK
#IF
CheckVar GLOBAL 女道名字 = <$USERNAME>
#ACT
MOV s5 \↘天下第一女道↙
SENDMSG 0 (*)天下第一女道〖<$USERNAME>〗进入<$SERVERNAME>!
#ELSEACT
BREAK
#IF
CHECKRENEWLEVEL > 0
#ACT
MOV s5 \【荣誉勇士】
#ELSEACT
BREAK
; 最终统一设置封号
SETRANKLEVELNAME %s\<$STR(s5)>
BREAK
}
三、关键修复点说明
1. 使用 BREAK 明确分隔:每个条件判断结束后,用 #ELSEACT BREAK 明确终止当前块,防止引擎错误地继续解析后续条件。
2. 修正 SENDMSG 格式:将消息中的 %s 替换为 <$USERNAME>。%s 是旧版变量格式,在某些引擎中可能导致解析异常。<$USERNAME> 是明确的玩家名字变量,兼容性更好。
3. 逻辑顺序调整:脚本逻辑是“谁先满足,就执行谁的封号”,因此应将最高优先级的条件(如城主)放在最前面。已按“行会掌门→城主保镖→沙城城主→天下第一系列”的顺序排列。
4. 变量处理:每个条件块内,均用 MOV s5 直接赋值,而不是 INC s5。INC 用于数值相加,此处是字符串赋值,应使用 MOV。
四、排查与测试步骤
1. 备份:先将原 QManage.txt 文件备份。
2. 替换:用修复后的完整代码段,替换您原来的 [@封号分类] 整个段落。
3. 重启引擎:务必在M2Server控制台点击“重新加载-加载QM脚本”,或完全重启服务器,使修改生效。
4. 测试:登录一个符合条件的账号(如行会掌门),检查封号是否正确显示,以及是否有全服公告。
总结:报错并非QM文件本身出错,而是脚本逻辑书写不规范导致引擎解析错乱。按上述修复方案重写后,问题即可解决。

