传奇GetListString命令读取错误与变量解析详解

来源: 作者: 点击:
一、错误原因:脚本引擎解析顺序冲突

你遇到的“以前下错误”和“只读取第一行”,核心问题在于脚本引擎执行顺序与变量解析时机的冲突。脚本执行到#IFCHECK[102]1时,会立即计算后面的MOV命令参数,但引擎在解析<$STR(N主线段数)>时,该变量尚未被赋值,导致读取失败。

二、GetListString正确用法与变量声明

1.强制变量声明与预赋值

在使用GetListString等文件读取命令前,必须确保其索引参数(行数)的变量已被明确定义和赋值。最佳实践是提前一行对N主线段数进行定义。

修改后脚本示例:

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


关键改动:
•第3行:MOVN主线段数1移除了<$STR()>包裹。MOV命令直接操作变量名,无需STR()转换。

•第4行:GetListString的参数<S$主线名称>同样移除了<$STR()>包裹,直接使用变量名。

2.GetListString参数详解

GetListString命令的正确格式为:

GetListString文件路径行数变量结果字符串变量

•文件路径:相对于MirServer\Mir200目录的路径。你的路径正确。

•行数变量:必须是一个数字型变量(如N主线段数),其值代表读取第几行(从1开始计数)。

•结果字符串变量:必须是一个字符串型变量(如S$主线名称),用于接收读取到的文本。

三、脚本引擎执行逻辑与变量类型

1.变量类型与命名规范

•数字变量:以N或M开头,如N主线段数、M10。用于存储整数。

•字符串变量:以S或A开头,如S$主线名称、A100。用于存储文本。

2.错误脚本逐行分析

你的原脚本:

MOV<$STR(N主线段数)>1

引擎执行时,会先解析参数<STR(N主线段数)>。但由于N主线段数此时未定义,其值为空或0,导致解析为MOV01,这相当于尝试将常量0赋值为1,逻辑错误,因此报“以前下错误”。

四、实战应用:循环读取文本文件所有行

若要读取“主线名称.txt”的每一行,应使用While循环配合GetListString。

示例脚本:

#IF
CHECK[102]1
#ACT
MOVN主线段数1
MOVN文件总行数3
WhileN主线段数<=N文件总行数
GetListString..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txtN主线段数S$主线名称
SENDMSG6第<$STR(N主线段数)>行:<$STR(S$主线名称)>
IncN主线段数1
EndWhile


注意:你需要提前知道文件总行数(此例中为3),或通过其他方式(如GetRandomText或遍历)获取。部分引擎支持GetListStringCount命令获取总行数,可查阅引擎说明书确认。

五、常见报错与排查

报错信息可能原因解决方案

“以前下错误”变量未声明或<$STR()>包裹错误移除MOV命令中的<$STR()>,直接使用变量名

只读取第一行行数变量未在循环中递增在循环内使用IncN主线段数1递增行号

读取为空文件路径错误或编码不匹配检查路径,确保文件为ANSI编码(记事本另存为可选)

最终建议:在调用GetListString这类依赖外部文件的命令前,务必先用SENDMSG输出行数变量的值,确认其不为0,这是调试脚本的基唇法。
[顶部]