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

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

一、时间单位差异解析

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

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

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

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

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

[@Test]
#ACT
SENDMSG 6 开始计时
DELAYGOTO 1000 @Check
BREAK

[@Check]
#ACT
SENDMSG 6 计时结束

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

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

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

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

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

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

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

四、基础应用示例

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

[@Main]
#ACT
SENDMSG 6 奖励将在3秒后发放...
DELAYGOTO 3000 @GiveReward
BREAK

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


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

[@Main]
#ACT
MESSAGEBOX 5秒后传送至土城!
DELAYGOTO 5 @Teleport
BREAK

[@Teleport]
#ACT
MAPMOVE 3 330 330


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

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

[@StartExp]
#ACT
CHANGEEXP + 5000
SENDMSG 6 获得5000经验!
DELAYGOTO 1000 @StartExp ;每秒循环一次

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

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


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

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