HeroM2引擎将玩家名字保存到指定TXT文本,核心问题集中在输入框调用错误、保存命令使用不当、路径格式错误三点。以下先修正原有脚本,再拆解核心逻辑、补充异常判断,确保功能正常生效。
原有脚本错误解析及修正版(直接替换可用)
核心错误点
1. 输入框调用错误:原有脚本用@@InPutInteger6(整数输入框),玩家名字含文字,需改用字符串输入框@@InPutString5;2. 保存命令错误:HeroM2无SAVEVAR命令,需用WriteFile命令写入文本;3. 路径格式问题:需确认路径存在,且格式符合引擎要求;4. 缺少玩家存在判断:未验证输入名字是否为在线玩家,易写入无效内容。
修正后完整脚本
[@后台管理]
{
尊敬的『<$USERNAME>』管理,欢迎使用后台管理系统。\
提示:请谨慎操作避免不必要的麻烦。\
当前服务器是『<$SERVERNAME>』\
当前人数『<$USERCOUNT>』\
选择你需要的服务器功能\
<封号管理/@封号管理>\
<退出系统/@exit>
}
[@封号管理]
说明:如玩家已获得一个封号请把之前的封号删除掉在添加!\ \
<添加荣誉账号/@荣誉账号>\
------------------------\
<删除荣誉玩家/@删除荣誉玩家>\ \
<返回/@main>
[@荣誉账号]
#IF
#ACT
SendMsg 255 请输入玩家姓名!\ \
@@InPutString5 请输入要添加的荣誉玩家姓名: //调用字符串输入框,S5存储输入内容
<返回/@封号管理>
[@InPutString5] //输入完成后触发的脚本标签,与输入框对应
#IF
CheckPlayerOnline <$STR(S5)> //判断输入的玩家是否在线,避免无效写入
#ACT
WriteFile ..\QuestDiary\荣誉名单\荣誉玩家.txt <$STR(S5)> //写入玩家名字到指定TXT,默认换行
SendMsg 255 玩家【<$STR(S5)>】已添加至荣誉名单!
#ELSEACT
SendMsg 255 错误:玩家【<$STR(S5)>】不在线或名字输入错误!
<返回/@荣誉账号> //错误时返回重新输入
[@删除荣誉玩家] //补充删除功能,完善荣誉账号管理
#IF
#ACT
SendMsg 255 请输入要删除的荣誉玩家姓名!\ \
@@InPutString6 请输入要删除的荣誉玩家姓名:
<返回/@封号管理>
[@InPutString6]
#IF
FileExist ..\QuestDiary\荣誉名单\荣誉玩家.txt //判断文件是否存在
#ACT
DelLineFromFile ..\QuestDiary\荣誉名单\荣誉玩家.txt <$STR(S6)> //删除包含该玩家名字的行
SendMsg 255 玩家【<$STR(S6)>】已从荣誉名单中删除!
#ELSEACT
SendMsg 255 错误:荣誉名单文件不存在或玩家名字未找到!
<返回/@封号管理>
核心脚本命令解析(HeroM2专属)
1. 字符串输入框命令:@@InPutStringX
用于接收玩家名字、文字等字符串内容,X为1-9的数字,对应存储变量S1-S9(如@@InPutString5对应变量S5,存储输入的玩家名字)。格式:@@InPutStringX 输入提示文本,提示文本需简洁,告知管理员输入内容。注意:不可用整数输入框(@@InPutIntegerX)接收玩家名字,会导致无法输入文字。
2. 写入文本命令:WriteFile
HeroM2引擎写入文本核心命令,格式:WriteFile 文本路径 写入内容。参数说明:路径需为相对路径,从服务端根目录开始计算,如..\QuestDiary\荣誉名单\荣誉玩家.txt,需手动在QuestDiary文件夹下创建“荣誉名单”子文件夹,否则写入失败;写入内容支持变量(如<$STR(S5)>)和固定文字,默认每执行一次写入一行,避免内容叠加混乱。
3. 辅助命令(异常判断+删除)
CheckPlayerOnline <玩家名>:判断玩家是否在线,避免写入无效名字;FileExist 路径:判断目标TXT文件是否存在,防止执行删除命令时报错;DelLineFromFile 路径 内容:删除文本中包含指定内容的整行,适合删除荣誉玩家条目,若同一行有多个内容,仅删除包含目标字符串的行。
实操注意事项(确保脚本正常运行)
1. 路径创建与权限
手动在服务端根目录下,按脚本路径创建文件夹(如QuestDiary→荣誉名单),确保文件夹名称与脚本路径完全一致(区分大小写,建议全英文)。同时,服务端文件夹需开放读写权限,避免引擎无法写入、删除文件。
2. 变量与输入框对应
每个字符串输入框(@@InPutStringX)对应唯一变量Sx,不可重复使用变量(如添加和删除功能需用不同输入框,分别对应S5、S6),否则会导致变量值覆盖,功能异常。
3. 异常判断不可少
必须添加玩家在线判断(CheckPlayerOnline)、文件存在判断(FileExist),避免因输入错误名字、文件缺失导致脚本执行失败,同时通过SendMsg命令给出提示,让管理员明确操作结果。
4. 脚本标签对应
输入完成后触发的脚本标签需与输入框对应,如@@InPutString5对应[@InPutString5]标签,@@InPutString6对应[@InPutString6]标签,标签名称错误会导致输入后无任何反应。
常见问题及排查方法
问题一:输入玩家名字后,TXT文件无内容写入
排查方向:1. 路径错误,检查是否手动创建“荣誉名单”文件夹,路径中的文件夹名称、文件名是否与脚本一致;2. 命令错误,确认使用WriteFile命令,而非SAVEVAR等无效命令;3. 权限问题,右键服务端文件夹,勾选“完全控制”权限,开放读写权限。
问题二:输入框无法调用,点击后无反应
排查方向:1. 输入框命令错误,确认是@@InPutStringX(字符串),而非@@InPutIntegerX(整数);2. 脚本语法错误,检查标签是否闭合(如{ }是否成对),命令后是否遗漏空格或符号。
问题三:删除玩家时提示“文件不存在”
排查方向:1. 文件路径错误,确认DelLineFromFile命令中的路径与WriteFile命令一致;2. 未先添加过玩家,TXT文件尚未生成,需先添加至少一名玩家,生成文件后再执行删除操作。
扩展优化(可选,提升实用性)
1. 添加时间戳:写入玩家名字时附带时间,便于追溯操作记录,修改写入命令为:WriteFile ..\QuestDiary\荣誉名单\荣誉玩家.txt <$STR(S5)> - <$DATE> <$TIME>,其中<$DATE>、<$TIME>为引擎自带变量,分别显示日期、时间。
2. 去重判断:添加玩家时先检查TXT中是否已存在该名字,避免重复写入,在[@InPutString5]的#IF条件中添加:Not FileContain ..\QuestDiary\荣誉名单\荣誉玩家.txt <$STR(S5)>,仅当文件中无该名字时才执行写入。
3. 批量导出:添加批量导出功能,通过命令将荣誉名单导出至指定路径,脚本示例:#ACT WriteFile ..\荣誉名单备份.txt [读取文件内容命令],适合定期备份名单。

