M2报脚本错误先不要重装端,按报错文件名和行号修最快。控制台红字通常带 Scriptfile、Line、Unknown command、Missing #ACT、label not found 之类信息;同时看 Mir200\Log 下的 M2Server日期.log、ScriptError.log、ErrorLog.txt,提取三样:哪个文件、第几行、什么命令或标签。 常见文件归属:Market_Def 下是NPC对话和商人,QuestDiary 下是任务/登录/升级/活动,QFunction-0.txt、QManage.txt 是全局触发,MonItems 是怪物爆率,MapInfo/MapEvent 是地图事件。锁定文件后再动手,别全目录瞎改。
编码和换行是隐形高发问题。所有 Envir 下 txt 脚本用 ANSI/GBK 保存,不用 UTF-8、不用 UTF-8 BOM;用记事本另存为选 ANSI,用 Notepad++ 用“转换为 ANSI”并确认换行是 Windows CRLF,不用 LF。 中文标点全换成英文半角,逗号、分号、括号、引号都按英文写;行尾隐藏空格、全角空格、零宽字符用 Notepad++“显示所有字符”清掉。 [@标签] 必须顶格独占一行,前面不空格不Tab,例如 [@main]、[@领取];#IF 下一行写条件,#ACT 下一行写执行,#SAY 下一行写对话,#ELSEACT/#ELSESAY 处理不满足分支,结束用 #ENDIF。Hero/Blue 里 #IF 与 #ACT 之间不插空行,#IF 里只放检测命令不写执行命令,#ACT 里只写执行不写条件。
结构错误按这几类改。缺 #ACT:#IF 下面直接写 GIVE/TAKE/MAPMOVE 会报 Missing #ACT,补 #ACT。缺 #ENDIF:多条件分支只写 #IF 不写收尾,M2 加载到后段会断,每个 #IF 配一个 #ENDIF。标签跳转丢失:GOTO @xxx 或 #CALL [路径\文件.txt] @xxx,全文必须有对应 [@xxx];CALL 路径用相对 Envir,例如 [\QuestDiary\功能\奖励.txt] @领取,文件实际在 Market_Def 就会找不到。 同目录多个文件都写 [@Main] 会跳转错乱,按功能加前缀如 [@Rev_Main]、[@Shop_Main]。死循环报“脚本死循环”去看 !Setup.txt 的 ScriptGotoCountLimit,默认可能很低,复杂跳转改大或用 #CALL 替代多层 GOTO;根因还是循环没有终止条件。
命令按引擎对,不混用。Hero 发物品用 GIVE 物品名 数量、收物品用 TAKE、检货币用 CHECKGAMEGOLD、发货币按本端命令;GOM/GEE 很多扩展命令、变量运算、插件命令老 Hero/Blue 不认,反过来 Hero 的老书写法直接搬 GEE 也可能参数不对。 报 Unknown command 先查本引擎命令手册,再核对大小写和空格:GIVE 屠龙 1 不能写 GIVE屠龙1,MOV D0 100 不能写 MOVD0100,CHECKITEM 金币 1000000 参数个数按手册来。变量先声明后使用,HUMAN 个人、GLOBAL 全局、P0-P9 临时、D0-D9/N 持久、S 字符串按引擎作用域走;跨天跨下线数据别用临时P变量,需要保存用 SAVEVAR/LOADVAR 并放对 QuestDiary 子目录。
物品、地图、怪物名必须和库一致。GIVE 屠龙 1 但 StdItems.DB 里叫“屠龙刀”,M2 报物品不存在;MAPMOVE 0 330 330 但 MapInfo.txt 没有地图号0或坐标越界,进图事件报错;MonItems 里写“祖玛教主”但 MonGen.txt 刷怪名是“祖玛大教主”,爆率不生效。改脚本前直接抄数据库字段,不凭记忆写中文;有条件用物品数字ID、地图号数字更稳。 NPC不显示或点开空白,还查 Merchant.txt/MerChant.txt 挂载:格式大体是 NPC名 地图号 X Y 脚本文件 初始标签,脚本文件放 Market_Def 且文件名、标签名、坐标、地图号四者对应;文件改了但NPC不变,是挂载行没重载或路径写错。
启动期脚本错误和运行时脚本错误分开处理。启动就报、M2起不来:关M2,按日志把报错文件逐行修;若不知道改了什么,先把整个 Envir 备份替换成原版 Envir 启动,能起说明是后期脚本冲突,再把原版 Envir 与自己改的用 WinMerge/手工对比,按 Market_Def、QuestDiary、QFunction、QManage、Robot、MonItems 分段还原。 进游戏点NPC才报:只修对应NPC文件,M2控制台重读NPC脚本、重读QF;QFunction/QManage 改动建议整服重启。改完不生效看缓存:关M2删 Mir200\Log 下 ScriptCache.dat(存在才删),再起M2;GOM类可在控制台重加载脚本,Hero/Blue老旧端直接重启最稳。
机器人脚本单独注意。Robot.txt、AutoRunRobot.txt、RobotManage.txt 格式严格,自动执行段放 QuestDiary\RobotManage,时间写 00:00 这种两位;CALL 外部变量文件用相对路径,不用 D:\ 绝对路径,绝对路径部分引擎直接拦。 定时不触发先查M2“机器人设置”是否启用、间隔是否过小、标签是否在RobotManage目录;报变量作用域就把HUMAN改GLOBAL或按在线遍历写。
排错顺序收成一条:看M2红字和Log拿文件行号→Notepad++转ANSI、CRLF、清全角空格→查 #IF/#ACT/#ENDIF、[@标签]、GOTO/#CALL→核对命令是否本引擎支持→核对物品/地图/怪物名与DB、MapInfo、MonGen一致→核对Merchant挂载路径→删ScriptCache重启或重读脚本→仍不行用原版Envir替换比对、分段注释定位。 每次只改一个文件、改前备 Envir 整体压缩包,比一次性大改后满屏红字容易恢复。
传奇M2Server脚本错误定位修复:Envir编码语法NPC重载排错
来源:
作者:
点击:

