一、GetListString命令格式与参数详解
标准格式:
GetListString 文件路径 行数变量 接收变量
• 文件路径:相对于服务端Mir200目录,支持绝对路径(如D:\MirServer\...)和相对路径(如..\QuestDiary\...)。
• 行数变量:指定读取文件的第几行,必须为数字型变量(如N变量、P变量、G变量、D变量、S$变量等),行数从0开始计数。
• 接收变量:存放读取内容的字符串变量,必须是可赋值的字符串类型(如S$变量、A$变量、M$变量)。
示例脚本:
#ACT
MOV N$行数 0
GetListString ..\QuestDiary\名单.txt N$行数 S$读取内容
SENDMSG 0 第0行内容:<$STR(S$读取内容)>
这将读取名单.txt的第1行(行数0)存入变量S$读取内容。
二、错误脚本逐行分析
#IF
CHECK [102] 1
#ACT
MOV <$STR(N主线段数)> 1
GetListString ..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt <$STR(N主线段数)> <$STR(S$主线名称)>
核心错误:
1. MOV命令语法错误:<$STR(N主线段数)>是变量取值格式,不能作为变量名被赋值。MOV命令的目标变量名不能带格式符。正确写法是:
MOV N$主线段数 1
2. GetListString参数格式错误:第二、三个参数必须是变量名本身,不能是<$STR(...)>格式。这是脚本执行失败、只能读第一行的根本原因。
三、正确脚本与常见用法
修正后的脚本:
#IF
CHECK [102] 1
#ACT
MOV N$主线段数 0
GetListString ..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt N$主线段数 S$主线名称
SENDMSG 0 读取的线段名称:<$STR(S$主线名称)>
循环读取文件所有行示例:
#ACT
MOV N$当前行 0
WHILE N$当前行 < 3
GetListString ..\QuestDiary\任务变量\主线名称.txt N$当前行 S$临时内容
SENDMSG 0 第<$STR(N$当前行)>行:<$STR(S$临时内容)>
INC N$当前行 1
ENDWHILE
四、文件格式与路径排查
文件主线名称.txt格式问题:
你的文件内容为:
被废弃的村庄1:皇族埋骨地一层1
被废弃的村庄1:皇族埋骨地一层2
被废弃的村庄1:皇族埋骨地一层3
这是正确格式。常见错误格式包括:
• 文件编码不是ANSI(用记事本另存为ANSI编码)。
• 文件名或路径含中文但引擎不支持(用全英文路径测试)。
• 文件有BOM头(用Notepad++转UTF-8无BOM)。
路径检查技巧:
• 先确认文件存在:..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt
• 用绝对路径测试:GetListString D:\MirServer\Mir200\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt N$主线段数 S$主线名称
• 检查权限:确保引擎有读取该目录的权限。
五、不同引擎语法差异
GEE/GOM引擎:支持GetRandomText命令替代GetListString,语法不同。
LF/翎风引擎:GetListString行数参数从0开始,与HERO、BLUE引擎一致。
3K/KK引擎:老版本需用GETRANDOMLINETEXT命令,新版本支持GetListString。
通用兼容写法:
#ACT
VAR Integer HUMAN 主线段数
LoadValue HUMAN 主线段数
GetListString ..\QuestDiary\文件.txt HUMAN 主线段数
六、脚本调试与日志查看
修改脚本后,重启M2或重新加载QFunction脚本。在M2菜单查看→脚本日志中查看具体报错:
• 若提示“文件不存在”,检查路径和文件名。
• 若提示“变量类型错误”,确认参数是变量名。
• 若提示“行数超出范围”,检查文件行数和行数变量值。
用以下调试脚本测试:
#IF
#ACT
MOV N$行数 1
DEC N$行数 1
GetListString ..\QuestDiary\测试.txt N$行数 S$内容
SENDMSG 0 行数<$STR(N$行数)>的内容是:<$STR(S$内容)>
总结:GetListString命令的常见错误是参数使用了<$STR(...)>取值格式。正确做法是:第一参数为文件路径字符串,第二参数为数字型变量名,第三参数为字符串型变量名。修改脚本变量格式、确认文件编码、检查引擎兼容性即可解决读取问题。

