传奇DELAYGOTO脚本时间单位详解与实战应用

来源: 作者: 点击:
DELAYGOTO是传奇脚本中实现延迟跳转的核心命令,其时间单位因引擎版本不同存在毫秒与秒两种标准,这是导致混淆的根本原因。

一、时间单位差异解析

毫秒单位标准
当前主流引擎(GOM、GEE、无度游等)普遍采用毫秒(ms)作为DELAYGOTO的时间单位。1秒=1000毫秒。命令格式为:

DELAYGOTO时间数值(毫秒)@目标标签

示例:DELAYGOTO3000@NextStep表示延迟3000毫秒(即3秒)后,跳转执行@NextStep标签处的脚本。

秒单位标准
部分早期引擎或特定版本(如某些LegendM2)采用秒作为时间单位。命令格式相同,但数值代表秒数。
示例:DELAYGOTO5@NextStep表示延迟5秒后跳转。

二、如何确定所用引擎的单位
1.查看引擎说明书:服务端配套文档中会明确说明DELAYGOTO的时间单位。
2.测试验证:编写简单测试脚本。例如:

[@Test]
#ACT
SENDMSG6开始计时
DELAYGOTO1000@Check
BREAK

[@Check]
#ACT
SENDMSG6计时结束

若两次提示间隔约1秒,则单位为毫秒;若间隔约1000秒(极长),则单位为秒。实际测试时建议使用较小数值(如100或1)。
3.观察M2Server控制台:部分引擎在加载脚本时,会对时间参数进行提示或校验。

三、DELAYGOTO完整语法与参数
现代引擎(以GOM为例)的完整命令格式已扩展:

DELAYGOTO时间(毫秒)@触发字段换地图是否删除此延时(0/1)延迟编号

•时间(毫秒):延迟时长,正整数。通常有范围限制(如100-3600000,即0.1秒至1小时)。

•@触发字段:目标标签名,必须以@开头,且在脚本中已定义。

•换地图是否删除此延时:可选参数。填1时,人物切换地图将清除此延迟;填0或留空则保留。

•延迟编号:可选参数,用于标识特定的延迟任务,便于精准清除。

四、基础应用示例

毫秒单位引擎示例(延迟3秒后给予奖励)

[@Main]
#ACT
SENDMSG6奖励将在3秒后发放...
DELAYGOTO3000@GiveReward
BREAK

[@GiveReward]
#ACT
GIVE金条1
SENDMSG6获得金条1根!
GOTO@Main


秒单位引擎示例(延迟5秒后传送)

[@Main]
#ACT
MESSAGEBOX5秒后传送至土城!
DELAYGOTO5@Teleport
BREAK

[@Teleport]
#ACT
MAPMOVE3330330


五、进阶应用:循环任务与清除控制

循环执行(每秒增加经验)

[@StartExp]
#ACT
CHANGEEXP+5000
SENDMSG6获得5000经验!
DELAYGOTO1000@StartExp;每秒循环一次

清除特定延迟任务
使用CLEARDELAYGOTO命令,配合延迟编号可精准清除。

[@StopExp]
#ACT
CLEARDELAYGOTO01;清除编号为1的DELAYGOTO任务
SENDMSG6经验加成已停止。


六、注意事项与常见问题
1.单位确认首位:编写脚本前必须明确服务端引擎的时间单位,错误单位会导致延迟时间完全偏离预期。
2.避免死循环:循环使用的DELAYGOTO必须设置合理的跳出条件,或提供清除命令,防止脚本无限执行消耗资源。
3.参数兼容性:“换地图删除”和“延迟编号”是较新的参数,旧引擎可能不支持,需按引擎实际支持情况编写。
4.跳转标签存在性:目标标签(如@GiveReward)必须在同一脚本文件中正确定义,否则跳转失败。
5.数值范围:时间数值不宜过大或过小,超出引擎限制可能被自动修正或导致错误。

七、实战建议
对于新开服务端,默认以毫秒单位编写脚本。若脚本延迟效果异常(极长或极短),首先怀疑时间单位设置错误。最可靠的方法是查阅引擎官方文档或使用上述测试方法进行验证。掌握DELAYGOTO的时间单位差异,是编写精准定时、循环任务脚本的基础。
[顶部]