脚本错误2通常表示引擎在解析脚本时遇到了无法识别的命令结构或缺失条件。报错信息中的第2467行是引擎实际读取到的行号,由于文件可能存在大量空行、注释或前面段落,你打开文件时看到的行号未必完全对应。但根据你贴出的脚本片段,已经能定位到几处明显的语法问题。下面按错误类型逐一说明,并给出修改方法。
一、最明显的错误:#IF后面直接跟#SAY
在[@main]段落的末尾,有这样的写法:
#IF
#say
为了防止外敌入侵,我们现在正在招收雇佣兵,你也想加入吗?\
#IF是条件判断指令,它后面必须紧跟至少一个条件命令,比如checkjob、checknamelist、CHECKLEVELEX、CHECKCREDITPOINT等。如果没有任何条件,就不能写#IF。引擎解析到#IF后,下一行读取到#say,发现它不是有效的条件命令,就会直接报脚本错误。
这里的本意是无条件显示对话,所以应该删掉#IF这一行,直接写#say。修改后:
#say
为了防止外敌入侵,我们现在正在招收雇佣兵,你也想加入吗?\
如果确实需要条件,比如只有某个职业才能看到,那就在#IF下面补上条件命令。但根据上下文,这里就是普通对话,不需要条件。
二、第二个错误:#SAY和#ACT同时出现在同一个#IF块中
在[@jiarubingyuan]段落里,有这样的结构:
#IF
checknamelist ..\QuestDiary\雇佣兵团\封号名单\1级名单.txt
#SAY
你已经加入雇佣兵团,不能再次加入!\ \
<返回/@main>
#ACT
break
标准写法中,#IF条件成立后,要么接#SAY显示对话,要么接#ACT执行动作。同时写#SAY和#ACT,不同引擎处理方式不一样,有的会报错,有的只执行其中一个,导致脚本逻辑混乱。
这里的目的是:如果玩家已经在名单里,就显示提示,然后中断后续判断。正确的写法应该是:
#IF
checknamelist ..\QuestDiary\雇佣兵团\封号名单\1级名单.txt
#SAY
你已经加入雇佣兵团,不能再次加入!\ \
<返回/@main>
去掉#ACT和break。因为#SAY显示对话后,脚本会等待玩家点击,不会继续往下执行,所以不需要break。如果引擎要求必须中断,可以在#SAY之前加#ACT break,但那样就不会显示对话了。所以最稳妥的是只保留#SAY。
三、检查所有#CALL的目标文件和标签
脚本中有大量这样的调用:
#CALL [\雇佣兵团\道士\天尊.txt] @天尊
#CALL [\雇佣兵团\法师\法神.txt] @法神
#CALL [\雇佣兵团\战士\战圣.txt] @战圣
这些#CALL语句要求目标文件真实存在,并且文件中必须有对应的标签。比如天尊.txt里必须有[@天尊]这个段落,法神.txt里必须有[@法神],战圣.txt里必须有[@战圣]。如果文件不存在,或者标签名写错,引擎加载时就会报脚本错误,报错行号往往指向#CALL这一行。
逐一核对:打开服务端Envir目录,进入QuestDiary文件夹,查看雇佣兵团文件夹下是否有道士、法师、战士三个子文件夹,里面是否有天尊.txt、道尊.txt、真人.txt、散人.txt、道玄.txt、法神.txt、法王.txt、法灵.txt、法魄.txt、法魂.txt、战圣.txt、武尊.txt、武狂.txt、战狂.txt、战将.txt。缺哪个就补哪个。然后打开每个文件,确认标签名与#CALL后面写的一致,大小写也要一致。
四、检查名单文件的路径和文件名
脚本中多处使用checknamelist和addnamelist,路径是:
..\QuestDiary\雇佣兵团\封号名单\5级名单.txt
..\QuestDiary\雇佣兵团\封号名单\4级名单.txt
..\QuestDiary\雇佣兵团\封号名单\3级名单.txt
..\QuestDiary\雇佣兵团\封号名单\2级名单.txt
..\QuestDiary\雇佣兵团\封号名单\1级名单.txt
从Market_Def\盟重省\目录出发,..\表示退回上一级,即Envir目录,然后进入QuestDiary。这个相对路径本身是对的。但要确认这些txt文件是否真的存在。如果文件不存在,checknamelist会返回假,不会报脚本错误,但addnamelist会尝试写入,如果目录不存在,可能报错。建议手动创建封号名单文件夹,并在里面放好5级名单.txt、4级名单.txt、3级名单.txt、2级名单.txt、1级名单.txt,哪怕内容是空的。
五、检查脚本编码和符号
传奇引擎的脚本文件必须用ANSI编码保存。如果用UTF-8或UTF-8 with BOM保存,引擎读取时会出现乱码,导致命令无法识别。用记事本打开脚本,另存为时编码选择ANSI,覆盖原文件。
同时检查所有符号是否为英文半角。中文逗号、中文括号、中文引号都会导致解析失败。重点检查#IF、#ACT、#SAY、#CALL、break、checkjob、checknamelist这些关键字周围,以及对话内容中的标点。对话内容可以用中文标点,但命令和参数必须用英文半角。
六、行号差异的说明
报错说第2467行,但你贴出的片段可能只是文件的一部分。如果这个文件很大,错误可能出现在你未贴出的其他段落。建议用Notepad++打开文件,开启行号显示,跳转到第2467行附近,查看那里的代码。常见错误包括:#IF后没有条件、#ACT后没有命令、#CALL路径错误、标签未闭合、变量未定义等。如果第2467行附近是空行或注释,说明引擎的行号计算方式不同,实际错误可能在前面几行。从第2467行往前找最近的#IF、#ACT、#SAY段落,逐行检查。
七、修复后的测试方法
修改脚本前先备份原文件。每次只改一处,保存后重启M2Server,观察控制台是否还报同样的错误。如果报错行号变了,说明修好了一处,继续排查下一处。如果报错消失,进入游戏找到盟重城的雇用兵团NPC,测试对话、加入兵团、封号显示等功能是否正常。加入兵团需要10点声望和45级,可以用GM命令给自己调等级和声望,然后点击加入,看是否成功写入1级名单,是否触发封号系统调用。
八、其他常见脚本错误
除了上述问题,还有几种情况会触发脚本错误2。一是#IF块缺少#ACT或#SAY,比如只有#IF和条件,没有后续动作,引擎解析到下一个#IF时会报错。二是#ACT块中使用了不存在的命令,比如set [050] 1中的变量编号超出引擎支持范围,或者CREDITPOINT命令拼写错误。三是#CALL的路径使用了绝对路径,比如从盘符开始,而引擎要求相对路径。四是标签重复,同一个文件里出现两个[@main],引擎不知道该跳转到哪个。
按照上面几步排查,重点处理#IF后直接跟#SAY、#SAY与#ACT混用、#CALL目标缺失这三个问题,脚本错误基本可以解决。修复完成后,把修改过的文件备份一份,避免以后重新解压服务端时被覆盖。
传奇脚本错误2第2467行雇用兵团脚本语法修复完整指南
来源:
作者:
点击:

