要实现“仅在8:10至8:20之间允许进入某地图,且活动持续至8:50后自动将所有人传送回城”的功能,需结合时间判断、进入拦截与定时清图三部分脚本。以下以地图编号 D1000 为例,说明具体配置方式。
第一步:限制进入时间(8:10–8:20)
在角色尝试进入地图时触发拦截逻辑。需在 QFunction-0.txt 中添加以下代码:
[@MapEnter_D1000]
IF
CHECKLEVELEX 1
ACT
goto @CheckEnterTime
[@CheckEnterTime]
IF
CHECKTIME 8 10
!CHECKTIME 8 20
ACT
; 允许进入,不执行任何操作
break
ELSEACT
SendMsg 1 "该地图仅在每日08:10至08:20开放进入!"
MapMove 0 300 300
说明:
[@MapEnter_D1000] 是地图进入事件标签,D1000 为示例地图编号,需替换为实际地图;
CHECKTIME 8 10 表示当前时间 ≥ 08:10;
!CHECKTIME 8 20 表示当前时间 < 08:20(因 CHECKTIME 判断“是否已到该时刻”);
若不在允许时段,发送提示并传送到主城坐标(0,300,300 为比奇城常见坐标)。
注意:部分引擎使用 CHECKHOURMIN 命令,格式为 CHECKHOURMIN 810 820,表示 08:10 至 08:20。若上述 CHECKTIME 无效,可尝试:
#IF
CHECKHOURMIN 810
!CHECKHOURMIN 820
第二步:活动结束自动清图(8:50执行)
需通过 定时任务 在 08:50 触发全图传送。在 !RunTime.txt 文件中添加:
; 每日08:50执行清图
08:50 #EXECUTE [CLEAR_MAP_D1000]
然后在 QFunction-0.txt 中定义对应标签:
[@CLEAR_MAP_D1000]
ACT
MapCmd D1000 MAPMOVE 0 300 300
SendCenterMsg 2 "活动结束,所有玩家已传送回城!"
说明:
!RunTime.txt 路径通常为 MirServerMir200Envir!RunTime.txt;
MapCmd D1000 MAPMOVE 0 300 300 表示将 D1000 地图内所有角色传送到地图0(比奇)的 (300,300);
SendCenterMsg 在屏幕中央广播提示。
若引擎不支持 MapCmd,可改用逐个踢人方式(效率较低):
[@CLEAR_MAP_D1000]
#ACT
KickMap D1000
; 部分版本 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;
其他定制引擎:查阅命令手册确认时间判断与地图操作指令。
此方案无需修改客户端,纯服务端脚本实现,适用于常规传奇版本。关键在于准确配置时间判断逻辑与定时清图任务,确保活动窗口严格受控。

