一、核心逻辑与文件配置
限时地图的核心是“进入即开始倒计时,时间耗尽强制回城”。实现方式主要有两种:地图参数法(自动)和脚本计时法(手动)。脚本需修改 MapInfo.txt(地图配置)、NPC脚本(传送入口)和 QFunction-0.txt(触发检测)。
二、方案一:地图参数法(推荐,引擎自动管理)
此方法利用引擎的 TimeMap 参数,无需复杂脚本,自动处理超时踢人。
1. 修改 MapInfo.txt
在服务端 Envir\MapInfo.txt 中找到你的限时地图配置行,添加 TimeMap 参数。
[D515 限时深渊] NORECALL NODEARRECALL NOMasterRECALL NORECONNECT(3) TimeMap(3|5|1|@TimeOutExit)
参数解释:
◦ 3:超时后传送回的地图编号(通常3为盟重)。
* 5:限时时间,单位分钟(示例为5分钟)。
◦ 1:是否显示剩余时间(1显示,0不显示)。
* @TimeOutExit:超时触发QF脚本标签(可选,用于发送提示)。
2. QF超时提示(可选)
在 QFunction-0.txt 中添加:
[@TimeOutExit]
#ACT
SendMsg 5 【系统】限时地图时间已到,你已被传送回城!
三、方案二:脚本计时法(传统,可控性强)
通过NPC传送时启动个人定时器,适合需要复杂条件(如扣元宝、检测物品)的场景。
1. NPC传送脚本(Envir\Market_Def\NPC名.txt)
[@进入限时地图]
#IF
CHECKLEVELEX > 40 ; 检测等级
CHECKGAMEGOLD > 99 ; 检测元宝
#ACT
GAMEGOLD - 100 ; 扣除元宝
MapMove D515 ; 传送到限时地图
SetScTimer 1 300 ; 启动1号定时器,300秒(5分钟)后触发
SendCenterMsg 180 0 你已进入限时地图,剩余时间:%s秒 0 300 @TimeUp
#ELSESAY
进入条件:等级40级,元宝100个。
2. 定时器触发(QFunction-0.txt)
[@OnTimer1] ; 1号定时器触发
#ACT
KillScTimer 1 ; 关闭定时器
MapMove 3 330 330 ; 传回盟重(3)安全区
SendMsg 5 【系统】时间到,自动回城!
[@TimeUp] ; 倒计时结束标签(由SendCenterMsg触发)
#ACT
KillScTimer 1
MapMove 3 330 330
SendMsg 5 【系统】时间耗尽!
3. 防挂机补刀(QManage.txt)
在登录脚本或主控脚本中,检测玩家若在限时地图但无定时器,则强制踢出。
[@Login]
#IF
ISONMAP D515 ; 在限时地图
CheckScTimer 1 = 0 ; 没有1号定时器(异常状态)
#ACT
MapMove 3
SendMsg 5 【系统】状态异常,已传回安全区。
四、常见错误与修复
问题1:时间到了不传送
• 原因:MapInfo.txt 中的地图编号写错,或 TimeMap 参数语法错误(必须用竖线|分隔)。
* 解决:检查地图编号是否与 MapInfo.txt 中定义的一致。TimeMap 参数必须紧跟在地图属性后。
问题2:定时器不触发
• 原因:SetScTimer 的标签号冲突,或 QFunction-0.txt 中的 [@OnTimerX] 标签未正确定义。
* 解决:确保每个玩家的定时器ID唯一(通常用1-10),且 KillScTimer 只在需要停止时调用。
问题3:小退后计时失效
• 原因:传统 TimeRecall 命令在小退后失效。
* 解决:使用 SetScTimer 配合 QManage.txt 的 [@Login] 检测,或直接使用方案一的 TimeMap 参数(引擎底层支持,最稳定)。
五、高级功能:可配置时间
若想让玩家选择不同时长(如30分钟/60分钟),修改NPC脚本:
[@选择时长]
请选择进入时长:\
<30分钟/@Go(1800)> <60分钟/@Go(3600)>\
[@Go]
#ACT
MOV P1 %ARG(1) ; 获取参数(秒数)
SetScTimer 1 <$STR(P1)>
MapMove D515
SendCenterMsg 0 0 剩余时间:%s秒 0 <$STR(P1)> @TimeUp
总结:单机版推荐使用 方案一(TimeMap),配置简单且稳定;如需复杂的进入条件(如扣费、检测任务),则使用 方案二(SetScTimer),但务必在 @Login 中做好状态校验。

