当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇GOM引擎月卡服脚本控制地图开放关闭,地图权限与月卡状态联动完整实现

热度:
月卡服实现地图动态开关,主要分为三种实现方式,分别是MapInfo.txt内置参数控制、MapQuest_Def进入地图拦截脚本、NPC传送入口限制,月卡状态依靠标记变量记录,[100]标记代表月卡有效,[100]=1为拥有月卡,[100]=0月卡过期,搭配登录脚本完成月卡时间校验,实现开通月卡即可进入地图,月卡到期自动关闭地图访问权限。

MapInfo.txt内置参数NEEDSET_ON,是引擎原生地图权限控制,打开Envir目录下MapInfo.txt,找到需要限制的地图行,在末尾添加NEEDSET_ON(100)参数。该参数含义为,玩家标记[100]必须等于1才允许进入这张地图,标记为0则直接阻止进入,不需要额外写大量脚本,适合简单的月卡地图管控。示例配置:[D200月卡专属地图]NORECONNECT(3)NEEDSET_ON(100)。修改完成保存文件,重载地图配置,玩家没有月卡,不管通过NPC传送、随机传送、瞬息移动,都无法进入该地图,直接被拦截在地图外。NEEDSET_OFF(100)则是相反逻辑,标记为0才可以进入,标记1禁止进入。

第二种方案,使用CHECKQUEST进入地图触发脚本,适合需要做弹窗提示、强制回城、自定义文字提示的场景。打开MapInfo.txt,对应地图行添加CHECKQUEST(Q001),代表玩家只要尝试进入这张地图,就会触发MapQuest_Def文件夹内Q001.txt脚本。在Envir\MapQuest_Def新建Q001.txt,写入如下脚本内容。
[@main]
#IFCHECK[100]1
#ACT
BREAK
#ELSEACT
SENDMSG6该地图为月卡专属地图,你的月卡已经过期,无法进入!
MAPMOVE3330330
BREAK

脚本逻辑,拥有月卡标记[100]=1,执行BREAK放行进入地图;月卡过期标记为0,发送提示消息,强制传送回盟重土城,中断进入操作。这种方式可以灵活修改提示文字,也可以叠加等级、元宝等额外条件,缺点是部分特殊传送手段有可能绕过触发,需要配合其他限制一起使用。

第三种方案,NPC传送入口限制,绝大多数版本采用这种方式,所有进入月卡地图的入口全部走NPC脚本,玩家点击NPC传送按钮,脚本先校验月卡标记,条件满足才执行MAPMOVE传送,不满足直接弹出提示。NPC脚本示例。
[@main]
#SAY月卡专属地图传送\\
<进入月卡地图/@enter>\\
<返回/@exit>

[@enter]
#IFCHECK[100]1
#ACT
MAPMOVED200100100
SENDMSG6成功进入月卡专属地图!
BREAK
#ELSEACT
#SAY你尚未开通月卡,无法进入该地图!\\<返回/@main>

该方式优点是逻辑简单,修改方便,缺点是如果游戏内存在瞬息移动、随机传送、其他NPC跳转,玩家可以绕开NPC直接闯入地图,所以建议搭配MapInfo的NEEDSET_ON参数双重防护。

月卡状态标记维护,需要在QFunction‑0.txt登录触发标签[@OnUserLogIn]内完成月卡时间判断,玩家每次登录,检测月卡到期时间,自动修改[100]标记。使用N1记录月卡到期的天数,登录的时候对比系统日期,到期则把[100]设置为0,月卡未过期设置为1。
[@OnUserLogIn]
#IFLARGEN1<$DAY>
#ACT
SET[100]0
SENDMSG6你的月卡已经到期,月卡专属地图已关闭访问权限!
#ELSEACT
SET[100]1
SENDMSG6你的月卡状态正常,可以进入月卡专属地图。

月卡充值NPC脚本,玩家购买月卡,执行设置到期时间,把N1赋值为未来的天数,同时开启标记[100]=1。
[@buyyueka]
#IFGAMEGOLD>=50000
#ACT
GAMEGOLD-50000
MOVN1<$DAY>+30
SET[100]1
SENDMSG6恭喜成功购买30天月卡,月卡地图已开启!
#ELSEACT
#SAY元宝不足,无法购买月卡!\\<返回/@main>

全局开关控制全部月卡地图,使用全局变量G1控制整体地图开放,G1=1全部月卡地图开启,G1=0全部月卡地图关闭。在MapQuest_Def的拦截脚本中增加全局判断,#IFEQUALG10,#ACTSENDMSG6月卡地图临时关闭,MAPMOVE3330330BREAK。可以配合机器人脚本,实现定时开启关闭全部月卡地图,例如每周固定时间开放月卡地图。

常见故障排查,玩家明明有月卡依旧进不去地图,检查MapInfo.txt的NEEDSET_ON参数书写格式,括号、数字不能出现中文符号,保存之后重载地图配置。标记变量[100]没有正确赋值,查看QFunction登录脚本是否重载,登录脚本没有重载,月卡标记不会更新。使用CHECKQUEST触发脚本,玩家可以强行闯入地图,需要核对MapInfo参数是否写对,Q001.txt文件是否存放在MapQuest_Def文件夹。月卡到期之后,玩家已经在月卡地图内不会被踢出来,需要在QFunction‑0增加[@OnTimer]定时器,定时扫描所有在线玩家,月卡过期的玩家,检测当前地图,如果在月卡地图,强制传送回城。

定时器脚本示例,在QFunction‑0.txt添加定时检测。
[@OnTimer]
#IFCHECKMAPNAMED200
#IFCHECK[100]0
#ACT
SENDMSG6你的月卡已过期,强制传送离开月卡地图!
MAPMOVE3330330

修改脚本之后,NPC脚本修改需要重载NPC脚本,QFunction脚本修改重载QFunction脚本,MapInfo修改之后需要重载地图配置。所有脚本文件保存编码必须为ANSI,中文文件夹、文件名不要带有多余空格,符号全部使用英文半角。

扩展功能,可增加多套月卡地图,使用不同标记变量区分不同档位月卡,[100]普通月卡,[101]至尊月卡,对应不同地图的NEEDSET_ON参数,实现不同月卡访问不同地图。可以在月卡地图内部增加每秒扣除元宝的参数,MapInfo中添加DECGAMEGOLD(60/10),代表每60秒扣除10元宝,月卡地图持续消耗元宝。也可以增加地图内怪物刷新控制,机器人脚本根据全局变量G1,控制月卡地图怪物是否刷新,全局开关关闭的时候,地图不刷新怪物,实现地图关闭的效果。
[顶部]