当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇M2脚本报错“有参数?一般错误有参数18个”精准定位与行号溯源法

热度:
M2控制台或弹窗里出现“脚本错误:有参数?一般错误有参数18个”这种提示,不是引擎抽风,是某一行脚本调用了某个命令,引擎解析时实参数量和该命令在当前引擎里的形参表对不上,且命令名本身没拼错(拼错会报“未知命令/Commandnotfound”),所以引擎只能回退到通用解析分支,打出“有参数?一般错误有参数N个”。N=18就代表这一行被空格拆分出了18个片段,命令本身只接受少于18个,多余的全堆成非法参数。按下面顺序拆:

一、先抓完整报错原文,别只看“有参数18个”
标准格式一般长这样(Hero/GOM/LegendM2都类似):
[错误]脚本错误:<NPC名>-地图X第YY行:有参数?一般错误有参数18个

Scriptfile'QFunction-0.txt'line88:有参数?一般错误有参数18个
关键信息只有三个:文件名、行号、所在标签。先抄下来。
文件归属直接定范围:
-Market_Def\*.txt→NPC对话/回收/老兵/商城
•QuestDiary\\.txt→登录、升级、活动、任务触发

•QManage.txt/QFunction.txt/QMission.txt→全局事件

-MonItems\*.txt→爆率(爆率文件一般不会报这行,多是物品名不在库)

二、“有参数18个”代表这一行被切成18段
引擎按空格分词,例如下面这种写法:
SENDMSG6欢迎<<$USERNAME>>等级<$LEVEL>当前地图<$MAP>时间<$TIME>行会<$GUILD>官职<$RANK>货币<$GOLD>元宝<$GAMEGOLD>积分<$CREDITPOINT>转生<$RELEVEL>合击<$HEROLEVEL>装备<$WEAPON>状态<$MODE>
SENDMSG后整体算一段消息,但老引擎或某些Hero分支会把<$XXX>、中文、变量再拆一次,叠加引号、全角空格、Tab,很容易凑到18段。
常见踩坑写法:
1.消息体没用引号包裹,SENDMSG6后面跟一长串中文+变量+符号,引擎按空格狂切
2.用了全角空格(Unicode12288)当分隔,Notepad++不显示但引擎算一段
3.复制网页脚本带来隐形BOM、零宽字符、换行符混用
4.CALL路径写成CALLQuestDiary\活动\每日.txt@Start没加方括号,路径里反斜杠+中文被切多段
5.MapMove/Goto/Give之类命令后多粘了尾巴参数(如GIVE屠龙10000…)

三、直接定位到行:Notepad++打开报错文件跳行号
1.Mir200\Envir\Market_Def或QuestDiary下找对应txt
2.Notepad++→视图→显示符号→显示所有字符(看行尾CR/LF、全角空格、BOM)
3.Ctrl+G跳到报错行号
4.看这一行第一个单词是什么命令,数空格分段是否超了引擎该命令的参数表
对照命令表快速核:
•GIVE物品名数量(2参,多写属性别往GIVE后塞)

•TAKE物品名数量

•MAPMOVE地图号XY(3参)

•SENDMSG颜色消息(消息体建议用英文双引号包裹整段)

-MOVN1100/MOVD0100(2参,别写MOVD0100无空格)
•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路径没方括号、复制脚本带全角空格这三处,对着行号一眼能看出来。
[顶部]