想给自己的传奇私人服务器添加高大上的钻石会员和黄金会员体系?不仅要区分等级福利,还要限制专属地图进入权限,甚至支持限时会员(非终生)?没问题!这套脚本方案就是为你量身定制的,即使你对脚本“一知半解”也能看懂、复制、修改和使用!
🔑 核心思路:用变量“标记”会员身份和期限
引擎自带的“游戏会员名单”(GM列表)功能比较单一,通常只支持一种状态(是/否管理员)且无有效期概念。我们要实现复杂的分类会员系统,需要借助引擎的自定义变量系统。
我们将使用两类变量来精确控制:
会员类型变量:
黄金会员标识:比如 [VIP_GOLD]。0=不是,1=是(黄金)
钻石会员标识:比如 [VIP_DIAMOND]。0=不是,1=是(钻石)
注意:通常一个玩家不能同时是两种有效会员,否则逻辑会混乱。需要设计充值逻辑避免同时激活。
会员有效期变量:
黄金会员到期时间戳:比如 VIP_GOLD_TIME
钻石会员到期时间戳:比如 VIP_DIAMOND_TIME
时间戳(Unix Timestamp):一个表示某个时间点的数字(如 1717843200 表示2024年6月8日16:00)。引擎通常有函数获取当前时间戳和时间戳转换功能。
📝 脚本实现:五大关键部分
假设我们的引擎支持类似 GOM, GEE, V8, LF 的常见命令(具体命令名需根据你的引擎微调)。
📍 第一部分:会员状态检测(必须添加到登录脚本 QManage.txt 的 [@Login] 中!)
这个部分在玩家每次登陆游戏时执行,用于检测其会员是否到期。
添加到你的 QManage.txt 文件中的 [@Login] 标签下
[@Login]
; ... (这里是你原有的登录触发内容,比如检测新人、送基础物品等)
----------- 黄金会员到期检测 -----------
#IF
Large VIP_GOLD_TIME 0 ; 检查是否曾经是黄金会员(时间戳大于0)
#ACT
GetNowDateTime ; 获取当前时间戳到 <$STR(S0)> (或者引擎对应的系统时间变量)
MOV S1 <$STR(VIP_GOLD_TIME)>
#IF
Small S1 <$STR(S0)> ; 比较到期时间(S1)是否小于当前时间(S0)? (即到期了)
#ACT
MOV VIP_GOLD_TIME 0 ; 到期,清除到期时间
MOV VIP_GOLD 0 ; 到期,清除黄金会员身份标记
SENDMSG 6 [系统提示] 您的黄金会员身份已到期!感谢您曾经的惠顾!
break ; 这里break是为了防止下面检测钻石会员时干扰,到期后跳过后续登陆检测
#ELSEACT
没到期,检查成功,保留标识,不用做特殊处理
SENDMSG 6 [系统提示] 尊贵的黄金会员,您的特权剩余时间:<$STR(VIP_GOLD_TIME)>秒
----------- 钻石会员到期检测 (逻辑与黄金会员完全一致) -----------
#IF
Large VIP_DIAMOND_TIME 0
#ACT
GetNowDateTime ; 获取当前时间戳到 <$STR(S0)> (或者引擎对应的系统时间变量)
MOV S1 <$STR(VIP_DIAMOND_TIME)>
#IF
Small S1 <$STR(S0)>
#ACT
MOV VIP_DIAMOND_TIME 0
MOV VIP_DIAMOND 0
SENDMSG 6 [系统提示] 您的钻石会员身份已到期!期待您的再次归来!
break
#ELSEACT
SENDMSG 6 [系统提示] 至臻钻石会员,您的特权剩余时间:<$STR(VIP_DIAMOND_TIME)>秒
这里一般不用break,除非你后面还有脚本需要跳过
关键解释:
Large VIP_GOLD_TIME 0:检查 VIP_GOLD_TIME 这个变量是否大于0。大于0表示玩家曾经是或者现在是黄金会员。
GetNowDateTime:假设引擎命令,功能是获取当前的系统时间戳并存入一个变量(这里假设存到 <S0>,请查阅你的引擎手册找到实际命令和变量)。
Small S1 <$STR(S0)>:比较到期时间(存在S1)是否小于当前时间(存在S0)。小于说明到期了。
到期处理:清除会员类型标识(VIP_GOLD=0)和到期时间戳(VIP_GOLD_TIME=0),并发送提示。
未到期处理:发送剩余时间提示(为了直观,最好把秒数转换成天数/小时/分钟显示,可以用引擎的时间计算函数做,为了脚本简洁这里用秒)。
🔥 重要提示:再次确保去掉功能块内部不必要的BREAK,像上次学到的,整个[@Login]标签最后用一个BREAK就好!上面的例子需要根据你引擎实际情况调整。
📍 第二部分:会员充值/激活NPC (关键)
这个NPC负责让玩家选择充值何种会员以及时长(或者直接用脚本设定固定时长)。我们创建一个新NPC脚本文件(如 会员使者-3.txt),放在你的NPC脚本目录下。
;==
文件:会员使者-3.txt
NPC位置:土城(333, 333) 会员使者
;==
[@main]
#IF
#ACT
OpenMerchantBigDialog ; 打开大对话框 (引擎命令可能不同)
#SAY
<尊敬的勇士/{FCOLOR=250}>,欢迎光临会员中心!\ \
您当前的身份状态:\ \
{★黄金会员状态:/{FCOLOR=249} <$OUTPUT(VIP_GOLD=1?已激活:未激活)>>} / \
{★钻石会员状态:/{FCOLOR=253} <$OUTPUT(VIP_DIAMOND=1?已激活:未激活)>>} \ \
{请选择您要办理的业务:/FCOLOR=254} \ \
{<购买/激活黄金会员/@BuyGoldVIP>}{ /FCOLOR=249} [<剩余时间:/FCOLOR=249>] <$STR(VIP_GOLD_TIME)>秒\ \
{<购买/激活钻石会员/@BuyDiamondVIP>}{ /FCOLOR=253} [<剩余时间:/FCOLOR=253>] <$STR(VIP_DIAMOND_TIME)>秒\ \
{<查询我的会员特权/@QueryVIPBenefits>}\ \
{<离开/@exit>}
[@BuyGoldVIP]
#IF
CheckGameGold > 999 ; 检查玩家元宝是否大于999 (假设1000元宝=1天黄金会员)
#ACT
GameGold - 1000 ; 扣除1000元宝
--- 计算新的到期时间 ---
GetNowDateTime ; 获取当前时间戳到 S0
MOV S1 <$STR(S0)>
假设购买一天:86400秒 = 24小时60分60秒
INC S1 86400
如果已有会员时间,则是在原基础上叠加
#IF
Large VIP_GOLD_TIME 0
#ACT
MOV VIP_GOLD_TIME <$STR(S1)>
如果当前没有会员时间,则直接设置到期时间并激活身份
#ELSEACT
MOV VIP_GOLD_TIME <$STR(S1)>
MOV VIP_GOLD 1
SENDMSG 6 [恭喜] 您已成功开通或续费黄金会员1天!到期时间:<$STR(VIP_GOLD_TIME)>
清除可能的钻石会员冲突 (如果设计不允许同时持有)
MOV VIP_DIAMOND 0
MOV VIP_DIAMOND_TIME 0
goto @main
#ELSESAY
您的元宝不足1000点!无法开通黄金会员。
goto @main
[@BuyDiamondVIP]
; 逻辑与购买黄金会员完全相同,只是变量名、扣费、时间和提示不同
#IF
CheckGamePoint > 4999 ; 或者 CheckGameGold > 4999 使用不同货币
#ACT
GameGold - 5000 ; 扣5000元宝
GetNowDateTime ; 当前时间戳 -> S0
MOV S1 <$STR(S0)>
INC S1 86400 ; 加一天 (可按需修改)
#IF
Large VIP_DIAMOND_TIME 0
#ACT
MOV VIP_DIAMOND_TIME <$STR(S1)>
#ELSEACT
MOV VIP_DIAMOND_TIME <$STR(S1)>
MOV VIP_DIAMOND 1
SENDMSG 6 [至尊荣耀] 您已成功开通或续费钻石会员1天!享受顶级特权!
清除可能的黄金会员冲突 (如果设计不允许同时持有)
MOV VIP_GOLD 0
MOV VIP_GOLD_TIME 0
goto @main
#ELSESAY
您的资源不足!无法开通钻石会员。
goto @main
[@QueryVIPBenefits]
#SAY
<黄金会员特权/FCOLOR=249>: \ \
每日可领取 <{100万金币/FCOLOR=250}>!\ \
可进入 <{远古遗迹/FCOLOR=250}> 地图!\ \
杀怪经验加成 <{10%/FCOLOR=250}>!\ \ \
<钻石会员特权/FCOLOR=253>: \ \
每日可领取 <{500万金币 + 5元宝/FCOLOR=253}>!\ \
可进入 <{远古遗迹/FCOLOR=253}> 和 <{虚空神殿/FCOLOR=253}> 专属地图!\ \
杀怪经验加成 <{20%/FCOLOR=253}> + 爆率加成 <{15%/FCOLOR=253}>!\ \
免费使用 <{全服传送服务/FCOLOR=253}>!\ \
<注:会员特权以游戏内实际为准。/FCOLOR=151}>\ \
<返回/@main>
关键解释:
变量检查与显示: 在 @main 使用 <STR(VIP_GOLD)> 和 <STR(VIP_DIAMOND)> 显示会员状态(0/1),使用 <$STR(VIP_GOLD_TIME/VIP_DIAMOND_TIME)> 显示剩余秒数(最好转换一下成天/时/分)。
扣费逻辑: CheckGameGold > 999 检查玩家元宝是否足够。GameGold - 1000 扣除相应元宝。
时间叠加逻辑:
GetNowDateTime 获取当前时间戳。
INC S1 86400 在当前时间戳基础上增加 86400 秒(即1天)。你可以修改 86400 这个数值来代表不同的时长(如 259200 是3天)。
如果玩家已经有会员时间 (Large VIP_GOLD_TIME 0),则只在原有到期时间的基础上增加购买时长 (MOV VIP_GOLD_TIME <$STR(S1)>)。
如果玩家没有会员时间 (Large VIP_GOLD_TIME 0 不成立),则设置到期时间为 购买时长后的时间戳 并激活会员标识 (MOV VIP_GOLD 1)。
会员类型互斥(可选): 代码中被注释掉的部分 (MOV VIP_DIAMOND 0 ...) 是用于处理如果你设计为不允许玩家同时拥有两种会员的情况。开通钻石时强制清除黄金会员状态(或反之)。
特权查询: @QueryVIPBenefits 简单列出不同会员的特权描述(如地图进入权限、奖励等)。
📍 第三部分:会员专属地图进入权限控制
通常在地图传送NPC上或者地图入口点(使用 MapEvent.txt 或 QManage.txt 的 [@OnMapEvent] )添加权限验证。
方式一:在传送NPC脚本中添加条件(推荐)
假设NPC(如 "地图传送员")负责传送到 "远古遗迹(黄金、钻石可进)" 和 "虚空神殿(仅钻石可进)"。
在你的传送NPC脚本中修改传送到这些地图的选项:
[@传送到远古遗迹]
; (假设这是传送命令)
#IF
条件:是黄金会员 "或" 是钻石会员 (VIP_GOLD=1 或 VIP_DIAMOND=1)
Check [VIP_GOLD] 1
Check [VIP_DIAMOND] 1
OR ; 满足上面两个条件中的一个即可 (黄金 或 钻石)
#ACT
MapMove 3 333 333 ; 假设传送到地图3的(333,333)
SENDMSG 6 已传送至远古遗迹!
#ELSESAY
抱歉,<远古遗迹/FCOLOR=249}> 是会员专属地图!\ \
请先开通 <黄金会员/FCOLOR=249}> 或 <钻石会员/FCOLOR=253}> 身份!
[@传送到虚空神殿]
#IF
条件:必须是钻石会员 (VIP_DIAMOND=1)
Check [VIP_DIAMOND] 1
#ACT
MapMove 4 333 333 ; 假设传送到地图4的(333,333)
SENDMSG 6 已传送至虚空神殿!尽情探索吧!
#ELSESAY
抱歉,<虚空神殿/FCOLOR=253}> 是 <钻石会员/FCOLOR=253}> 专属地图!\ \
请先开通 <至尊钻石会员/FCOLOR=253}> 身份!
关键解释:
Check [VIP_GOLD] 1:检查黄金会员标记是否为1(是)。
Check [VIP_DIAMOND] 1:检查钻石会员标记是否为1(是)。
OR:引擎的逻辑命令,表示或关系。上面两个条件只要有一个满足即可。
对于 "虚空神殿",只用 Check [VIP_DIAMOND] 1,因为它要求 必须 是钻石会员。
方式二:在地图进入点直接触发(使用 MapEvent.txt 或 QFunction-0.txt/QManage.txt)
如果地图本身有入口点(比如地图边界的某个坐标或一个传送门NPC),可以在触发文件中配置。
例如,在 MapEvent.txt (或引擎特定的地图触发配置文件) 中添加:
MapEvent.txt 格式可能如下 (具体参考引擎手册)
地图号 坐标X 坐标Y 触发的标签(标签写在QFunction-0.txt中)
例如:远古遗迹(地图3)的入口坐标(100,100)触发检测
100 100 @Enter_AncientRuins
然后在 QFunction-0.txt (处理功能脚本的文件) 中添加标签 @Enter_AncientRuins:
[@Enter_AncientRuins]
玩家从坐标点(100,100)进入地图3时触发
#IF
检查是否在会员有效期内:黄金 或 钻石
Check [VIP_GOLD] 1
Check [VIP_DIAMOND] 1
OR
#ACT
条件满足,允许进入,不做任何处理(玩家直接进地图)
break
#ELSEACT
条件不满足
MapMove <MAP> <X> <$Y> ; 把玩家弹回原地 (当前地图当前坐标)
或者 MapMove 0 333 333 ; 弹回土城安全区
SENDMSG 6 [警告] 禁止进入!<远古遗迹/FCOLOR=249}> 为会员专属地图!
break
用同样的方法为 "虚空神殿" 添加检测点,标签 @Enter_VoidTemple,条件改为只检测 VIP_DIAMOND=1。
📍 第四部分:每日会员奖励领取
可以在会员NPC(@main)或者另外创建一个“会员福利官”NPC中添加。
在会员使者脚本中添加选项
在 [@main] 的对话中加一个选项:
... 之前的对话 ...
{<领取每日会员福利/@GetDailyReward>}\ \
...
[@GetDailyReward]
#IF
如果是黄金会员 或者 钻石会员
Check [VIP_GOLD] 1
Check [VIP_DIAMOND] 1
OR
并且检查今天是否已经领取过(使用一个日期标记变量)
假设使用变量 [VIP_REWARD_DATE] 记录最后领取日期(格式 YYYYMMDD)
GetNowDate ; 获取当前日期到 <$STR(D0)> (格式YYYYMMDD)
NOT Equal <STR([VIP_REWARD_DATE])> <STR(D0)>
#ACT
符合领取条件
--- 设置日期标记 ---
MOV S1 <STR(D0)> ; 把日期存到一个临时变量S1 (有些引擎支持直接 MOV [VIP_REWARD_DATE] <STR(D0)>
MOV [VIP_REWARD_DATE] <$STR(S1)>
--- 检查并发放奖励 ---
#IF
Check [VIP_GOLD] 1
#ACT
发放黄金会员奖励
GIVE 金币 1000000 ; 100万金币
SENDMSG 6 [福利] 黄金会员今日福利:100万金币已发放!
#IF
Check [VIP_DIAMOND] 1
#ACT
发放钻石会员奖励 (钻石会员额外奖励或只发钻石奖励)
GIVE 金币 5000000 ; 500万金币
GIVE 元宝 5 ; 5元宝
SENDMSG 6 [福利] 钻石会员豪华福利:500万金币+5元宝已到账!
goto @main
#ELSESAY
#IF
NOT Check [VIP_GOLD] 1
NOT Check [VIP_DIAMOND] 1
#ACT
#SAY
您还不是任何有效会员,无法领取福利!
#ELSEACT
如果会员检查通过,那么就是日期标记相同(今天已领取过)
#SAY
您今天已经领取过会员福利了,请明天再来!
goto @main
📍 第五部分:脚本保存与应用(必读)
检查与调整语法: 脚本里的命令(如 GetNowDateTime, GetNowDate, S0, D0, MapEvent.txt 格式等)务必参考你实际使用的引擎说明书。不同引擎的命令名称、参数和系统变量名可能有差异!
文件存放位置:
QManage.txt:通常是 MirServer\Mir200\Envir\QuestDiary\ 或类似目录下的脚本文件,用于全局触发。
NPC脚本 (如 会员使者-3.txt):放到 MirServer\Mir200\Envir\Market_Def\ 或 MirServer\Mir200\Envir\Merchant.txt 指定的NPC脚本目录下。
MapEvent.txt 或触发配置:通常在 MirServer\Mir200\Envir\ 根目录下。
QFunction-0.txt:通常在 MirServer\Mir200\Envir\ 目录下,处理各种触发标签。
重新加载或重启: 修改脚本文件后:
最简单:重启服务器。
部分引擎支持GM命令实时加载:
加载NPC脚本:@reloadmerchant 或 @reloadnpc(参数可能是NPC名称或文件名)。
加载全局脚本:@reloadmanage 或 @reloadqmanage。
加载功能脚本:@reloadqfunction。
加载地图触发:@reloadmapevent 或可能需要重启地图(@reloadmon)甚至整个服务器。修改关键脚本后重启通常最稳妥。
测试!测试!测试! 务必开GM号或者小号测试各个功能:
购买黄金/钻石会员后,变量是否设置正确?
登陆时到期检测是否正常?
专属地图进入权限是否限制有效?
每日奖励能否正常领取且防止重复?
元宝扣除是否正确?
会员同时存在时的处理是否符合预期?
🚀 总结
这套脚本方案的核心在于:
使用 [VIP_GOLD], [VIP_DIAMOND] 标记会员身份类型。
使用 VIP_GOLD_TIME, VIP_DIAMOND_TIME 记录会员到期时间戳。
在 QManage.txt 的 [@Login] 中加入有效期自动检测逻辑。
创建 会员NPC 处理充值、激活、续费、查询、领奖。
在 地图传送点/入口点 加入会员身份验证。
在 会员NPC 中加入每日奖励领取功能。
按照这个思路和提供的脚本示例,结合你的具体引擎调整命令,就能成功实现一套功能完善的钻石会员与黄金会员分类系统(支持时效性会员和专属地图)!遇到具体引擎命令问题,随时查阅手册或寻求对应引擎的技术支持。祝你架服顺利!🎉
传奇会员特权设置指南:一招分清钻石VIP与黄金VIP(含时效+专属地图脚本)
来源:
作者:
点击:

