传奇QQ礼包脚本报错:服务端脚本错误急救排查

来源: 作者: 点击:
先别删服务端、别重装。QQ礼包类报错90%都在日志里写着,改对应行就行。

一、先抓日志,不要瞎猜
开 M2Server(GameSrv),看底部日志或进 Mir200\Log\ScriptError.log。
日志里一般长这样:
Envir\QuestDiary\QQ礼包.txt 第 18 行:未知命令 / 缺少 #ENDIF / 标签未找到 / 参数错误
记住三样东西:哪个文件、第几行、什么错。没日志就开脚本调试(!Setup.txt 或 MirServer.ini 里 ScriptDebug=1),重启再看 Log\ScriptLog.txt。

二、QQ礼包脚本最常死的几个点
1. 编码错了
用记事本/Notepad++ 打开 QFunction-0.txt、QManage.txt、QuestDiary\QQ礼包.txt。
只要存成 UTF-8 带 BOM、Unicode,中文一解析就炸。
改法:记事本“另存为”→编码选 ANSI;Notepad++ 选“转为 ANSI 编码”再保存。

2. 命令拼错
GIVE 写成 GIV,SENDMSG 写成 SENDMS,MOV 写成 MVO,#IF/#ACT 少写,goto 漏 @。
正确例子:
[@main]
IF

CHECKLEVELEX > 10
ACT

GIVE 裁决之杖 1
SENDMSG 6 领取成功
ELSEACT

SENDMSG 7 等级不足
命令必须和当前引擎(GOM/GEE/Hero/翎风等)说明书对得上,跨引擎抄脚本必炸。

3. 标签跳转找不到
[@main] 里写 #CALL [..\QuestDiary\QQ礼包\领取.txt] @领取
但领取.txt 里根本没有 [@领取],就会“未找到子程序”。
检查:被调用文件存在、文件夹名大小写一致、标签名完全一样(@QQLibao 和 @Qqlibao 不是一回事)。

4. 物品名/物品ID不对
GIVE 屠龙 1,但 StdItems.DB / Items.txt 里叫“屠龙刀”,或者 ID 超出数据库范围。
改法:去物品库复制准确名称/Idx,别手打中文。

5. 条件没闭合
IF 后面没条件,或者 #IF…#ACT… 后面该 #ELSEACT 没写,玩家没道具时脚本直接断。

礼包脚本至少写:有道具发奖、没道具提示、已领取拦截,三层分支。

6. 变量没声明/被冲掉
用 A变量/HUMAN变量 存“已领过”,但 QManage.txt 登录时又被 MOV 清成 0,玩家永远能领。
改法:一次性礼包用永久个人变量;每日礼包用“日期+账号”名单或机器人每日重置。

7. 插件没加载
礼包系统用了 CHECKTEXTLIST、CheckQQBind、GIVEITEM 高级命令,但 PlugList.txt 没挂对应 dll。
表现:启动报“未知命令/插件未加载”。
改法:确认引擎版本→装同版本插件→M2 插件管理里勾上→重启。

三、NPC点开没反应,但不是红错
查 Merchant.txt:NPC 地图、坐标、脚本路径对不对。
查 Market_Def\XXX.txt:有没有 [@main] 入口。
查按钮:<领取/@getgift> 这种,跳转标签 @getgift 必须在脚本里存在。
玩家点 NPC 没字出来 = 脚本没加载或 [@main] 没了;有字但一点就“脚本错误” = 领取分支炸了。

四、通用修法(照做能救回大部分)
1. 备一份原文件再改,别直接覆盖。
2. 看日志→打开报错文件→跳到行号→只改那几行。
3. 所有标点英文半角,行尾别留空格,[@标签] 独占一行。
4. 编码转 ANSI。
5. 礼物名去物品库复制。
6. #CALL 路径用相对路径,别堆中文空格。
7. 改完别只点“重载”,关掉 DBServer/LoginGate/M2Server 全进程,按顺序重启。
8. 还不行就用二分法:把 QQ礼包.txt 内容大段加 ; 注释,只留 [@main]+一行 SENDMSG 6 测试已启动,能出消息说明入口没事,再一段段放开。

五、没动过脚本一启动就报
大概率是服务端解压不完整、杀软把 txt/dll 删了、或者你下了 A 引擎却塞了 B 引擎的礼包包。
处理:
• 关杀软,重新解压原包

• 核对引擎类型(GOM/GEE/Hero/3K/翎风)

• 从同版本原包把 QuestDiary\QQ礼包、QFunction-0.txt、QManage.txt 抽出来替换

• 别把“QQ登录/礼包码/渠道礼包”不同版脚本混塞进一个端

六、最小可跑模板(伪代码,按自己引擎改命令)
[@main]
欢迎领取QQ礼包!
<领取/@get_qq_gift>

[@get_qq_gift]
IF

CHECKVAR HUMAN QQGift 1
ACT

SENDMSG 7 你已经领过
BREAK

IF

CHECKLEVELEX > 1
ACT

MOV HUMAN QQGift 1
SAVEVAR HUMAN QQGift
GIVE 金币 100000
GIVE 随机装备箱 1
SENDMSG 6 QQ礼包领取成功
ELSEACT

SENDMSG 7 等级不足

七、还救不了就按这个顺序丢锅
先日志 → 再编码 → 再命令 → 再物品库 → 再插件 → 再 NPC挂载 → 最后换同版本原版脚本。
别一上来改引擎、别删 HeroDB、别把整个 Envir 覆盖成别的端,不然礼包修好、任务全废。