M2控制台或弹窗里出现“脚本错误:有参数? 一般错误 有参数18个”这种提示,不是引擎抽风,是某一行脚本调用了某个命令,引擎解析时实参数量和该命令在当前引擎里的形参表对不上,且命令名本身没拼错(拼错会报“未知命令/Command not found”),所以引擎只能回退到通用解析分支,打出“有参数? 一般错误 有参数N个”。N=18 就代表这一行被空格拆分出了18个片段,命令本身只接受少于18个,多余的全堆成非法参数。按下面顺序拆:
一、先抓完整报错原文,别只看“有参数18个”
标准格式一般长这样(Hero/GOM/LegendM2 都类似):
[错误] 脚本错误: <NPC名>-地图X 第YY行: 有参数? 一般错误 有参数18个
或
Scriptfile 'QFunction-0.txt' line 88 : 有参数? 一般错误 有参数18个
关键信息只有三个:文件名、行号、所在标签。先抄下来。
文件归属直接定范围:
- Market_Def\*.txt → NPC对话/回收/老兵/商城
• QuestDiary\\.txt → 登录、升级、活动、任务触发
• QManage.txt / QFunction.txt / QMission.txt → 全局事件
- MonItems\*.txt → 爆率(爆率文件一般不会报这行,多是物品名不在库)
二、“有参数18个”代表这一行被切成18段
引擎按空格分词,例如下面这种写法:
SENDMSG 6 欢迎 <<$USERNAME>> 等级 <$LEVEL> 当前地图 <$MAP> 时间 <$TIME> 行会 <$GUILD> 官职 <$RANK> 货币 <$GOLD> 元宝 <$GAMEGOLD> 积分 <$CREDITPOINT> 转生 <$RELEVEL> 合击 <$HEROLEVEL> 装备 <$WEAPON> 状态 <$MODE>
SENDMSG 后整体算一段消息,但老引擎或某些Hero分支会把 <$XXX>、中文、变量再拆一次,叠加引号、全角空格、Tab,很容易凑到18段。
常见踩坑写法:
1. 消息体没用引号包裹,SENDMSG 6 后面跟一长串中文+变量+符号,引擎按空格狂切
2. 用了全角空格(Unicode 12288)当分隔,Notepad++ 不显示但引擎算一段
3. 复制网页脚本带来隐形 BOM、零宽字符、换行符混用
4. CALL 路径写成 CALL QuestDiary\活动\每日.txt @Start 没加方括号,路径里反斜杠+中文被切多段
5. MapMove / Goto / Give 之类命令后多粘了尾巴参数(如 GIVE 屠龙 1 0 0 0 0 …)
三、直接定位到行:Notepad++ 打开报错文件跳行号
1. Mir200\Envir\Market_Def 或 QuestDiary 下找对应 txt
2. Notepad++ → 视图 → 显示符号 → 显示所有字符(看行尾 CR/LF、全角空格、BOM)
3. Ctrl+G 跳到报错行号
4. 看这一行第一个单词是什么命令,数空格分段是否超了引擎该命令的参数表
对照命令表快速核:
• GIVE 物品名 数量(2参,多写属性别往GIVE后塞)
• TAKE 物品名 数量
• MAPMOVE 地图号 X Y(3参)
• SENDMSG 颜色 消息(消息体建议用英文双引号包裹整段)
- MOV N1 100 / MOVD0 100(2参,别写 MOVD0 100 无空格)
• CHECKITEM 物品名 数量
• CALL [相对路径.txt] @标签(必须方括号,路径里别再塞空格)
四、Hero / LegendM2 特有:扩展命令插件没加载也会变“一般错误”
很多“有参数18个”实际是脚本用了插件命令(如 OpenShopEx、AutoPickEx、HeroSkillCast、AddNewStatus 状态ID 时长 层数 来源 …),插件 DLL 没勾载,引擎不认扩展形参表,退回通用解析,参数量看起来就很离谱。
处理:M2 → 插件/Plug-in → 看对应 DLL 是否加载成功 → 没载就放对目录(Mir200\PlugIns)并授权 → 重启 M2。同版本引擎包和登录器必须配套,0328 脚本塞 1108 引擎或反过来必爆。
五、编码与缓存收尾
1. 文件转 ANSI(记事本/Notepad++ 另存为 ANSI,别用 UTF-8+BOM)
2. 删 Mir200\Log\ScriptCache.dat(有则删)
3. M2 控制台 → 重新加载脚本 / 或整机重启 M2+DBS+LoginGate
4. 仍不明就分段注释(; 开头)把该行前后逻辑缩到最小复现
六、实操判定口诀
看到“有参数? 一般错误 有参数18个”→ 不是缺变量不是缺物品 → 是“这一行被空格切出18段,命令吃不下” → 跳行号 → 显所有字符 → 查首个命令 → 引号包裹消息体 / 去全角空格 / CALL加方括号 / 插件命令查DLL → 转ANSI重载。
绝大多数18参报错落在 SENDMSG 长消息没引号、CALL 路径没方括号、复制脚本带全角空格这三处,对着行号一眼能看出来。
传奇M2脚本报错“有参数? 一般错误 有参数18个”精准定位与行号溯源法
来源:
作者:
点击:

