先别重装服务端,也别整包替换Envir。你这种“昨天改了一点、第二次启动才报”基本是改坏语法、编码变乱、或者M2缓存了旧脚本后重新加载新错误。两个文件分开处理,按下面顺序做能少走弯路。
一、先备份再动
把 D:\MirServer\Mir200\Envir\Market_Def\老兵\传送员_土城-3.txt 复制成 传送员_土城-3_bak.txt;把 D:\MirServer\Mir200\Envir\Market_Def\QFunction-0.txt 复制成 QFunction-0_bak.txt。改崩了随时回滚。别用系统记事本直接改,装个Notepad++,行号、编码、不可见字符都能看。
二、看老兵/传送员_土城-3.txt第181行
用Notepad++打开,Ctrl+G输入181跳过去,再看177到185行整段。报错带“�\”说明很可能编码或隐藏字符出问题,但行号报错也可能是上一处结构没闭合导致181被引擎误判。重点查这几项:
1. 第181行及附近有没有“�”“?”之类乱码,有就删掉整行重新手打,不从网页、QQ、Word复制粘贴。
2. 传送类命令格式:地图号、坐标必须是数字,用半角逗号空格分隔,例如 MAPMOVE 3 320 350 或 MOV 3 320 350,看引擎习惯;不要把“320,350”写成中文逗号,不要写“320.350”“320 350”混格式。土城地图号按你版本确认,很多服土城是3,但不代表所有端都是3。
3. [@标签]是否独立成行,前面别留空格和Tab;GOTO @xxx、CALL 路径@xxx 的目标标签必须存在,大小写一致。比如按钮写 GOTO @送沙巴克,文件里只有 [@送沙城],就会加载异常。
4. #IF、#ACT、#SAY、#ELSEACT、#ENDIF 是否配对。NPC常见错是把 #IF 条件写完直接 #SAY,漏 #ACT;或者加了子菜单不写 #ENDIF。条件块没闭合时,引擎往往跳到后面某行才报,不一定真错在181,要看181上面最近一个 [@菜单] 开始的全部内容。
5. GIVE/CHECKITEM/TAKE 物品名要和StdItems数据库一致;给“元宝”“礼包”用编号还是名字,按你引擎来,别把中文括号、注释符号写进命令本体。
6. 若181本身看着正常,向上翻到最近一个 [@main] 或 [@传送菜单],把整个子菜单复制到新建空白ANSI文件里逐行删,删到不报错再定位。
三、看QFunction-0.txt第2341行
QFunction是全局功能脚本,登录、捡物、打怪、穿装备、用物品都可能走这里。2341行报错先按同样方式Ctrl+G跳转,看2335到2345行。常见问题:
1. 昨天改传送员时不小心把NPC内容粘进QFunction,或者复制一段带GOTO/CALL的代码进来,标签在QFunction里不存在。
2. 公共触发段如 [@OnLogin]、[@使用物品]、[@打怪触发] 里写了引擎不认识的命令;GOM、GEE、Hero、LEG引擎命令不一样,老命令新引擎不认、新命令老引擎不认都会报行号。按你当前引擎命令手册改,不混用。
3. 变量写法错误:个人变量、全局变量、字符串变量前缀写错,未声明就MOV/ADD,或者把字符串当数字比较。
4. 条件缺 #ACT、#IF 后直接执行、#ENDIF 不配对;CALL 外部QuestDiary路径写错,例如 CALL [..\QuestDiary\某某\某某.txt] @标签,反斜杠、文件名、标签名错一个就加载失败。
5. 若2341附近原本没动过,但昨天改别处后第二次启动才报,可能是编码改变导致全文件行号偏移,或者M2第一次用旧缓存、第二次读新文件才暴露。此时不要只盯2341,转ANSI后重新看,必要时用“;”把2330到2360逐段注释重载,缩到具体一行。
四、编码和不可见字符(你这个乱码最像)
两个文件都用Notepad++处理:菜单“编码”看当前格式。传统Mir2/GOM/GEE多数用ANSI(简体环境即GBK);若显示UTF-8、UTF-8 BOM、Unicode,转“编码→转为ANSI编码”后保存。若必须用其他编码按你引擎要求来,但老M2基本ANSI最稳。
再点“视图→显示符号→显示所有字符”,把行尾^M、异常Tab、全角空格删掉;换行符用Windows格式CRLF,不用Unix LF。从别处复制来的脚本先粘到纯文本再转ANSI,别直接覆盖。
五、改完怎么让服务端重新读
小改动优先热重载,不一定要全服重启:
M2控制台“控制→重新加载→NPC脚本/Market”可重载老兵传送员;“控制→重新加载→QFunction”重载QFunction-0;没有单独QFunction就重载功能脚本或所有脚本。重载后游戏小退重登,点土城老兵看还报不报。
如果改到登录触发、QM、核心变量、Merchant注册,热重载不生效就全关:先关游戏客户端,M2点停止,DBServer/登录器/网关一起关;删或移走 Mir200\Log 下ScriptError、M2Server日志便于看新错,部分引擎有ScriptCache.dat也清掉;再启动DBServer→M2→网关→登录器。第二次启动还报,就看新日志行号是否已经变化。
六、没备份的快速回滚办法
老兵传送员:同引擎同版本找一份干净 Market_Def\老兵\传送员_土城-3.txt,只把你昨天要加的传送点按它原有格式重新加,不把旧文件整体覆盖回去,避免把其他功能弄丢。
QFunction-0:不要从别的版本整份替换,只替换你确认的子段;若不知道改坏哪段,用文本对比工具把_bak和当前文件比,只恢复有改动的标签块。实在没有bak,按M2报错行号逐段注释,注释用你引擎支持的;或//,确认不报再逐步放开。
七、判断是不是“假行号”
M2有时写第181行,实际错在第179行条件没闭合;写第2341行,实际是上面一个CALL把错误带到2341。处理原则:报错行本身、上一标签块、本文件最靠近报错的#IF/#ACT/#CALL三者都查。若181行是空行或纯中文说明,基本就是上行结构问题;若2341行内容很短却报语法错误,优先查它上面最近一个[@触发]是否缺#ENDIF。
wuduy.com相关标题名和链接:
传奇修改后启动服务器脚本错误 两处具体报错排查及解决 http://www.wuduy.com/html/jishuwenzhang/chuanqi/171291.html
传奇脚本修改后启动服务器报错 两大脚本错误修正方法 http://www.wuduy.com/html/jishuwenzhang/chuanqi/175664.html
传奇脚本错误排查指南(土城传送员及QFunction报错解决) http://www.wuduy.com/html/jishuwenzhang/chuanqi/165627.html
传奇脚本修改后启动报错 两行错误排查与解决 http://www.wuduy.com/html/jishuwenzhang/chuanqi/162447.html
传奇服务端脚本修改后游戏内无变化排查与修复 http://www.wuduy.com/html/jishuwenzhang/chuanqi/191373.html
传奇架设遇到脚本错误如何解决:M2日志定位与NPC触发报错修复全流程 http://www.wuduz.com/html/chuanqi/jishuwenzhang/135942.html

