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\会员数据\体验会员.txt100
SENDMSG6购买成功!体验会员时间已增加1天。
BREAK
#elseact
MESSAGEBOX元宝不足!
;---7天周会员---
[@week]
#if
CHECKGAMEGOLD>4999
#act
GAMEGOLD-5000
ADDNAMEDATETIMELIST..\QuestDiary\会员数据\周会员.txt700
SENDMSG6购买成功!周会员时间已增加7天。
BREAK
#elseact
MESSAGEBOX元宝不足!
;---30天月会员(支持累计)---
[@month]
#if
CHECKGAMEGOLD>19999
#act
GAMEGOLD-20000
ADDNAMEDATETIMELIST..\QuestDiary\会员数据\月会员.txt3000
SENDMSG6购买成功!月会员时间已增加30天。
BREAK
#elseact
MESSAGEBOX元宝不足!
;---查询时间---
[@check]
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\月会员.txt1S$到期时间N$剩余天N$剩余时N$剩余分
#act
SENDMSG6【月会员】到期时间:<$STR(S$到期时间)>,剩余<$STR(N$剩余天)>天<$STR(N$剩余时)>小时。
BREAK
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\周会员.txt1S$到期时间N$剩余天N$剩余时N$剩余分
#act
SENDMSG6【周会员】到期时间:<$STR(S$到期时间)>,剩余<$STR(N$剩余天)>天。
BREAK
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\体验会员.txt1S$到期时间N$剩余天N$剩余时N$剩余分
#act
SENDMSG6【体验会员】到期时间:<$STR(S$到期时间)>,剩余<$STR(N$剩余天)>天。
BREAK
#elseact
MESSAGEBOX你当前不是任何会员或会员已过期。
脚本说明:
•累计机制:ADDNAMEDATETIMELIST命令会读取文件中该玩家的旧到期时间,并在旧时间基础上增加新的时长。例如原剩余5天,再买30天,则总剩余35天。
-参数说明:CHECKNAMEDATETIMELIST的第二个参数为1,表示过期自动删除(自动清理名单)。
三、登录触发脚本(自动赋予权限)
在QManage.txt的[@Login]段添加以下代码,实现上线自动检测并设置会员封号、倍率。
[@Login]
;---检测月会员(优先级最高)---
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\月会员.txt1S$1N$1N$2N$3
#act
SETRANKLEVELNAME%s\【至尊月会员】
;设置杀怪经验倍率(150%)
KILLMONEXPRATE150999999
SENDMSG6欢迎尊贵的月会员归来!当前经验倍率:150%%,剩余天数:<$STR(N$1)>。
BREAK
;---检测周会员---
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\周会员.txt1S$1N$1N$2N$3
#act
SETRANKLEVELNAME%s\【周会员】
KILLMONEXPRATE120999999
SENDMSG6周会员特权生效!经验倍率:120%%,剩余天数:<$STR(N$1)>。
BREAK
;---检测体验会员---
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\体验会员.txt1S$1N$1N$2N$3
#act
SETRANKLEVELNAME%s\【体验会员】
KILLMONEXPRATE110999999
SENDMSG6体验会员生效!经验倍率:110%%,剩余天数:<$STR(N$1)>。
BREAK
;---非会员---
#elseact
;可设置清除非会员封号或恢复默认倍率
;SETRANKLEVELNAME%s
;KILLMONEXPRATE1001
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实现时间累加,登录脚本使用CHECKNAMEDATETIMELIST1实现自动清理。
一、核心命令与文件配置
原理:使用文本文件记录玩家名称及到期时间,引擎自动处理时间计算与过期判定。
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\会员数据\体验会员.txt100
SENDMSG6购买成功!体验会员时间已增加1天。
BREAK
#elseact
MESSAGEBOX元宝不足!
;---7天周会员---
[@week]
#if
CHECKGAMEGOLD>4999
#act
GAMEGOLD-5000
ADDNAMEDATETIMELIST..\QuestDiary\会员数据\周会员.txt700
SENDMSG6购买成功!周会员时间已增加7天。
BREAK
#elseact
MESSAGEBOX元宝不足!
;---30天月会员(支持累计)---
[@month]
#if
CHECKGAMEGOLD>19999
#act
GAMEGOLD-20000
ADDNAMEDATETIMELIST..\QuestDiary\会员数据\月会员.txt3000
SENDMSG6购买成功!月会员时间已增加30天。
BREAK
#elseact
MESSAGEBOX元宝不足!
;---查询时间---
[@check]
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\月会员.txt1S$到期时间N$剩余天N$剩余时N$剩余分
#act
SENDMSG6【月会员】到期时间:<$STR(S$到期时间)>,剩余<$STR(N$剩余天)>天<$STR(N$剩余时)>小时。
BREAK
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\周会员.txt1S$到期时间N$剩余天N$剩余时N$剩余分
#act
SENDMSG6【周会员】到期时间:<$STR(S$到期时间)>,剩余<$STR(N$剩余天)>天。
BREAK
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\体验会员.txt1S$到期时间N$剩余天N$剩余时N$剩余分
#act
SENDMSG6【体验会员】到期时间:<$STR(S$到期时间)>,剩余<$STR(N$剩余天)>天。
BREAK
#elseact
MESSAGEBOX你当前不是任何会员或会员已过期。
脚本说明:
•累计机制:ADDNAMEDATETIMELIST命令会读取文件中该玩家的旧到期时间,并在旧时间基础上增加新的时长。例如原剩余5天,再买30天,则总剩余35天。
-参数说明:CHECKNAMEDATETIMELIST的第二个参数为1,表示过期自动删除(自动清理名单)。
三、登录触发脚本(自动赋予权限)
在QManage.txt的[@Login]段添加以下代码,实现上线自动检测并设置会员封号、倍率。
[@Login]
;---检测月会员(优先级最高)---
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\月会员.txt1S$1N$1N$2N$3
#act
SETRANKLEVELNAME%s\【至尊月会员】
;设置杀怪经验倍率(150%)
KILLMONEXPRATE150999999
SENDMSG6欢迎尊贵的月会员归来!当前经验倍率:150%%,剩余天数:<$STR(N$1)>。
BREAK
;---检测周会员---
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\周会员.txt1S$1N$1N$2N$3
#act
SETRANKLEVELNAME%s\【周会员】
KILLMONEXPRATE120999999
SENDMSG6周会员特权生效!经验倍率:120%%,剩余天数:<$STR(N$1)>。
BREAK
;---检测体验会员---
#if
CHECKNAMEDATETIMELIST..\QuestDiary\会员数据\体验会员.txt1S$1N$1N$2N$3
#act
SETRANKLEVELNAME%s\【体验会员】
KILLMONEXPRATE110999999
SENDMSG6体验会员生效!经验倍率:110%%,剩余天数:<$STR(N$1)>。
BREAK
;---非会员---
#elseact
;可设置清除非会员封号或恢复默认倍率
;SETRANKLEVELNAME%s
;KILLMONEXPRATE1001
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实现时间累加,登录脚本使用CHECKNAMEDATETIMELIST1实现自动清理。

