脚本错误定位:MOV与INC的变量逻辑混淆
你提供的脚本存在多处逻辑与语法错误,核心问题是MOV与INC命令使用不当,导致变量s5的值在条件判断中不断被错误赋值和清空。脚本结构混乱,部分#ACT与#IF配对错误,SENDMSG命令位置不当。以下是具体的错误点与修复方法。
错误一:MOV s5 命令逻辑错误
在多个#ELSEACT段中,你写了MOV s5,此命令语法不完整,缺少赋值参数。这会导致引擎无法解析。若想清空变量,应使用MOV s5 (赋值空字符串)或CLEARNAMELIST s5。
错误示例:
#ELSEACT
MOV s5 ; 缺少参数,语法错误
修正为:
#ELSEACT
MOV s5 ; 赋值为空,注意s5后有空格
; 或使用
CLEARNAMELIST s5
错误二:条件分支结构混乱
脚本中大量#IF块后直接接#ACT,但后续的#ELSEACT和新的#IF没有正确嵌套或分隔,导致引擎无法识别执行流程。特别是从“天下第一男法”开始,SENDMSG命令被错误地放在了#IF和#ACT之间。
错误示例(你脚本中的“男法”段):
#IF
CheckVar GLOBAL 男法名字 = <$USERNAME>
SENDMSG 0 (*)天下第一男法〖%s〗进入<$SERVERNAME>! ; 错误:SENDMSG不应放在#IF行
#ACT
INC s5 \↘天下第一男法↙
正确结构应为:
#IF
CheckVar GLOBAL 男法名字 = <$USERNAME>
#ACT
INC s5 \↘天下第一男法↙
SENDMSG 0 (*)天下第一男法〖%s〗进入<$SERVERNAME>!
完整修正脚本
以下是修正后的 [@封号分类] 段脚本,修正了变量逻辑、条件分支和命令语法:
[@封号分类]
#IF
ISCASTLEMASTER
#ACT
MOV s5 \〖沙城城主〗
SENDMSG 0 (*)伟大的沙城城主〖%s〗进入<$SERVERNAME>!
CHANGENAMECOLOR 253
#ELSEACT
MOV s5 ; 清空s5
#IF
ISCASTLEGUILD
#ACT
MOV s5 \〖城主保镖〗
#ELSEACT
MOV s5
#IF
ISGUILDMASTER
#ACT
MOV s5 \〖行会掌门人〗
#ELSEACT
MOV s5
#IF
CheckVar GLOBAL 男战名字 = <$USERNAME>
#ACT
INC s5 \↘天下第一男战↙
SENDMSG 0 (*)天下第一男战〖%s〗进入<$SERVERNAME>!
#IF
CheckVar GLOBAL 男法名字 = <$USERNAME>
#ACT
INC s5 \↘天下第一男法↙
SENDMSG 0 (*)天下第一男法〖%s〗进入<$SERVERNAME>!
#IF
CheckVar GLOBAL 男道名字 = <$USERNAME>
#ACT
INC s5 \↘天下第一男道↙
SENDMSG 0 (*)天下第一男道〖%s〗进入<$SERVERNAME>!
#IF
CheckVar GLOBAL 女战名字 = <$USERNAME>
#ACT
INC s5 \↘天下第一女战↙
SENDMSG 0 (*)天下第一女战〖%s〗进入<$SERVERNAME>!
#IF
CheckVar GLOBAL 女法名字 = <$USERNAME>
#ACT
INC s5 \↘天下第一女法↙
SENDMSG 0 (*)天下第一女法〖%s〗进入<$SERVERNAME>!
#IF
CheckVar GLOBAL 女道名字 = <$USERNAME>
#ACT
INC s5 \↘天下第一女道↙
SENDMSG 0 (*)天下第一女道〖%s〗进入<$SERVERNAME>!
#IF
CHECKRENEWLEVEL > 0
#ACT
INC s5 \【荣誉勇士】
SETRANKLEVELNAME %s\<$STR(s5)>
Break
关键修改说明
1. 调整判断优先级:将最高级的“沙城城主”判断提到最前,避免被后续的MOV覆盖。
2. 修正MOV s5语法:所有#ELSEACT段中的MOV s5后都添加了空格,表示赋空值。
3. 规范命令位置:所有SENDMSG命令均移至对应#ACT段内,确保引擎在条件成立后执行。
4. 优化变量叠加:使用INC命令在s5变量后追加封号,保留了之前判断获得的封号(如“沙城城主”+“天下第一男战”)。
5. 保留断行:结尾的Break命令保留,确保执行后跳出。
排查与测试建议
1. 替换脚本:将修正后的完整脚本替换 QManage.txt 中原来的 [@封号分类] 段落。
2. 重载脚本:在M2Server界面点击“控制” -> “重新加载” -> “管理脚本”,使修改生效。
3. 分步测试:创建测试账号,分别满足不同条件(如设为沙城主、设置全局变量等),登录游戏观察封号与公告是否正确触发。
4. 检查变量:若封号仍不显示,可在脚本中临时添加SENDMSG 6 当前s5=<$STR(s5)>来调试输出s5变量的实时值。
核心结论:你原脚本的错误并非QManage.txt其他部分导致,而确实是封号脚本自身的语法错误与逻辑结构混乱。按上述修正即可解决SENDMSG报错与封号叠加问题。

