HERO引擎实现“累计时长+到期清理”的会员系统,核心在于利用文本名单记录与个人变量双轨制。以下为完整脚本方案,支持体验卡、周卡、月卡叠加,并自动清理过期数据。
一、核心命令与文件准备
1. 关键脚本命令
• 时间名单操作:ADDNAMEDATETIMELIST(增加名单时间)、CHECKNAMEDATETIMELIST(检测剩余时间)、DELNAMEDATELIST(删除名单)。
- 变量运算:CALCVAR(用于天数累计计算)。
• 文件路径:脚本涉及的文件均存放在 MirServer\Mir200\Envir\QuestDiary\ 目录下。
2. 建立会员名单文件
在 QuestDiary 文件夹内新建 会员系统 目录,并创建以下文件:
- VIP名单.txt:用于存储所有会员的到期时间戳。
• VIP天数记录.txt:用于备份玩家的总剩余天数(防丢档)。
二、NPC脚本:会员购买与时间叠加
在任意NPC(如土城会员使者)中添加以下脚本,实现三种档位的购买与时间累计。
[@main]
欢迎使用限时会员系统。\ \
<购买体验会员/@@InpDay> 需1000元宝 剩余时间:<$HUMAN(VIPDAY)>天\ \
<购买周卡会员/@@InpWeek> 需5000元宝 剩余时间:<$HUMAN(VIPWEEK)>天\ \
<购买月卡会员/@@InpMonth> 需20000元宝 剩余时间:<$HUMAN(VIPMONTH)>天\ \
<查看我的会员状态/@CheckVIP>\ \
<关闭/@exit>
[@@InpDay]
#ACT
MOV P9 1
MOV P8 1000
GOTO @BuyConfirm
[@@InpWeek]
#ACT
MOV P9 7
MOV P8 5000
GOTO @BuyConfirm
[@@InpMonth]
#ACT
MOV P9 30
MOV P8 20000
GOTO @BuyConfirm
[@BuyConfirm]
#if
CHECKGAMEGOLD < <$STR(P8)>
#act
MESSAGEBOX 元宝不足!
BREAK
#elseact
GAMEGOLD - <$STR(P8)>
ADDNAMEDATETIMELIST ..\QuestDiary\会员系统\VIP名单.txt <$STR(P9)> 0 0
CALCVAR HUMAN VIPDAY + <$STR(P9)>
SAVEVAR HUMAN VIPDAY ..\QuestDiary\会员系统\VIP天数记录.txt
SENDMSG 6 购买成功!会员时长增加 <$STR(P9)> 天,当前总剩余天数:<$HUMAN(VIPDAY)>天。
SENDMSG 0 玩家【%s】成功购买%d天会员,享受专属特权! 0 <$STR(P9)>
[@CheckVIP]
#if
CHECKNAMEDATETIMELIST ..\QuestDiary\会员系统\VIP名单.txt 1 S$到期时间 N$剩余天 N$剩余时 N$剩余分
#act
MESSAGEBOX 会员状态:有效\n到期时间:<$STR(S$到期时间)>\n剩余:<$STR(N$剩余天)>天 <$STR(N$剩余时)>小时\n累计剩余天数:<$HUMAN(VIPDAY)>天
#elseact
MESSAGEBOX 你不是会员或会员已过期。
脚本逻辑说明:
• 累计原理:使用 ADDNAMEDATETIMELIST 直接修改名单文件中的到期时间(自动叠加),同时用 CALCVAR 增加个人变量 VIPDAY 用于显示。
- 防丢机制:每次购买后使用 SAVEVAR 将变量保存到文本,并在 QManage.txt 的 [@Login] 段加入加载代码。
三、物品脚本:会员卡双击使用
若需通过道具(如“体验会员卡”)激活,在物品数据库(StdItems.DB)设置物品,并在 QFunction-0.txt 中添加双击脚本。
;体验会员卡(1天)
[@StdModeFuncX1]
#ACT
ADDNAMEDATETIMELIST ..\QuestDiary\会员系统\VIP名单.txt 1 0 0
CALCVAR HUMAN VIPDAY + 1
SAVEVAR HUMAN VIPDAY ..\QuestDiary\会员系统\VIP天数记录.txt
SENDMSG 6 体验会员激活成功,时长增加1天!
BREAK
;月卡会员卡(30天)
[@StdModeFuncX2]
#ACT
ADDNAMEDATETIMELIST ..\QuestDiary\会员系统\VIP名单.txt 30 0 0
CALCVAR HUMAN VIPDAY + 30
SAVEVAR HUMAN VIPDAY ..\QuestDiary\会员系统\VIP天数记录.txt
SENDMSG 6 月卡激活成功,时长增加30天!
BREAK
四、权限检测与地图进入控制
在需要限制会员的地图触发条件(如地图代码或NPC对话)中,加入检测脚本。
#if
NOT CHECKNAMEDATETIMELIST ..\QuestDiary\会员系统\VIP名单.txt 1 S1 N1 N2 N3
#act
MESSAGEBOX 仅限会员进入,请先购买会员!
BREAK
;否则允许进入地图
五、到期自动清理名单设置
HERO引擎的 CHECKNAMEDATETIMELIST 命令自带清理机制。当参数设置为 1 时,检测到过期会自动从 VIP名单.txt 中删除该行记录。
手动清理脚本(GM命令):
若需手动清理所有过期数据,可在GM命令脚本中添加:
[@AdminCleanVIP]
#if
#act
CHECKNAMEDATETIMELIST ..\QuestDiary\会员系统\VIP名单.txt 1 S1 N1 N2 N3
SENDMSG 6 已强制清理所有过期会员记录。
六、机器人脚本定时校正
为防止玩家离线导致变量显示与实际名单不同步,可在 RobotManage.txt 中设置每日凌晨校正。
;每日0点执行
[@DailyReset]
#IF
HOUR 00
MIN 00
#ACT
;读取名单剩余时间同步到变量(此处需根据实际变量设计逻辑)
;若名单已过期,变量归零
#if
NOT CHECKNAMEDATETIMELIST ..\QuestDiary\会员系统\VIP名单.txt 1 S1 N1 N2 N3
#act
MOV HUMAN VIPDAY 0
SAVEVAR HUMAN VIPDAY ..\QuestDiary\会员系统\VIP天数记录.txt
七、常见报错与调试
1. 路径错误:确保 ..\QuestDiary\会员系统\VIP名单.txt 路径存在,且服务端有写入权限。
2. 变量未保存:务必在购买脚本和登录脚本中配套使用 SAVEVAR 和 LOADVAR,防止重启后天数归零。
3. 时间不叠加:检查 ADDNAMEDATETIMELIST 参数是否正确,该命令是直接修改文件中的时间戳,天然支持累计。
此方案通过“名单文件+变量”的双重保险,完美实现了HERO引擎下的多档位会员时长累计与自动化清理。

