HERO引擎实现限时会员(体验/周/月)并支持时间累计,核心依赖 ADDNAMEDATETIMELIST 命令。该命令会自动计算并延长到期时间,无需手动累加变量。以下为完整脚本方案,包含NPC购买、登录检测及到期自动清理。
一、核心命令与文件配置
原理:使用文本文件记录玩家名称及到期时间,引擎自动处理时间计算与过期判定。
1. 核心命令
◦ ADDNAMEDATETIMELIST 文件路径 天数 小时 分钟:增加/延长会员时间(支持累计)。
- CHECKNAMEDATETIMELIST 文件路径 是否自动删除 到期时间变量 剩余天数变量 ...:检测会员状态。
- DELNAMEDATELIST 文件路径:手动删除会员(用于清理或重置)。
2. 文件准备
在服务端 Mir200\Envir\QuestDiary\ 目录下新建 会员数据 文件夹,并创建以下空文本文件(或脚本自动生成):
- 体验会员.txt:记录1天体验会员名单。
◦ 周会员.txt:记录7天会员名单。
- 月会员.txt:记录30天会员名单。
二、会员NPC脚本(支持累计时间)
将以下脚本放入 Market_Def 目录下的NPC文件(如 HY-001.txt),NPC类型设置为“脚本”。
(@@InPutString)
[@main]
欢迎光临会员中心。\ \
请选择会员类型(购买后时间自动累加):\ \
<1天体验会员/@exp> 价格:1000元宝\ \
<7天周会员/@week> 价格:5000元宝\ \
<30天月会员/@month> 价格:20000元宝\ \
<查询剩余时间/@check>\ \
<关闭/@exit>
;--- 1天体验会员 ---
[@exp]
#if
CHECKGAMEGOLD > 999 ; 检查元宝是否大于999
#act
GAMEGOLD - 1000 ; 扣除1000元宝
ADDNAMEDATETIMELIST ..\QuestDiary\会员数据\体验会员.txt 1 0 0
SENDMSG 6 购买成功!体验会员时间已增加1天。
BREAK
#elseact
MESSAGEBOX 元宝不足!
;--- 7天周会员 ---
[@week]
#if
CHECKGAMEGOLD > 4999
#act
GAMEGOLD - 5000
ADDNAMEDATETIMELIST ..\QuestDiary\会员数据\周会员.txt 7 0 0
SENDMSG 6 购买成功!周会员时间已增加7天。
BREAK
#elseact
MESSAGEBOX 元宝不足!
;--- 30天月会员(支持累计) ---
[@month]
#if
CHECKGAMEGOLD > 19999
#act
GAMEGOLD - 20000
ADDNAMEDATETIMELIST ..\QuestDiary\会员数据\月会员.txt 30 0 0
SENDMSG 6 购买成功!月会员时间已增加30天。
BREAK
#elseact
MESSAGEBOX 元宝不足!
;--- 查询时间 ---
[@check]
#if
CHECKNAMEDATETIMELIST ..\QuestDiary\会员数据\月会员.txt 1 S$到期时间 N$剩余天 N$剩余时 N$剩余分
#act
SENDMSG 6 【月会员】到期时间:<$STR(S$到期时间)>,剩余 <$STR(N$剩余天)> 天 <$STR(N$剩余时)> 小时。
BREAK
#if
CHECKNAMEDATETIMELIST ..\QuestDiary\会员数据\周会员.txt 1 S$到期时间 N$剩余天 N$剩余时 N$剩余分
#act
SENDMSG 6 【周会员】到期时间:<$STR(S$到期时间)>,剩余 <$STR(N$剩余天)> 天。
BREAK
#if
CHECKNAMEDATETIMELIST ..\QuestDiary\会员数据\体验会员.txt 1 S$到期时间 N$剩余天 N$剩余时 N$剩余分
#act
SENDMSG 6 【体验会员】到期时间:<$STR(S$到期时间)>,剩余 <$STR(N$剩余天)> 天。
BREAK
#elseact
MESSAGEBOX 你当前不是任何会员或会员已过期。
脚本说明:
• 累计机制:ADDNAMEDATETIMELIST 命令会读取文件中该玩家的旧到期时间,并在旧时间基础上增加新的时长。例如原剩余5天,再买30天,则总剩余35天。
- 参数说明:CHECKNAMEDATETIMELIST 的第二个参数为 1,表示过期自动删除(自动清理名单)。
三、登录触发脚本(自动赋予权限)
在 QManage.txt 的 [@Login] 段添加以下代码,实现上线自动检测并设置会员封号、倍率。
[@Login]
;--- 检测月会员(优先级最高) ---
#if
CHECKNAMEDATETIMELIST ..\QuestDiary\会员数据\月会员.txt 1 S$1 N$1 N$2 N$3
#act
SETRANKLEVELNAME %s\【至尊月会员】
; 设置杀怪经验倍率(150%)
KILLMONEXPRATE 150 999999
SENDMSG 6 欢迎尊贵的月会员归来!当前经验倍率:150%%,剩余天数:<$STR(N$1)>。
BREAK
;--- 检测周会员 ---
#if
CHECKNAMEDATETIMELIST ..\QuestDiary\会员数据\周会员.txt 1 S$1 N$1 N$2 N$3
#act
SETRANKLEVELNAME %s\【周会员】
KILLMONEXPRATE 120 999999
SENDMSG 6 周会员特权生效!经验倍率:120%%,剩余天数:<$STR(N$1)>。
BREAK
;--- 检测体验会员 ---
#if
CHECKNAMEDATETIMELIST ..\QuestDiary\会员数据\体验会员.txt 1 S$1 N$1 N$2 N$3
#act
SETRANKLEVELNAME %s\【体验会员】
KILLMONEXPRATE 110 999999
SENDMSG 6 体验会员生效!经验倍率:110%%,剩余天数:<$STR(N$1)>。
BREAK
;--- 非会员 ---
#elseact
; 可设置清除非会员封号或恢复默认倍率
; SETRANKLEVELNAME %s
; KILLMONEXPRATE 100 1
BREAK
四、到期自动清理机制
无需额外脚本。上述脚本中的 CHECKNAMEDATETIMELIST ..\..\ 1 ... 命令,当参数设为 1 时,引擎在检测到玩家时间过期后,会自动从对应的 .txt 文件中删除该玩家名字。这是HERO引擎的内置功能,确保名单文件不会无限膨胀。
五、常见问题与调试
1. 时间不累计:确保使用 ADDNAMEDATETIMELIST 而非 ADDNAMEDATELIST(后者是永久名单,不支持时间)。
2. 脚本报错:检查 QuestDiary\会员数据\ 目录是否存在,且 .txt 文件未被其他程序占用或设为只读。
3. 权限不生效:登录脚本检测顺序为“月>周>体验”,若玩家同时满足多个条件,只会执行第一个匹配的 #ACT。若需叠加权限,需使用变量逻辑(如 SET [V80] 1)进行复杂判断。
4. M2报变量错误:若提示变量冲突,可将脚本中的 S$1/N$1 改为更独特的变量名(如 S$到期时间/N$剩余天)。
总结:HERO引擎通过 *NAMEDATETIMELIST 系列命令原生支持限时名单管理。核心在于NPC脚本使用 ADDNAMEDATETIMELIST 实现时间累加,登录脚本使用 CHECKNAMEDATETIMELIST 1 实现自动清理。

