GetListString是传奇脚本中常用的文本读取命令,核心功能是读取指定TXT文本中的指定行内容,并将其赋值给对应变量,常用于任务系统、称号系统、地图跳转等场景,尤其适合批量读取文本中的配置信息,如任务名称、地图路径等。
GetListString命令基础语法及参数说明,无需复杂理解,记住格式即可直接套用,语法格式如下:GetListString 文本路径 读取行数 目标变量。
三个核心参数详细说明,结合实际使用场景拆解,避免参数混淆导致错误:
1. 文本路径:指定需要读取的TXT文本完整路径,支持相对路径和绝对路径,路径中若包含中文文件夹,需确保文件夹名称无特殊符号(如@、#、&等),否则会导致文本读取失败。相对路径以脚本所在文件夹为基准,例如用户脚本中使用的“..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt”,其中“..\”表示向上跳转一级文件夹,适合脚本与文本文件不在同一目录的场景;绝对路径需写完整磁盘路径,例如“D:\MirServer\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt”,稳定性更高,避免路径跳转错误。
2. 读取行数:指定读取TXT文本中的第几行内容,必须填写正整数(1、2、3...),行数从1开始计数,而非0,若填写0或负数,会直接导致命令执行失败,出现脚本报错。
3. 目标变量:用于存储读取到的文本内容,变量需遵循传奇脚本变量命名规则,可使用系统自带变量或自定义变量,常用格式为<$STR(变量名)>,例如用户脚本中的<$STR(S$主线名称)>,其中“S$”为自定义变量前缀,用于区分不同类型变量,避免变量冲突。
GetListString命令基础使用步骤,结合用户提供的脚本片段,分三步操作,确保命令正常执行:
第一步,准备TXT文本文件,按照需求编辑文本内容,每行填写一条数据,无需添加多余符号,换行需使用系统默认换行格式(不可使用手动空格换行)。例如用户提供的“主线名称.txt”,内容为三行数据:被废弃的村庄1:皇族埋骨地一层1、被废弃的村庄1:皇族埋骨地一层2、被废弃的村庄1:皇族埋骨地一层3,每行一条,无多余空格和符号,符合命令读取要求。
第二步,确认文本路径正确性,将TXT文本放置在指定文件夹中,记录完整路径,确保脚本中填写的路径与实际文件路径完全一致,包括文件夹名称、文本文件名及后缀(.txt不可省略)。例如用户脚本中路径为“..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt”,需确认该路径下确实存在“主线名称.txt”文件,且文件夹名称无拼写错误(如“二明专用”不可误写为“二明专”“二明专用1”)。
第三步,编写脚本命令,结合场景需求,先定义读取行数变量,再执行GetListString命令,最后可通过输出变量值,验证命令是否执行成功。例如用户提供的脚本片段:
#IF
CHECK [102] 1
#ACT
MOV <$STR(N主线段数)> 1
GetListString ..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt <$STR(N主线段数)> <$STR(S$主线名称)>
该脚本逻辑为:当检测到[102]变量值为1时,将<$STR(N主线段数)>变量赋值为1,然后读取“主线名称.txt”第1行内容,赋值给<$STR(S$主线名称)>变量,用于后续任务逻辑调用。
重点解决用户遇到的两个核心问题:脚本报错(MOV命令错误)、读取异常(仅读取第一行,修改行数无效),结合用户脚本片段和文本内容,逐一拆解原因及解决方法,全程贴合实际操作,可直接对照修改。
第一个问题:脚本报错[ 脚本错误] 脚本命令:MOV NPC名称:QFunction 地图:0(0:0) 参数1:<$STR(N主线段数)> 参数2:1 参数3: 参数4: 参数5: 参数6: 参数7: 参数8: 参数9: 参数10:
报错核心原因:MOV命令使用错误,变量格式不符合传奇脚本规范,并非GetListString命令本身错误,很多用户会误以为是读取命令报错,实则是前置的MOV赋值命令出错。
具体原因拆解:传奇脚本中,MOV命令用于给变量赋值,其语法格式为“MOV 变量 赋值内容”,其中变量需使用正确的变量格式,不可直接使用<$STR(变量名)>作为赋值目标。用户脚本中“MOV <$STR(N主线段数)> 1”的写法错误,<$STR(变量名)>是变量的调用格式,而非变量本身,赋值时需直接使用变量名,无需添加<$STR()>包裹。
解决方法:修改MOV命令的变量格式,去掉<$STR()>包裹,直接使用变量名赋值,修改后的脚本如下:
#IF
CHECK [102] 1
#ACT
MOV N主线段数 1
GetListString ..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt <$STR(N主线段数)> <$STR(S$主线名称)>
修改说明:赋值时直接写“N主线段数”(变量本身),调用时再使用<$STR(N主线段数)>(变量调用格式),符合传奇脚本MOV命令的语法规范,修改后即可解决该报错。
补充说明:若修改后仍报错,需检查变量名是否存在冲突,避免与系统自带变量重名(如不可使用“LEVEL”“HP”等系统变量名作为自定义变量),“N主线段数”“S$主线名称”这类自定义变量,建议添加前缀(如N、S$),区分变量用途,减少冲突。
第二个问题:就算把读取行数改成其它值,只会读取第一行内容,无法读取后续行(如修改N主线段数为2、3,仍读取“被废弃的村庄1:皇族埋骨地一层1”)。
该问题核心原因有4种,按概率从高到低排序,逐一排查即可解决,无需复杂操作,新手也能快速上手:
原因一:读取行数变量未正确赋值,导致GetListString命令始终读取第1行。很多用户修改了MOV命令的赋值内容(如改为MOV N主线段数 2),但未保存脚本,或脚本未生效,导致变量值仍为1,读取行数始终是1,自然只能读取第一行。
解决方法:修改MOV命令的赋值内容后,保存脚本文件(快捷键Ctrl+S),然后重启脚本引擎(如QFunction脚本需重启传奇引擎),确保脚本修改生效。例如想要读取第2行,将MOV命令改为“MOV N主线段数 2”,保存后重启引擎,再执行脚本,即可读取“被废弃的村庄1:皇族埋骨地一层2”。
原因二:TXT文本换行格式错误,导致命令无法识别后续行。传奇脚本的GetListString命令,仅支持系统默认的“Windows换行格式”(CRLF),若文本是用记事本以外的工具编辑(如记事本++、WPS),且换行格式设置为“Linux换行格式”(LF),命令会将所有内容识别为一行,无论修改读取行数为多少,都只会读取第一行(实际是整个文本内容)。
解决方法:用系统自带的记事本打开“主线名称.txt”文件,点击“文件”→“另存为”,在弹出的窗口中,点击“保存类型”选择“所有文件”,“编码”选择“ANSI”,然后点击“保存”,覆盖原有文件。这样可将文本换行格式转换为Windows默认格式,命令就能正常识别每一行内容。
补充操作:若文本内容较多,可先删除原有换行,重新手动换行(按Enter键),确保每行只有一条数据,无多余空行,避免空行被识别为有效行,影响读取结果。
原因三:文本路径错误,导致命令读取的是其他同名TXT文件(该文件只有一行内容)。用户脚本中使用的是相对路径“..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt”,若该路径下不存在目标文件,脚本会自动查找其他同名文件(如脚本所在文件夹中的“主线名称.txt”),若该同名文件只有一行内容,就会出现“无论修改行数,只读取第一行”的情况。
解决方法:验证文本路径的正确性,打开脚本中填写的路径(..\QuestDiary\二明专用\任务系统\任务变量\),确认该文件夹下的“主线名称.txt”有3行内容,且文件名无拼写错误(如不可误写为“主线名称1.txt”“主线名称.txt.bak”)。若路径错误,修改为正确路径;若不存在该文件,将目标TXT文本移动到该路径下。
建议:若不确定相对路径是否正确,可替换为绝对路径,例如“D:\MirServer\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt”,绝对路径无需依赖脚本所在位置,稳定性更高,可避免路径跳转错误。
原因四:变量调用格式错误,导致读取行数未被正确识别。GetListString命令的“读取行数”参数,需使用<$STR(变量名)>格式调用变量,若遗漏<$STR()>,直接填写变量名,命令会无法识别变量值,默认读取第一行。
解决方法:检查GetListString命令的第二个参数,确保是<$STR(N主线段数)>,而非“N主线段数”。例如用户原脚本中的写法是正确的,但若不小心修改为“GetListString ..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt N主线段数 <$STR(S$主线名称)>”,就会导致读取行数无法识别,仅读取第一行,需改回正确格式即可。
GetListString命令常见补充问题及解决方法,覆盖用户可能遇到的延伸问题,无需额外查找资料:
1. 读取内容为空:原因是读取行数超过文本实际行数(如文本只有3行,读取行数设为4),或文本路径错误、文本为空。解决方法:确认文本实际行数,确保读取行数≤文本总行数;验证文本路径和文本内容,确保文本有有效数据。
2. 读取内容乱码:原因是TXT文本编码格式错误,传奇脚本仅支持ANSI编码,若文本编码为UTF-8、Unicode,会出现乱码。解决方法:用记事本打开文本,点击“文件”→“另存为”,编码选择“ANSI”,保存后覆盖原有文件即可。
3. 命令执行无反应:原因是脚本条件未满足(如用户脚本中CHECK [102] 1,若[102]变量值不为1,#ACT下的命令不会执行),或脚本引擎未重启,修改后的脚本未生效。解决方法:检查CHECK条件中的变量值,确保条件满足;修改脚本后重启引擎,确保命令生效。
结合用户脚本的完整修改示例,可直接复制使用,解决报错和读取异常问题,修改后的完整脚本如下:
#IF
CHECK [102] 1
#ACT
MOV N主线段数 1 ;读取第1行,需读取第2行改为2,第3行改为3
GetListString D:\MirServer\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt <$STR(N主线段数)> <$STR(S$主线名称)> ;使用绝对路径,避免路径错误
;可添加输出命令,验证读取结果,例如:SENDMSG 0 读取的主线名称:<$STR(S$主线名称)>
使用注意事项,避免后续再次出现报错和读取异常:
1. 所有脚本命令需严格区分大小写,传奇脚本中命令(如MOV、GetListString、CHECK)不区分大小写,但变量名区分大小写(如N主线段数和n主线段数是两个不同变量),需保持变量名一致。
2. 文本路径和文件名中,不可包含特殊符号和空格,中文文件夹名称需正常输入,不可使用全角符号(如。、,、!等),避免命令无法识别路径。
3. 每次修改脚本或文本后,必须保存文件并重启传奇引擎,确保修改生效,否则脚本会执行旧版本内容,导致问题无法解决。
4. 若需要循环读取文本中的所有行,可结合循环命令(如LOOP)和变量自增(如ADD N主线段数 1),实现批量读取,例如循环读取“主线名称.txt”中的3行内容,赋值给不同变量,用于多阶段任务。
总结:GetListString命令使用难度较低,核心是掌握“路径+行数+变量”的正确格式,用户遇到的报错和读取异常,本质是MOV命令格式错误、文本格式错误或路径错误,按本文提供的方法逐一排查修改,即可快速解决。实际使用中,优先使用绝对路径,确保文本编码和换行格式正确,修改脚本后重启引擎,可大幅减少问题出现的概率。若修改后仍有异常,可检查文本内容是否正确、变量是否冲突,或验证命令参数是否符合语法规范。

