TimeRecall是控制玩家进入地图后限时返回原坐标的核心命令,广泛用于限时打宝、付费练级和活动地图场景。命令格式为`TimeRecall 数值`,数值单位为分钟,执行后引擎记录玩家当前所在地图和坐标,到时间自动将玩家传回原位。与之配套的还有BreakTimeRecall用于中途取消时间限制,SetRecallPoint用于手动记录坐标点,三者在实际脚本中经常搭配使用。
## 基础语法与参数
TimeRecall的完整格式为`TimeRecall 时间`,时间参数为纯数字,单位是分钟。`TimeRecall 30`表示设定30分钟的时间限制,时间到达后玩家被自动传回使用该命令时所处的地图和坐标。
GOM引擎对TimeRecall做了扩展,增加了一个可选参数:`TimeRecall 时间(分) 换地图停止执行(0-不停止 1-停止)`。第二个参数控制玩家在时间限制内切换到其他地图时是否继续计时。填0表示换地图后计时继续,时间到了仍然传回原始坐标;填1表示换地图后计时自动中断,玩家不会被传回。这个参数在限制玩家不要中途跑去其他地图的场景下很有用,比如限时打宝地图中防止玩家换图后计时还在走,导致传回时位置错乱。
GOM引擎还提供了`<$RecallRemainingTime>`变量,可以在脚本中显示TimeRecall剩余秒数,方便做倒计时提示界面。
## 限时打宝地图脚本范例
以下脚本实现一个典型场景:玩家支付元宝进入限时地图打宝,30分钟后自动传回土城。脚本放在`Mir200\Envir\Market_Def\`目录下,NPC配置写入`MerChant.txt`。
```plaintext
[@main]
我可以传送你到一个限时打宝房间,30分钟后自动传回。\
进入需要5000元宝,请问你要进入吗?\
<进入/@进入> <取消/@exit>\
[@进入]
#IF
CHECKGAMEGOLD > 4999
#ACT
GAMEGOLD - 5000
TimeRecall 30
MAPMOVE dns001 88 66
SENDMSG 6 你进入了限时打宝地图,30分钟后自动传回。
SENDMSG 6 剩余时间:<$RecallRemainingTime>秒
#ELSESAY
你的元宝不足5000,无法进入。\
```
脚本执行顺序很重要。先扣元宝,再执行TimeRecall记录当前坐标,最后用MAPMOVE传送进目标地图。TimeRecall必须写在MAPMOVE之前,因为TimeRecall记录的是执行该命令时玩家所在的坐标,如果先MAPMOVE再TimeRecall,记录的就是目标地图的坐标,时间到了玩家会被传回打宝地图而不是土城。
如果版本不支持`<$RecallRemainingTime>`变量,可以用SETONTIMER配合定时器脚本做倒计时提示,但复杂度更高,建议优先确认引擎版本是否支持该变量。
## 换地图停止计时的配置
默认情况下,TimeRecall设定的计时在玩家切换地图后仍然继续。如果希望玩家离开限时地图后计时自动取消,需要在TimeRecall命令中加上第二个参数:
```plaintext
[@进入]
#IF
CHECKGAMEGOLD > 4999
#ACT
GAMEGOLD - 5000
TimeRecall 30 1
MAPMOVE dns001 88 66
SENDMSG 6 你进入了限时地图,离开此地图后计时将停止。
```
第二个参数填1表示换地图即停止计时。玩家在限时地图内待满30分钟会被传回,但如果中途用回城卷或其他方式离开,计时自动终止,不会再被传回。填0或不填则换地图后计时继续,30分钟到了无论玩家在哪张地图都会被传回原始坐标。
## BreakTimeRecall中断时间限制
BreakTimeRecall命令用于取消TimeRecall设定的时间限制。执行该命令后,之前设置的限时传送被清除,玩家不会被自动传回。
常见使用场景是活动提前结束或玩家完成了限时任务。例如限时打宝地图中,玩家提前击杀了BOSS并获得了通关凭证,此时应该取消计时避免玩家在领奖过程中被传走:
```plaintext
[@击杀BOSS领奖]
#IF
CHECKITEM 通关凭证 1
#ACT
TAKE 通关凭证 1
BreakTimeRecall
GIVE 高级宝箱 1
SENDMSG 6 你已完成挑战,限时传送已取消,请安心领奖。
```
BreakTimeRecall必须在TimeRecall已经执行过的前提下使用。如果玩家没有进过限时地图,直接执行BreakTimeRecall不会产生任何效果,也不会报错。
## SetRecallPoint与TimeRecall的配合使用
SetRecallPoint命令用于手动记录玩家当前的地图和坐标,语法为`SetRecallPoint 编号`,编号范围为1到6,每个角色可以保存6个坐标点。与TimeRecall的区别在于,TimeRecall记录的是执行命令时的坐标且只能保存一个返回点,SetRecallPoint可以主动指定保存哪个坐标点,配合RecallPointMove命令实现更灵活的传送返回。
以下脚本实现玩家从土城进入限时地图,返回坐标手动设为土城某个特定位置而非进入时的坐标:
```plaintext
[@进入限时地图]
#IF
#ACT
SetRecallPoint 1
TimeRecall 45
MAPMOVE dns001 88 66
SENDMSG 6 你进入了限时地图,45分钟后传回记录点。
[@返回土城]
#IF
CHECKRECALLPOINT 1
#ACT
RecallPointMove 1
BreakTimeRecall
SENDMSG 6 你已返回土城记录点。
```
SetRecallPoint 1在玩家还在土城时执行,记录土城的坐标。TimeRecall 45设定45分钟限时。玩家进入限时地图后,如果在45分钟内想提前返回,点击返回NPC执行RecallPointMove 1,传回之前记录的土城坐标,同时用BreakTimeRecall取消剩余的计时。
## 常见问题与排查
TimeRecall执行后玩家没有被传回。首先确认TimeRecall命令是否在MAPMOVE之前执行。如果顺序写反,返回坐标会被记录成目标地图的坐标。其次确认脚本中是否在其他地方执行了BreakTimeRecall,这个命令会清除时间限制。检查是否有其他脚本段在玩家进入目标地图后自动执行了BreakTimeRecall。
时间限制到了但玩家传回的位置不对。TimeRecall记录的返回坐标是执行命令时玩家所在位置。如果玩家在执行TimeRecall时处于移动状态,记录到的坐标可能不是预期位置。建议在NPC对话中执行TimeRecall,此时玩家处于静止状态,坐标记录最准确。
限时地图中玩家掉线后重新上线,计时是否继续取决于引擎实现。部分引擎的TimeRecall计时在玩家掉线后暂停,重新上线后继续计时;部分引擎掉线后计时继续。如果需要在掉线后取消计时,可以在玩家登录触发脚本中加入BreakTimeRecall命令,让玩家重新上线后自行决定是否继续限时。
TimeRecall与MAPMOVE的顺序是写限时脚本时最容易出错的地方,记住一个原则:先TimeRecall记录坐标,再MAPMOVE传送进目标地图,两行命令的顺序不能颠倒。
传奇脚本TimeRecall命令用法与限时传送配置详解
来源:
作者:
点击:

