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

传奇GetListString命令脚本错误分析与正确使用指南

热度:
您提供的脚本在执行时,MOV命令与GetListString命令均存在使用问题,导致读取文件异常。核心错误在于变量类型使用不当和文件路径格式不准确。

错误诊断与直接原因

首先,日志报错[脚本错误]脚本命令:MOV...参数1:<$STR(N主线段数)>参数2:1直接指明了问题。在传奇脚本中,N开头的变量(如N主线段数)是数字型变量。<$STR()>函数是用于获取字符串型变量(S变量)的值的。引擎试图将<$STR(N主线段数)>这个错误的格式解释为一个变量名,但无法识别,因此MOV命令的第一个参数报错。

脚本修正方案

您的原始脚本段落:

#IF
CHECK[102]1
#ACT
MOV<$STR(N主线段数)>1
GetListString..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt<$STR(N主线段数)><$STR(S$主线名称)>


修正后的正确写法:

#IF
CHECK[102]1
#ACT
MOVN主线段数1
GetListString..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt<$STR(N主线段数)>S$主线名称


修正点详解:
1.MOV命令修正:MOV命令用于给变量赋值。给数字型变量N主线段数赋值应直接写作MOVN主线段数1。<$STR()>函数在此处是多余的且错误的。
2.GetListString命令修正:
◦第二个参数“行号”:要求传入一个数字。由于N主线段数是数字变量,需要将其值转换为字符串传入,因此应写作<$STR(N主线段数)>。这一部分您原来的用法是对的,但前提是N主线段数这个变量必须已正确定义(即上一条MOV命令需正确执行)。

◦第三个参数“接收字符串的变量”:要求传入一个字符串型变量名。S$主线名称就是一个字符串变量(S$前缀表示私人字符串变量)。将其赋值给另一个变量时,直接写变量名S$主线名称即可,无需包裹<$STR()>。<$STR(S$主线名称)>表示的是“获取变量S$主线名称的值”,而不是变量本身。

为什么总是读取第一行?

这是因为MOV命令因格式错误未能正确执行,导致N主线段数这个变量可能没有被成功赋值为1,或者其值在脚本其他部分被重置。当GetListString执行时,<$STR(N主线段数)>获取到的值可能是一个空值或无效值,引擎默认处理为读取第一行(行号1)。即使您尝试修改MOVN主线段数2,如果这个MOV命令所在的脚本段因为其他错误(或条件不满足)没有执行,那么N主线段数的值依然是初始值或旧值,GetListString读取的行号也就不会改变。

路径与文件格式验证

您的文件路径..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt是相对路径。请确保:
1.该路径相对于您的游戏服务器Mir200目录下的Envir文件夹是准确的。
2.主线名称.txt文件确实存在于此路径,且内容格式为纯文本(ANSI编码),每行一条记录,格式如您所示:“被废弃的村庄1:皇族埋骨地一层1”。

完整排查与测试步骤

1.备份脚本:修改前,备份您的QFunction-0.txt或其他包含此脚本的文件。
2.修正语法:严格按照上述修正方案,修改脚本中的MOV和GetListString命令。
3.检查关联脚本:检查脚本中所有修改N主线段数的地方(如使用INC、DEC、MOV等命令),确保语法都正确(直接使用N主线段数,而非<$STR(N主线段数)>进行赋值或计算)。
4.添加调试信息:为了验证是否执行到该段脚本以及变量值,可以在命令后加入调试语句:

#ACT
MOVN主线段数2;尝试修改为2或其他行号
GetListString..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt<$STR(N主线段数)>S$主线名称
SENDMSG6【调试】当前读取行数:<$STR(N主线段数)>,获得内容:<$STR(S$主线名称)>

这样,如果脚本执行,游戏角色会收到一条提示信息,显示实际读取的行数和内容。
5.重启并测试:修改保存后,重启M2服务器引擎(必要步骤),然后在游戏中触发执行该脚本的条件(例如完成标记[102]对应的任务)。观察M2控制台是否还有脚本错误,并查看游戏内的调试信息。
6.检查文件:用记事本打开主线名称.txt,确认第二行确实有内容“被废弃的村庄1:皇族埋骨地一层2”。

GetListString命令标准用法归纳

•功能:从指定文本文件中,读取某一行的内容,并将其赋值给一个字符串变量。

•完整格式:GetListString文件路径行号字符串变量

•参数说明:

◦文件路径:文本文件的相对或绝对路径。推荐使用相对于Envir目录的相对路径。

◦行号:要读取的行数,从1开始计数。必须是一个能解析为数字的表达式,常用<$STR(N数字变量)>。

◦字符串变量:用于接收读取内容的字符串变量名,直接写变量名,如S$变量名、A变量名等。

遵循以上修正和排查步骤,即可解决脚本错误,并使GetListString命令能够正确读取指定文本文件的任意一行内容。
[顶部]