HeroM2引擎脚本:玩家姓名保存至指定TXT文本实操指南

来源: 作者: 点击:
HeroM2引擎保存玩家姓名至指定TXT文本,核心是修正输入触发、变量调用及写入指令错误,需遵循引擎专属语法,确保脚本逻辑通顺且文件路径有效。以下是原脚本问题修正及完整实现方案。

一、原脚本核心问题解析

原脚本存在三处关键错误,导致无法正常保存玩家姓名:一是输入触发标识不匹配,定义输入为“@@InPutInteger6”(数字输入),却调用“[@InPutString5]”(字符串输入),类型冲突;二是写入指令错误,HeroM2无“SAVEVAR”指令,需用专属文件写入指令;三是缺少玩家姓名合法性检测,无对应玩家时仍会执行写入,且变量传递逻辑混乱。

额外问题:路径格式不规范,HeroM2脚本中文件路径需统一使用反斜杠“\”,且需确认目标文件夹已创建,否则写入失败;无执行反馈提示,管理者无法确认是否保存成功。

二、HeroM2引擎修正版完整脚本

修正后脚本适配HeroM2语法,实现输入玩家姓名、合法性检测、保存至TXT文本及反馈提示功能,完整代码如下:

[@后台管理]
{
尊敬的『<$USERNAME>』管理,欢迎使用后台管理系统。\
提示:请谨慎操作避免不必要的麻烦。\
当前服务器是『<$SERVERNAME>』\
当前人数『<$USERCOUNT>』\
选择你需要的服务器功能\
<封号管理/@封号管理>\
<退出系统/@exit>
}

[@封号管理]
{
说明:如玩家已获得一个封号请把之前的封号删除掉在添加!\ \
<添加荣誉账号/@荣誉账号>\
------------------------\
<删除荣誉玩家/@删除荣誉玩家>\ \
<返回/@后台管理>
}

[@荣誉账号]
{
#IF
#ACT
SendMsg 6 请输入玩家姓名(支持中文)!\
// 调用字符串输入框,S5为字符串变量存储输入内容
@@InPutString5 玩家姓名 12 // 12为最大输入长度,适配玩家姓名长度
Goto @等待输入姓名
}

[@等待输入姓名]
{
#IF
CheckStrLen <$STR(S5)> > 0 // 检测是否输入内容
#ACT
Goto @检测玩家是否存在
#ELSE
#ACT
SendMsg 6 未输入玩家姓名,请重新操作!
Goto @荣誉账号
}

[@检测玩家是否存在]
{
#IF
CheckOnlineByName <$STR(S5)> // 检测玩家是否在线
#ACT
Goto @保存玩家姓名至TXT
#ELSE
#ACT
// 检测玩家是否存在于数据库(含离线玩家)
CheckHumanExist<$STR(S5)>
#IF
#ACT
Goto @保存玩家姓名至TXT
#ELSE
#ACT
SendMsg 6 玩家【<$STR(S5)>】不存在,请核对姓名!
Goto @荣誉账号
}

[@保存玩家姓名至TXT]
{
#IF
#ACT
// HeroM2专属写入指令,AppendStrToFile为追加写入,避免覆盖原有内容
AppendStrToFile ..\QuestDiary\荣誉名单\荣誉玩家.txt <$STR(S5)>
// 换行处理,使每个玩家姓名单独一行
AppendStrToFile ..\QuestDiary\荣誉名单\荣誉玩家.txt \r\n
SendMsg 6 玩家【<$STR(S5)>】已成功保存至荣誉名单!
Goto @封号管理
}

[@删除荣誉玩家]
{
#IF
#ACT
SendMsg 6 请输入需删除的玩家姓名!
@@InPutString5 玩家姓名 12
Goto @等待删除输入
}

[@等待删除输入]
{
#IF
CheckStrLen <$STR(S5)> > 0
#ACT
Goto @删除TXT中玩家姓名
#ELSE
#ACT
SendMsg 6 未输入玩家姓名,请重新操作!
Goto @删除荣誉玩家
}

[@删除TXT中玩家姓名]
{
#IF
// 检测TXT文件中是否存在该玩家姓名
CheckFileContain ..\QuestDiary\荣誉名单\荣誉玩家.txt <$STR(S5)>
#ACT
// 删除包含该姓名的行,HeroM2专属指令
DelFileLine ..\QuestDiary\荣誉名单\荣誉玩家.txt <$STR(S5)>
SendMsg 6 玩家【<$STR(S5)>】已从荣誉名单中删除!
#ELSE
#ACT
SendMsg 6 玩家【<$STR(S5)>】不在荣誉名单中!
Goto @封号管理
}

[@exit]
{
#ACT
CloseDialog
SendMsg 6 已退出后台管理系统!
}


三、脚本核心修正要点与HeroM2专属指令说明

(一)输入触发逻辑修正

将原脚本“@@InPutInteger6”改为“@@InPutString5”,确保输入类型为字符串(适配中文姓名),同时添加“CheckStrLen”指令检测输入内容,避免空输入执行无效操作。“@@InPutString5 玩家姓名 12”中,“玩家姓名”为输入框提示文字,“12”为最大输入长度,可根据实际姓名长度调整。

(二)文件写入指令替换

HeroM2无“SAVEVAR”指令,需使用专属文件操作指令:追加写入用“AppendStrToFile 路径 内容”,避免覆盖原有名单;换行需添加“\r\n”转义字符,确保每个玩家姓名单独成行,便于查看与管理。若需覆盖写入,可改用“WriteStrToFile 路径 内容”,但会清空原有文件内容,谨慎使用。

(三)玩家合法性检测补充

新增“CheckOnlineByName”(检测在线玩家)与“CheckHumanExist”(检测数据库玩家,含离线)双重检测,避免将不存在的玩家姓名写入TXT。同时在删除功能中添加“CheckFileContain”指令,检测玩家姓名是否在TXT中,提升脚本严谨性。

(四)路径与文件夹规范

脚本中路径“..\QuestDiary\荣誉名单\荣誉玩家.txt”需提前创建对应文件夹,即服务端根目录下“QuestDiary”内新建“荣誉名单”文件夹,否则写入指令失效。路径分隔符必须使用反斜杠“\”,HeroM2不支持正斜杠“/”,避免路径错误。

四、脚本生效与调试要点

脚本保存至服务端“Envir\MapQuest_def\QManage.txt”文件,或单独创建子脚本文件(如“荣誉名单管理.txt”),通过“Call”指令关联后台管理脚本。保存后无需重启服务端,在HeroM2控制台执行“ReloadQuest”指令重载脚本即可生效。

调试核心要点:测试输入空姓名、不存在的玩家姓名,验证提示逻辑是否正常;查看TXT文件确认姓名是否成功写入、换行是否规范;测试删除功能,确认目标姓名可正常删除,无多余内容残留。若写入失败,优先检查文件夹是否创建、路径是否正确,或通过引擎日志排查指令错误。

五、扩展功能补充(可选)

可添加时间戳记录,保存玩家姓名时同步写入操作时间,指令为“AppendStrToFile 路径 【<$DATETIME>】”,需注意“<$DATETIME>”变量会包含特殊字符,部分文本编辑器可能乱码,可简化为“<$YEAR>-$MONTH>-$DAY> $HOUR>:$MINUTE>”。

添加批量清空功能,新增“清空荣誉名单”按钮,脚本逻辑为“#ACT WriteStrToFile 路径 ”(内容留空),同时添加二次确认提示,避免误操作清空名单。