GetListString命令用于从文本文件中读取指定行的内容,并将其赋值给字符串变量。该命令在任务系统、随机名称、公告读取等场景应用广泛。基本语法为:GetListString 文件路径 行号变量 字符串变量。其中行号变量决定读取第几行,字符串变量用于接收读取结果。
命令语法与参数解析
在标准脚本引擎中,GetListString命令的格式为:GetListString <文件名> <行号> <字符串变量>。文件名需提供完整或相对路径,相对路径通常相对于Mir200\Envir目录。行号参数可以是数字常量或已赋值的数字变量,行号计数从1开始。字符串变量用于存储读取到的该行完整文本内容,包括空格和分隔符。
用户脚本错误分析
根据提供的脚本片段,存在多处关键错误导致功能异常。首先,MOV命令用法不正确。脚本中“MOV <$STR(N主线段数)> 1”是错误语法。MOV命令的正确格式应为“MOV 变量名 值”。这里应改为“MOV N主线段数 1”。原写法试图将数字1赋给一个字符串表达式,引擎无法解析,这直接触发了参数错误。
其次,GetListString命令的参数引用不当。虽然命令写为“GetListString ..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt <STR(N主线段数)> <STR(S主线名称)>”,但第三个参数<S主线名称>本身已是字符串变量名,不应使用<STR()>包裹。正确写法应为“GetListString ..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt <STR(N主线段数)> S$主线名称”。参数使用不当导致引擎始终读取第一行,因为无法正确识别目标变量。
正确脚本范例与注释
修正后的脚本应如下所示:
#IF
CHECK [102] 1
#ACT
MOV N主线段数 1
GetListString ..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt <$STR(N主线段数)> S$主线名称
SENDMSG 0 读取到的内容为:<$STR(S$主线名称)>
此处,首先用MOV命令为数字变量N主线段数赋值为1。然后在GetListString命令中,行号参数通过<STR(N主线段数)>引用该变量的值,目标变量直接写变量名S主线名称。执行后,该变量将保存文本文件第一行的完整字符串“被废弃的村庄1:皇族埋骨地一层1”。
文本文件格式与路径要求
被读取的文本文件“主线名称.txt”必须符合规范。文件应使用ANSI编码保存,推荐用记事本打开后另存为时选择ANSI编码。每行内容以回车换行结束,示例文件内容正确。文件路径中的中文目录名在多数引擎中可识别,但为确保兼容性,可考虑将“二明专用”等目录改为英文或拼音。文件路径需确保引擎有权限读取,避免放在受系统保护的目录。
实现循环读取与边界处理
若需遍历文件所有行,需结合循环与行数判断。标准做法如下:
#ACT
MOV N当前行 1
WHILE N当前行 < 10
GetListString ..\路径\主线名称.txt <$STR(N当前行)> S$临时内容
#IF
NOT EQUAL S$临时内容
#ACT
SENDMSG 0 第<$STR(N当前行)>行:<$STR(S$临时内容)>
MOV N当前行 <$STR(N当前行)>
#ELSEACT
BREAK
此脚本从第1行开始读取,直到读取到空行或超过10行后停止。关键点在于每次读取后检查S$临时内容是否为空,为空则说明已超出文件行数,用BREAK退出循环。
常见错误场景与排查
GetListString命令执行失败通常有几个原因。文件路径错误最常见,需检查相对路径起点,多数引擎以Mir200\Envir为当前目录,“..\”表示上级目录。行号变量值非数字或为0会导致读取失败,行号应为大于等于1的整数。变量未初始化也可能出错,使用前用MOV命令为字符串变量赋空值初始化。文件被其他程序占用锁定会导致读取失败,确保文本文件未被Excel等程序打开。
命令进阶应用技巧
该命令可用于配置系统,如读取随机怪物刷新列表。在文本文件中每行定义“地图 X坐标 Y坐标 怪物名 数量”,脚本读取后使用PARSEPARAM命令分割字符串,再执行刷怪。也可用于多语言支持,在不同文本文件中存放中文、英文版本,根据玩家选择读取对应文件。读取时若行号超出文件总行数,多数引擎会返回空字符串,脚本中应做判断,避免使用空值导致后续错误。
总之,正确使用GetListString命令需注意三点:MOV命令变量赋值格式正确;GetListString参数引用恰当;文本文件编码与路径有效。通过修正语法错误并确保文件可访问,该命令能稳定实现文本数据读取功能,为复杂脚本系统提供数据支持。

