报错提示指向盟重城_雇用兵团‑3.txt文件,报错行号2467,错误代码2,这类报错多出现于#CALL调用路径书写错误、命令语法格式错误、标签格式、符号以及文件读取异常,脚本整体逻辑框架没有大问题,主要集中在CALL调用路径、命令书写、标签与换行符号几处细节。
首先看#CALL调用语句,脚本内大量写法为#CALL[\雇佣兵团\道士\天尊.txt]@天尊,GOM引擎的CALL命令,方括号内的文件路径,基准目录是Envir目录,路径前面的反斜杠写法存在兼容问题。脚本内写的[\雇佣兵团\道士\天尊.txt],开头带反斜杠,部分GOM版本会识别为绝对路径,导致引擎找不到对应的txt脚本文件,触发脚本读取错误。正确写法应该去掉最前面的反斜杠,改为[雇佣兵团\道士\天尊.txt]@天尊,去掉方括号内部开头的\符号。所有#CALL语句全部统一修改,道士、法师、战士所有分支的CALL路径都要同步调整,每一处调用都存在同样的路径隐患。
CHECKNAMELIST命令的使用,#IFcheckjobtaoistchecknamelist..\QuestDiary\雇佣兵团\封号名单\5级名单.txt,这里的checknamelist前面,两个条件之间缺少分隔,GOM引擎#IF后面多个条件需要用空格隔开,虽然部分版本可以兼容,但部分内核会解析异常。标准写法为#IFcheckjobtaoist#ACTchecknamelist..\QuestDiary\雇佣兵团\封号名单\5级名单.txt,把多条件拆分,用#ACT分隔,避免条件语句粘连造成解析错乱。
#CALL调用之后的break语句位置,脚本每一段#ACT内部执行完CALL之后直接写break,这个写法本身没问题,但是要确认被CALL调用的外部脚本,比如天尊.txt、道尊.txt这些文件,文件内部不能存在语法错误,外部脚本内部如果有语法报错,会连带主NPC脚本抛出行号错误。外部脚本文件必须存放在Envir\雇佣兵团对应文件夹内,文件后缀为txt,文件名不能带有中文空格,文件夹名称不能存在多余空格。
[@jiarubingyuan]标签内的代码存在语法问题,#IFchecknamelist..\QuestDiary\雇佣兵团\封号名单\1级名单.txt,这一行#IF后面没有条件结束,直接接#SAY,#IF判断之后必须接#ACT或者#ELSEACT,不能直接写#SAY。#SAY属于输出语句,不能直接跟在#IF后面,正确写法需要把#SAY放到#ACT块内部。原脚本写法:
#IFchecknamelist..\QuestDiary\雇佣兵团\封号名单\1级名单.txt
#SAY你已经加入雇佣兵团,不能再次加入!\\<返回/@main>
#ACTbreak
这里的错误在于#SAY不能直接跟在#IF下面,#IF判断成立之后,必须进入#ACT区块执行输出,修改为:
#IFchecknamelist..\QuestDiary\雇佣兵团\封号名单\1级名单.txt
#ACT
#SAY你已经加入雇佣兵团,不能再次加入!\\<返回/@main>
break
继续往下看[@jiarubingyuan]的第二段判断,#IFCHECKLEVELEX>44CHECKCREDITPOINT>9,两个条件之间缺少#ACT分隔,GOM引擎多条件判断,连续写两个检测命令,部分版本解析会出错,修改为#IFCHECKLEVELEX>44#ACTCHECKCREDITPOINT>9,分开条件判断。
脚本内的CREDITPOINT-10,命令书写格式,GOM引擎扣除声望,正确写法为CREDITPOINT-10,语法本身没问题,但是要确认引擎是否支持该命令,部分旧内核需要使用CHANGECREDITPOINT命令。addnamelist命令,把角色名称写入名单txt,文件必须存在,名单txt文件不能设置只读属性,如果文件不存在,执行addnamelist的时候会抛出脚本错误。
脚本换行与符号问题,所有括号、斜杠、大于小于符号必须是英文半角符号,中文全角符号会直接造成行号报错。脚本内的\换行符,每一行末尾的反斜杠不能漏写,SAY输出文本换行,末尾必须带上\,漏写会造成文本解析错乱。脚本的标签[@main]、[@jiarubingyuan]、[@exit]标签,不能有多余空格,标签名称前后不能有空格。
#CALL调用的外部脚本,封号系统1\封号系统.txt,同样要检查路径,方括号内去掉开头反斜杠,确认封号系统.txt文件存放在Envir\封号系统1文件夹下,文件存在,内部脚本没有语法错误。如果被CALL的外部脚本有语法错误,报错会映射到主NPC脚本的行号,容易让人误以为错误出在主脚本。
文件编码问题,所有txt脚本文件保存编码必须是ANSI,保存为UTF‑8编码会出现引擎解析乱码,直接报行号错误。修改完全部脚本之后,在M2控制台重载NPC脚本,不重载脚本,修改不会生效。
排查报错定位方法,M2控制台打开脚本报错日志,看报错的具体行,定位到出错的那一行。可以先注释掉全部#CALL调用语句,只保留基础的[@main]对话和[@jiarubingyuan]加入逻辑,测试脚本是否还报错,如果注释CALL之后报错消失,就说明问题出在#CALL路径或者外部被调用的脚本文件。如果依旧报错,问题就出在[@jiarubingyuan]内部的条件判断和SAY语句写法。
脚本中#IF判断之后,条件成立执行#ACT,条件不成立执行#ELSEACT,不能直接在#IF下写#SAY,这是本次脚本最关键的语法错误点。原脚本[@jiarubingyuan]第一段判断,#IF之后直接写#SAY,不符合GOM脚本语法规则,会触发解析异常,抛出行号报错。
另外注意,checknamelist读取的名单文件,路径使用..\QuestDiary,代表从Envir目录向上一级,QuestDiary文件夹位置需要确认,路径层级不对,checknamelist读取不到名单,虽然不会直接报脚本错误,但是会造成功能失效。
脚本内的set[050]1,变量标记写法没有问题,关闭脚本close命令,放在#ACT内部,位置正确。SENDMSG命令参数格式无误。
总结主要错误点,第一,#CALL方括号内部路径开头多余反斜杠;第二,[@jiarubingyuan]内#IF后直接写#SAY,缺少#ACT区块;第三,部分#IF多条件检测没有做分隔;第四,外部被调用的txt脚本文件是否存在、编码是否正确。把以上几点全部修正,保存脚本,重载NPC脚本,就可以解决行号报错问题。
首先看#CALL调用语句,脚本内大量写法为#CALL[\雇佣兵团\道士\天尊.txt]@天尊,GOM引擎的CALL命令,方括号内的文件路径,基准目录是Envir目录,路径前面的反斜杠写法存在兼容问题。脚本内写的[\雇佣兵团\道士\天尊.txt],开头带反斜杠,部分GOM版本会识别为绝对路径,导致引擎找不到对应的txt脚本文件,触发脚本读取错误。正确写法应该去掉最前面的反斜杠,改为[雇佣兵团\道士\天尊.txt]@天尊,去掉方括号内部开头的\符号。所有#CALL语句全部统一修改,道士、法师、战士所有分支的CALL路径都要同步调整,每一处调用都存在同样的路径隐患。
CHECKNAMELIST命令的使用,#IFcheckjobtaoistchecknamelist..\QuestDiary\雇佣兵团\封号名单\5级名单.txt,这里的checknamelist前面,两个条件之间缺少分隔,GOM引擎#IF后面多个条件需要用空格隔开,虽然部分版本可以兼容,但部分内核会解析异常。标准写法为#IFcheckjobtaoist#ACTchecknamelist..\QuestDiary\雇佣兵团\封号名单\5级名单.txt,把多条件拆分,用#ACT分隔,避免条件语句粘连造成解析错乱。
#CALL调用之后的break语句位置,脚本每一段#ACT内部执行完CALL之后直接写break,这个写法本身没问题,但是要确认被CALL调用的外部脚本,比如天尊.txt、道尊.txt这些文件,文件内部不能存在语法错误,外部脚本内部如果有语法报错,会连带主NPC脚本抛出行号错误。外部脚本文件必须存放在Envir\雇佣兵团对应文件夹内,文件后缀为txt,文件名不能带有中文空格,文件夹名称不能存在多余空格。
[@jiarubingyuan]标签内的代码存在语法问题,#IFchecknamelist..\QuestDiary\雇佣兵团\封号名单\1级名单.txt,这一行#IF后面没有条件结束,直接接#SAY,#IF判断之后必须接#ACT或者#ELSEACT,不能直接写#SAY。#SAY属于输出语句,不能直接跟在#IF后面,正确写法需要把#SAY放到#ACT块内部。原脚本写法:
#IFchecknamelist..\QuestDiary\雇佣兵团\封号名单\1级名单.txt
#SAY你已经加入雇佣兵团,不能再次加入!\\<返回/@main>
#ACTbreak
这里的错误在于#SAY不能直接跟在#IF下面,#IF判断成立之后,必须进入#ACT区块执行输出,修改为:
#IFchecknamelist..\QuestDiary\雇佣兵团\封号名单\1级名单.txt
#ACT
#SAY你已经加入雇佣兵团,不能再次加入!\\<返回/@main>
break
继续往下看[@jiarubingyuan]的第二段判断,#IFCHECKLEVELEX>44CHECKCREDITPOINT>9,两个条件之间缺少#ACT分隔,GOM引擎多条件判断,连续写两个检测命令,部分版本解析会出错,修改为#IFCHECKLEVELEX>44#ACTCHECKCREDITPOINT>9,分开条件判断。
脚本内的CREDITPOINT-10,命令书写格式,GOM引擎扣除声望,正确写法为CREDITPOINT-10,语法本身没问题,但是要确认引擎是否支持该命令,部分旧内核需要使用CHANGECREDITPOINT命令。addnamelist命令,把角色名称写入名单txt,文件必须存在,名单txt文件不能设置只读属性,如果文件不存在,执行addnamelist的时候会抛出脚本错误。
脚本换行与符号问题,所有括号、斜杠、大于小于符号必须是英文半角符号,中文全角符号会直接造成行号报错。脚本内的\换行符,每一行末尾的反斜杠不能漏写,SAY输出文本换行,末尾必须带上\,漏写会造成文本解析错乱。脚本的标签[@main]、[@jiarubingyuan]、[@exit]标签,不能有多余空格,标签名称前后不能有空格。
#CALL调用的外部脚本,封号系统1\封号系统.txt,同样要检查路径,方括号内去掉开头反斜杠,确认封号系统.txt文件存放在Envir\封号系统1文件夹下,文件存在,内部脚本没有语法错误。如果被CALL的外部脚本有语法错误,报错会映射到主NPC脚本的行号,容易让人误以为错误出在主脚本。
文件编码问题,所有txt脚本文件保存编码必须是ANSI,保存为UTF‑8编码会出现引擎解析乱码,直接报行号错误。修改完全部脚本之后,在M2控制台重载NPC脚本,不重载脚本,修改不会生效。
排查报错定位方法,M2控制台打开脚本报错日志,看报错的具体行,定位到出错的那一行。可以先注释掉全部#CALL调用语句,只保留基础的[@main]对话和[@jiarubingyuan]加入逻辑,测试脚本是否还报错,如果注释CALL之后报错消失,就说明问题出在#CALL路径或者外部被调用的脚本文件。如果依旧报错,问题就出在[@jiarubingyuan]内部的条件判断和SAY语句写法。
脚本中#IF判断之后,条件成立执行#ACT,条件不成立执行#ELSEACT,不能直接在#IF下写#SAY,这是本次脚本最关键的语法错误点。原脚本[@jiarubingyuan]第一段判断,#IF之后直接写#SAY,不符合GOM脚本语法规则,会触发解析异常,抛出行号报错。
另外注意,checknamelist读取的名单文件,路径使用..\QuestDiary,代表从Envir目录向上一级,QuestDiary文件夹位置需要确认,路径层级不对,checknamelist读取不到名单,虽然不会直接报脚本错误,但是会造成功能失效。
脚本内的set[050]1,变量标记写法没有问题,关闭脚本close命令,放在#ACT内部,位置正确。SENDMSG命令参数格式无误。
总结主要错误点,第一,#CALL方括号内部路径开头多余反斜杠;第二,[@jiarubingyuan]内#IF后直接写#SAY,缺少#ACT区块;第三,部分#IF多条件检测没有做分隔;第四,外部被调用的txt脚本文件是否存在、编码是否正确。把以上几点全部修正,保存脚本,重载NPC脚本,就可以解决行号报错问题。

