-------------------------------↓↓↓ 机器人事件 ↓↓↓---------------------------------------
beforeDawn = "beforeDawn", -- 每日0点触发
everySec = "everySec", -- 每秒钟触发
everyMin = "everyMin", -- 每分钟触发
everyHour = "everyHour", -- 每小时触发
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-21 18:00:47 |
👁️ 阅读: 0
我是lua后端老师!
小仙,你好!看到你整理的这些机器人事件名称,很不错哦!这些都是机器人事件(Scheduled)里`executeMethod`(执行方式)的常用类型。我来给你详细解释一下:
在996引擎里,我们可以用`addscheduled`这个函数来创建一个定时执行的机器人任务。它的执行方式就是由你列出的这些字符串来控制的。
```lua
-- 添加一个每日0点触发的机器人
addscheduled("每日零点任务", 'RunOnDay', '0:0:0', '@daily_reset')
-- 参数说明:
-- 第一个参数 "每日零点任务":是机器人的名称(scheduledName),可以自定义,用来唯一标识这个任务。
-- 第二个参数 'RunOnDay':是执行方式(executeMethod),表示“按每天什么时候运行”。
-- 第三个参数 '0:0:0':是时间参数(time),对应RunOnDay,格式是“时:分:秒”。
-- 第四个参数 '@daily_reset':是跳转标签(funcName),当任务触发时,会跳转到这个标签去执行代码。
-- 添加一个每秒钟触发一次的机器人
addscheduled("每秒心跳", 'SEC', '1', '@heartbeat_sec')
-- 执行方式为 'SEC',时间参数 '1' 表示间隔1秒。
-- 添加一个每分钟触发一次的机器人
addscheduled("每分钟任务", 'MIN', '1', '@heartbeat_min')
-- 执行方式为 'MIN'。
-- 添加一个每小时触发一次的机器人
addscheduled("每小时任务", 'HOUR', '1', '@heartbeat_hour')
-- 执行方式为 'HOUR'。
```
**核心要点:**
1. **执行方式 (executeMethod)**:决定了任务按什么时间规则运行。
* `SEC`:按秒运行。`time`参数填间隔秒数。
* `MIN`:按分运行。`time`参数填间隔分钟数。
* `HOUR`:按小时运行。`time`参数填间隔小时数。
* `DAY`:按天运行。`time`参数填间隔天数。
* `RunOnDay`:**按每天具体时间点运行**。`time`参数格式为 `时:分:秒`(比如 `5:30:0` 表示每天5点30分0秒)。
* `RUNONWEEK`:按星期几及时间运行。`time`参数格式更复杂,比如 `1,12:0:0` 表示每周一的12点整。
2. **配套函数**:
* `hasscheduled(scheduledName)`:判断一个机器人事件是否存在。
* `delscheduled(scheduledName)`:删除一个机器人事件。
3. **触发执行**:当机器人时间到了,引擎会去`QFunction-0.lua`文件里寻找一个名为 `scheduled_backcall` 的函数来执行。你需要在这个函数里根据传入的机器人名称(`scheduledName`)来写具体的逻辑。
```lua
-- 在 QFunction-0.lua 中需要有的回调函数
function scheduled_backcall(scheduledName)
if scheduledName == "每日零点任务" then
release_print("机器人[每日零点任务]被触发,开始执行每日重置逻辑...")
-- 这里写每天0点要做的所有事情,比如重置副本、发放奖励等
elseif scheduledName == "每秒心跳" then
-- release_print("心跳...") -- 每秒打印太频繁,调试时可打开
-- 这里可以写一些需要每秒检查的逻辑
end
end
```
你总结的这几个名称非常实用,是游戏服务器日常维护(如发奖、重置、广播)的基石。把它们用`addscheduled`函数配置好,你的游戏世界就能自动运转起来啦!
如果还有不清楚的,随时问我,或者去请教我的师傅浮生梦尊师!
← 返回问答库