传奇脚本保存玩家名字到TXT文件的实现方法

来源: 作者: 点击:
在传奇脚本中将玩家名字保存到指定TXT文件,需使用ADDNAMELIST命令。该命令专用于将字符串添加到列表文件,配合变量获取可实现名字记录功能。以下是修改后的完整脚本与详细说明。

ADDNAMELIST命令功能与格式

命令格式:ADDNAMELIST 文件路径
功能说明:将指定字符串添加到列表文件,每行一个记录
参数要求:文件路径支持相对路径与绝对路径,通常使用相对路径
文件格式:生成纯文本文件,每行一个记录,自动换行
注意要点:文件不存在时自动创建,已存在时追加到文件末尾

修改后的完整封号管理脚本

[@控制面板]
SAY

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

[@封号管理]
SAY

说明:如玩家已获得一个封号请把之前的封号删除掉在添加!\ \
<添加荣誉账号/@荣誉账号>\
------------------------\
<删除荣誉玩家/@荣誉玩家>\ \
<返回/@控制面板>

[@荣誉账号]
SAY

请输入要添加为荣誉账号的玩家姓名:\ \
<输入玩家姓名/@@InPutString1>\
<返回/@封号管理>

[@InPutString1]
IF

ACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
SENDMSG 0 玩家[<$STR(S1)>]已被添加为荣誉账号!
SENDMSG 6 操作成功:玩家[<$STR(S1)>]已添加到荣誉名单。
GOTO @封号管理

脚本修改说明与原脚本问题分析

原脚本问题一:标签调用不一致
原代码:<输入玩家账号/@@InPutInteger6>
修改为:<输入玩家姓名/@@InPutString1>
原因:InPutInteger用于输入数字,玩家名字是字符串应使用InPutString
标签编号从6改为1,避免与其他输入标签冲突

原脚本问题二:保存命令使用错误
原代码:SAVEVAR <$STR(S5)> ..\QuestDiary\荣誉名单\荣誉玩家.txt
修改为:ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
原因:SAVEVAR用于保存变量到INI格式文件,不适合TXT列表文件
ADDNAMELIST专为列表文件设计,自动换行格式规范

原脚本问题三:缺少必要提示
增加:SENDMSG 0 全服公告,SENDMSG 6 私人提示
增加:GOTO @封号管理 返回管理界面
优化操作反馈,让管理员明确知道操作结果

ADDNAMELIST命令详细使用示例

基本添加名字到文件:
ACT

ADDNAMELIST ..\QuestDiary\名单.txt
将玩家输入的S1变量内容添加到指定文件

添加固定内容到文件:
ACT

MOV S1 测试玩家
ADDNAMELIST ..\QuestDiary\测试名单.txt
先给S1赋值,再添加到文件

添加多个名字到不同文件:
ACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
MOV S1 <$USERNAME>
ADDNAMELIST ..\QuestDiary\操作日志\添加记录.txt
先添加输入的玩家名字,再添加操作者名字到日志

文件路径设置与目录结构

相对路径示例:
..\QuestDiary\荣誉名单\荣誉玩家.txt
..\ 表示上一级目录,从Mir200\Envir向上到Mir200,再进入QuestDiary
通常脚本在Mir200\Envir\Market_Def或QuestDiary目录

绝对路径示例:
D:\MirServer\Mir200\Envir\QuestDiary\荣誉名单\荣誉玩家.txt
绝对路径更稳定,但服务器迁移时需要修改

目录不存在处理:
ADDNAMELIST不会自动创建目录,需手动创建
确保QuestDiary下存在"荣誉名单"文件夹
建议脚本开头检查目录是否存在

输入变量与参数说明

@@InPutString标签调用格式:
<输入文字/@@InPutString编号>
编号范围1-99,不同编号对应不同S变量
@@InPutString1对应S1变量,@@InPutString2对应S2变量

输入内容获取:
输入后内容存储在S变量中,S1表示第一个输入
在[@InPutString1]段落中,<$STR(S1)>获取输入值
输入内容自动去除首尾空格,中间空格保留

输入长度限制:
S变量最多存储255个字符
玩家名字通常不超过20字符,足够使用
超长内容会被截断,建议添加长度检测

扩展功能:添加前检测与验证

检测玩家是否在线:
[@InPutString1]
IF

CHECKONLINE <$STR(S1)>
ACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
SENDMSG 6 玩家在线,已添加到荣誉名单。
ELSESAY

玩家不在线,请确认姓名正确。

检测是否已是荣誉玩家:
[@InPutString1]
IF

CHECKNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
ACT

SENDMSG 6 该玩家已在荣誉名单中!
ELSEACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
SENDMSG 6 添加成功。

检测输入是否为空:
[@InPutString1]
IF

EQUAL S1
ACT

SENDMSG 6 输入不能为空!
GOTO @荣誉账号
ELSEACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt

删除荣誉玩家功能实现

[@荣誉玩家]
SAY

请输入要删除的荣誉玩家姓名:\ \
<输入玩家姓名/@@InPutString2>\
<返回/@封号管理>

[@InPutString2]
IF

CHECKNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
ACT

DELNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
SENDMSG 0 玩家[<$STR(S2)>]已被移出荣誉账号!
SENDMSG 6 操作成功:玩家[<$STR(S2)>]已从荣誉名单删除。
ELSESAY

该玩家不在荣誉名单中,无需删除。\
<返回/@荣誉玩家>

DELNAMELIST命令说明:
格式:DELNAMELIST 文件路径
功能:从列表文件中删除指定字符串
注意:精确匹配,需完全一致才会删除
文件不存在或字符串不存在时不报错

名单查看与管理功能

查看荣誉名单:
[@查看荣誉名单]
ACT

GetListString ..\QuestDiary\荣誉名单\荣誉玩家.txt S1
SAY

当前荣誉玩家名单:\ \
<$STR(S1)>\ \
<返回/@封号管理>

GetListString命令说明:
格式:GetListString 文件路径 变量
功能:读取列表文件内容到变量
限制:变量长度有限,大文件需分段读取
注意:文件不存在时变量为空

清空荣誉名单:
[@清空荣誉名单]
SAY

确认要清空所有荣誉玩家吗?\ \
<确认清空/@确认清空>\
<取消返回/@封号管理>

[@确认清空]
ACT

CLEARNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
SENDMSG 0 所有荣誉玩家已被清空!
SENDMSG 6 荣誉名单已清空。
GOTO @封号管理

CLEARNAMELIST命令说明:
格式:CLEARNAMELIST 文件路径
功能:清空列表文件所有内容
注意:不可恢复,谨慎使用
文件不存在时自动创建空文件

操作日志记录功能

添加操作日志记录:
[@InPutString1]
IF

ACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
MOV S2 <$USERNAME>
ADDNAMELIST ..\QuestDiary\操作日志\添加记录.txt
SENDMSG 6 添加成功,日志已记录。

日志格式优化:
记录时间、操作者、被操作者
[@InPutString1]
ACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
MOV S3 <DATETIME> <USERNAME> 添加了 <$STR(S1)>
ADDNAMELIST ..\QuestDiary\操作日志\添加记录.txt

<$DATETIME>系统变量:
返回当前服务器时间
格式:YYYY-MM-DD HH:MI:SS
用于记录操作时间戳

错误处理与脚本优化

文件路径检查:
[@InPutString1]
IF

ACT

CALL [\\QuestDiary\荣誉名单\路径检查.txt] @检查路径

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt

路径检查脚本:
[@检查路径]
IF

ACT

SAY

文件路径检查完成。

输入内容过滤:
[@InPutString1]
IF

CHECKSTRINGLEN <$STR(S1)> 20
ACT

SENDMSG 6 玩家姓名过长,最多20字符!
GOTO @荣誉账号
ELSEACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt

CHECKSTRINGLEN命令:
检测字符串长度是否超过限制
避免过长名字导致格式问题

多文件同步管理

主名单与备份文件:
[@InPutString1]
ACT

ADDNAMELIST ..\QuestDiary\荣誉名单\荣誉玩家.txt
ADDNAMELIST ..\QuestDiary\荣誉名单\备份\荣誉玩家备份.txt
SENDMSG 6 已添加到主名单和备份文件。

定期清理旧记录:
ACT

CLEARNAMELIST ..\QuestDiary\荣誉名单\临时记录.txt
MOV S1 清理时间:<$DATETIME>
ADDNAMELIST ..\QuestDiary\荣誉名单\清理日志.txt

总结归纳

将玩家名字保存到TXT文件使用ADDNAMELIST命令,配合@@InPutString获取输入内容。文件路径使用相对路径,确保目录存在。添加前检测避免重复,添加后提示操作结果。

扩展功能包括删除、查看、清空名单,以及操作日志记录。错误处理包括路径检查、输入验证、长度限制。多文件管理实现数据备份与同步。

掌握ADDNAMELIST及相关名单操作命令,可实现完善的玩家名单管理系统。注意命令差异,herom2引擎使用ADDNAMELIST而非SAVEVAR。脚本结构清晰,功能完整,满足各种名单管理需求。