延时
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-05 00:28:56 |
👁️ 阅读: 6
我是lua后端老师!
小仙,关于“延时”功能,引擎提供了多种实现方式,主要分为定时器和延时跳转两大类,你可以根据具体需求选择使用。
### 1. 个人定时器
用于为单个玩家创建周期性的定时任务。
```lua
-- 添加一个个人定时器,ID为1,每5秒执行一次,共执行1次
setontimer(actor, 1, 5, 1)
-- 在QF脚本中定义对应的触发函数
function ontimer1(actor)
release_print("个人定时器1触发了!")
-- 这里可以执行你的逻辑,例如完成任务
newcompletetask(actor, 1)
end
-- 移除个人定时器
setofftimer(actor, 1)
-- 判断个人定时器是否存在
local exists = hastimer(actor, "1")
release_print("定时器1是否存在:", exists)
```
### 2. 全局定时器
用于创建服务器级别的周期性定时任务。
```lua
-- 添加一个全局定时器,ID为23,每5秒执行一次
setontimerex(23, 5)
-- 在QF脚本中定义对应的触发函数
function ontimerex23()
release_print("全局定时器23触发了!")
end
-- 移除全局定时器
setofftimerex(23)
-- 判断全局定时器是否存在
local existsEx = hastimerex("23")
release_print("全局定时器23是否存在:", existsEx)
```
### 3. 延时消息跳转
用于实现单次、延后执行某个函数,并可以传递参数。
```lua
-- 延时2秒后执行 newcompletetask(actor, 1)
delaymsggoto(actor, 2000, "@newcompletetask,1")
-- 在QF脚本中定义对应的触发函数来接收参数
function newcompletetask(actor, taskid)
-- 调用引擎函数完成任务
newcompletetask(actor, taskid)
release_print("延时完成任务ID:", taskid)
end
```
### 4. 全局延时回调
用于实现服务器级别的单次延时任务。
```lua
-- 全局延时1秒后执行函数,并传递参数
grobaldelaygoto(1000, "grobal_jump,a,b,c")
-- 在QF脚本中定义对应的触发函数
function grobal_jump(arg1, arg2, arg3)
release_print("全局延时回调参数:", arg1, arg2, arg3)
end
-- 删除指定的全局延时回调
grobalcleardelaygoto("grobal_jump,a,b,c", 0)
-- 或者根据函数名忽略参数删除
grobalcleardelaygoto("grobal_jump", 1)
```
### 5. 系统任务计时
这是一种特殊的延时回调,通常用于任务倒计时等场景。
```lua
-- 添加一个系统任务计时,10秒后触发,上线直接执行并刷新时间
dsfuncall(actor, "dingshicf_1", 10 * 1000, 1, 1)
-- 在QF脚本中定义以 dingshicf_ 开头的回调函数
function dingshicf_1(actor)
release_print("系统任务计时触发了!")
end
-- 删除系统任务计时
deldsfuncall(actor, "dingshicf_1")
```
**总结一下**:
- **定时器**:适合周期性重复执行的任务(个人`setontimer` / 全局`setontimerex`)。
- **延时跳转**:适合一次性、延后执行的任务(个人`delaymsggoto` / 全局`grobaldelaygoto`)。
- **系统任务计时**:适合与任务系统绑定的特殊倒计时(`dsfuncall`)。
你可以根据自己的脚本逻辑选择最合适的方法。如果还有不清楚的地方,随时问我哦!
← 返回问答库