传奇脚本设置限时进入地图及自动清人方法详解

来源: 作者: 点击:
要实现“仅在8:10至8:20之间允许进入某地图,且活动持续至8:50后自动将所有人传送回城”的功能,需结合时间判断、进入拦截与定时清图三部分脚本。以下以地图编号D1000为例,说明具体配置方式。

第一步:限制进入时间(8:10–8:20)

在角色尝试进入地图时触发拦截逻辑。需在QFunction-0.txt中添加以下代码:

[@MapEnter_D1000]
IF
CHECKLEVELEX1
ACT
goto@CheckEnterTime

[@CheckEnterTime]
IF
CHECKTIME810
!CHECKTIME820
ACT
;允许进入,不执行任何操作
break
ELSEACT
SendMsg1"该地图仅在每日08:10至08:20开放进入!"
MapMove0300300

说明:
[@MapEnter_D1000]是地图进入事件标签,D1000为示例地图编号,需替换为实际地图;
CHECKTIME810表示当前时间≥08:10;
!CHECKTIME820表示当前时间<08:20(因CHECKTIME判断“是否已到该时刻”);
若不在允许时段,发送提示并传送到主城坐标(0300300为比奇城常见坐标)。

注意:部分引擎使用CHECKHOURMIN命令,格式为CHECKHOURMIN810820,表示08:10至08:20。若上述CHECKTIME无效,可尝试:
#IF
CHECKHOURMIN810
!CHECKHOURMIN820
第二步:活动结束自动清图(8:50执行)

需通过定时任务在08:50触发全图传送。在!RunTime.txt文件中添加:

;每日08:50执行清图
08:50#EXECUTE[CLEAR_MAP_D1000]

然后在QFunction-0.txt中定义对应标签:

[@CLEAR_MAP_D1000]
ACT
MapCmdD1000MAPMOVE0300300
SendCenterMsg2"活动结束,所有玩家已传送回城!"

说明:
!RunTime.txt路径通常为MirServerMir200Envir!RunTime.txt;
MapCmdD1000MAPMOVE0300300表示将D1000地图内所有角色传送到地图0(比奇)的(300300);
SendCenterMsg在屏幕中央广播提示。

若引擎不支持MapCmd,可改用逐个踢人方式(效率较低):
[@CLEAR_MAP_D1000]
#ACT
KickMapD1000
;部分版本KickMap会直接断开连接,慎用
第三步:防止活动期间中途进入

上述进入拦截仅控制“首次进入”。若玩家在08:15进入后一直停留,系统不会中途踢出,符合需求。但需确保无其他传送点或技能可绕过进入检查。例如:
检查是否有其他NPC可直接传送到D1000;
确认道士“随机传送”或法师“瞬息移动”是否被禁用(可在MapInfo.txt中设置NoRecall=1和NoTeleport=1)。

完整流程验证

08:09尝试进入D1000→被拒绝并传送回城;
08:12进入D1000→成功进入;
08:25新玩家尝试进入→被拒绝;
08:50系统自动将D1000内所有玩家传送回城;
08:51玩家无法再进入,直至次日08:10。

引擎兼容性说明

Hero引擎:支持CHECKTIME、MapCmd、!RunTime.txt;
GOM引擎:使用CHECKHOURMIN,定时任务文件为AutoEvent.txt;
其他定制引擎:查阅命令手册确认时间判断与地图操作指令。

此方案无需修改客户端,纯服务端脚本实现,适用于常规传奇版本。关键在于准确配置时间判断逻辑与定时清图任务,确保活动窗口严格受控。
[顶部]