HeroM2引擎脚本:玩家名字保存至指定TXT文本方法及纠错

来源: 作者: 点击:
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 [读取文件内容命令],适合定期备份名单。