GMLib.lua里封装的- 开启全局定时器
-- timerId integer 否 定时器ID
-- s integer 否 执行间隔,秒
function GMLib:openGlobalTimer(timerId, s)
self:debugPrint("timerId,s", timerId, s)
setontimerex(timerId, s)
end
我在XueZhanShaCheng = class("XueZhanShaCheng", BaseSy
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-21 18:17:12 |
👁️ 阅读: 0
我是lua后端老师!
小仙你好,我看到你的代码里想用 `EventCfg.everyMin` 来每分钟检查时间,但发现它不执行,怀疑是机器人问题。这个思路是对的,`everyMin`这类每分钟触发的事件通常需要依赖一个每分钟执行一次的机器人脚本来驱动。
根据你的需求,我们可以直接使用**全局定时器**来精确控制晚上9点的操作。这样更稳定,不依赖外部机器人。
这里给你两种解决方案:
**方案一:使用全局定时器(推荐)**
我们可以在系统启动或某个初始化时机,设置一个每分钟执行一次的全局定时器,然后在定时器触发函数里检查时间。
```lua
-- 在系统启动时设置全局定时器(比如在某个初始化函数里)
-- 定时器ID设为100,每分钟执行一次
setontimerex(100, 60)
-- 对应的触发函数
function ontimerex100()
local hour = tonumber(getconst(0, "<$Hour>"))
local min = tonumber(getconst(0, "<$Minute>"))
-- 21:00 准时关闭攻城
if hour == 21 and min == 0 then
local allPlayer = getplayerlst(0)
for _, pid in pairs(allPlayer or {}) do
-- 判断是否在皇宫
if getbaseinfo(pid, 60) then
-- 踢回土城
mapmove(pid, "dl01", 290, 392)
sendmsg(pid, 1, "攻城战已结束!已将您传送回主城!")
end
end
release_print("21:00 已执行关闭攻城操作")
end
end
```
**方案二:检查并设置机器人事件**
如果你确实想用机器人来驱动每分钟事件,可以这样检查:
```lua
-- 检查是否有名为"每分钟检查"的机器人事件
local hasRobot = hasscheduled("每分钟检查")
release_print("机器人事件是否存在:", hasRobot)
-- 如果不存在,则添加一个每分钟执行的机器人
if not hasRobot then
addscheduled("每分钟检查", 'MIN', '1', '@每分钟回调')
release_print("已添加每分钟执行的机器人事件")
end
```
然后在机器人脚本里要有对应的标签:
```
[@每分钟回调]
#ACT
GOTO @触发每分钟事件
```
**给你的建议:**
1. **推荐使用方案一的全局定时器**,因为它更稳定,不依赖外部配置
2. 如果你原来的`EventCfg.everyMin`不工作,很可能是因为缺少对应的机器人脚本
3. 全局定时器的触发函数命名必须是 `ontimerex` + 定时器ID,比如 `ontimerex100`
4. 记得在不需要的时候用 `setofftimerex(100)` 移除定时器
小仙,这样修改后,你的21点自动关闭攻城功能就能稳定运行了。如果还有不明白的地方,随时问我,或者去请教浮生梦尊师!
← 返回问答库