核心逻辑通过变量记录会员类型与到期时间,利用时间函数计算时长,到期后自动清理。下面详细说明脚本编写步骤。
第一步,定义会员变量。在HERO引擎中,使用Human类变量存储会员数据。打开M2server控制台,进入“选项-功能设置-专用登录器-自定义变量”。添加两个变量:Human.MemberType,存储会员类型,1为一天体验会员,2为一星期会员,3为一个月会员,0表示非会员。Human.MemberExpireTime,存储会员到期时间戳,格式为秒级时间。变量需提前注册,确保引擎正常读写。
第二步,掌握时间函数。HERO引擎提供三个关键时间函数。GetTime()获取当前服务器时间的秒级时间戳,作为计算基准。DateAdd(时间戳,秒数)在指定时间戳上增加秒数,用于计算到期时间。一天86400秒,一星期604800秒,一个月按30天计2592000秒。DateDiff(时间戳1,时间戳2)计算两个时间戳差值,正数表示时间戳1晚于时间戳2,用于判断是否到期。
第三步,编写多档位开通脚本。在NPC脚本中添加会员开通选项。示例脚本如下:
[@开通会员]
请选择会员类型:\
<一天体验会员/@OpenDay> <一星期会员/@OpenWeek> <一个月会员/@OpenMonth>
[@OpenDay]
#ACT
CALCVAR HUMAN MemberExpireTime = <$STR(N0)>
GetCurrentTime N0
CALCVAR HUMAN MemberExpireTime + 86400
SAVEVAR HUMAN MemberExpireTime ..\QuestDiary\会员数据\到期时间.txt
MOV HUMAN MemberType 1
SENDMSG 6 一天体验会员开通成功!
CLOSE
[@OpenWeek]
#ACT
GetCurrentTime N0
;此处需先读取现有到期时间,若未过期则累加
LOADVAR HUMAN MemberExpireTime ..\QuestDiary\会员数据\到期时间.txt
#IF
LARGE <$HUMAN(MemberExpireTime)> <$STR(N0)>
#ACT
CALCVAR HUMAN MemberExpireTime + 604800
#ELSEACT
CALCVAR HUMAN MemberExpireTime = <$STR(N0)>
CALCVAR HUMAN MemberExpireTime + 604800
SAVEVAR HUMAN MemberExpireTime ..\QuestDiary\会员数据\到期时间.txt
MOV HUMAN MemberType 2
SENDMSG 6 一星期会员开通成功!
CLOSE
[@OpenMonth]
#ACT
GetCurrentTime N0
LOADVAR HUMAN MemberExpireTime ..\QuestDiary\会员数据\到期时间.txt
#IF
LARGE <$HUMAN(MemberExpireTime)> <$STR(N0)>
#ACT
CALCVAR HUMAN MemberExpireTime + 2592000
#ELSEACT
CALCVAR HUMAN MemberExpireTime = <$STR(N0)>
CALCVAR HUMAN MemberExpireTime + 2592000
SAVEVAR HUMAN MemberExpireTime ..\QuestDiary\会员数据\到期时间.txt
MOV HUMAN MemberType 3
SENDMSG 6 一个月会员开通成功!
CLOSE
关键点:开通月会员时,先读取现有到期时间,与当前时间比较。若未过期,则在原时间上累加2592000秒;若已过期,则以当前时间为起点计算。实现多个月份时间累计。
第四步,设置登录检测。在QManage.txt登录触发脚本中,添加会员状态检测。每次玩家登录时,检查到期时间并与当前时间比对。
[@Login]
#IF
CHECKVAR HUMAN MemberExpireTime > 0
#ACT
GetCurrentTime N0
LOADVAR HUMAN MemberExpireTime ..\QuestDiary\会员数据\到期时间.txt
#IF
SMALL <$HUMAN(MemberExpireTime)> <$STR(N0)>
#ACT
MOV HUMAN MemberType 0
SAVEVAR HUMAN MemberExpireTime 0 ..\QuestDiary\会员数据\到期时间.txt
SENDMSG 6 您的会员已到期!
#ELSEACT
;计算剩余天数
CALCVAR HUMAN MemberExpireTime - <$STR(N0)>
CALCVAR HUMAN MemberExpireTime / 86400
SENDMSG 6 会员剩余天数:<$HUMAN(MemberExpireTime)>天
第五步,创建自动清理脚本。通过Robot.txt设置定时任务,每天凌晨检查所有会员数据。在Mir200\Envir\Robot.txt中添加:
#AutoRun NPC DAY 00:01 @CheckMemberExpire
创建RobotManage.txt,添加对应脚本:
[@CheckMemberExpire]
#ACT
GMEXECUTE 开始提问 @清理过期会员
在QuestDiary目录创建清理脚本:
[@清理过期会员]
#IF
#ACT
GetCurrentTime N0
;此处需遍历所有会员数据文件
LOADVAR LIST ..\QuestDiary\会员数据\到期时间.txt
;遍历逻辑:读取每条记录,比较时间,若过期则删除
;实际脚本需循环处理每条数据
SENDMSG 0 会员清理任务执行完毕!
由于HERO引擎无直接删除命令,需通过文件操作实现。读取会员数据文件,逐行检查到期时间,删除过期记录。
第六步,配置会员特权。根据MemberType变量,在相应功能脚本中设置权限。例如地图进入限制:
[@进入会员地图]
#IF
EQUAL <$HUMAN(MemberType)> 0
#ACT
SENDMSG 6 此地图仅对会员开放!
CLOSE
#ELSEACT
MAPMOVE 会员地图 100 100
第七步,测试脚本功能。启动服务器,分别测试三种会员开通。开通一个月会员后,立即再开通一个月,检查到期时间是否累计增加60天。修改系统时间,测试到期后会员状态是否自动清除。观察M2server控制台有无报错。
常见问题处理。开通会员后时间未保存,检查变量文件路径是否正确,确保QuestDiary目录有写入权限。累计时间计算错误,确认LOADVAR和SAVEVAR命令使用正确,时间戳为秒级。自动清理未执行,检查Robot.txt时间格式,确保为DAY 00:01。清理脚本不生效,手动执行GM命令测试文件读取和删除逻辑。
最后,备份数据。定期备份会员数据文件,防止意外丢失。将脚本文件纳入版本管理,方便后续修改。通过以上步骤,你的HERO引擎服务端将具备完整的限时会员系统,支持多档位选择和时长累计,到期自动清理。

