进入皇宫都没有 release_print("【攻城定时】执行参数:" .. tostring(param))日志XueZhanShaCheng = class("XueZhanShaCheng", BaseSystemLogic)
ZhuanSheng = VarCfg.player.sZhuanSheng --玩家转生等级
KuangBao = VarCfg.player.sRage --玩家狂暴开启
WangZheZanZu = VarCfg.player.sWangZheZanZu --
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-22 11:02:44 |
👁️ 阅读: 0
我是lua后端老师!
修仙者你好,看了你的攻城脚本,确实存在一个问题:`OnStartup` 函数中的 `AddScheduled` 是全局定时器调度命令,它会在指定的时间点触发 `OnSbkSchedule` 函数。但是,这个 `OnSbkSchedule` 函数被定义在了另一个类文件(`XueZhanShaCheng`)内部,这会导致引擎在全局范围内无法找到并调用它,因此 `release_print("【攻城定时】执行参数:" .. tostring(param))` 这行日志永远不会执行。
你需要将 `OnSbkSchedule` 函数移出类定义,放到一个独立的、全局可访问的脚本文件中(通常是 `QManage.lua` 或类似的全局管理脚本),这样才能确保定时器被正确触发。
这里给你修改后的建议:
1. 在 `QManage.lua` (或你的全局启动脚本) 中,添加以下代码:
```lua
-- QManage.lua 或其他全局脚本文件
-- 服务端启动时设置攻城定时器
function OnStartup()
-- 每天 20:00 开启,21:00 关闭
AddScheduled(ConstCfg.GlobalTimer.XueZhanShaCheng1, "攻城时间控制", 1, "20:00:00#21:00:00", "@OnSbkSchedule", "open#close")
end
-- 全局定时器回调函数
function OnSbkSchedule(sysobj, param)
release_print("【攻城定时】执行参数:" .. tostring(param))
if param == "open" then
-- 20:00 开启攻城
SBK_CAN_FLY = true
addtocastlewarlistex("*")
gmexecute("0", "ForcedWallConQuestwar")
release_print("==== 20:00 攻城开始 ===")
elseif param == "close" then
-- 21:00 关闭攻城
SBK_CAN_FLY = false
gmexecute("0", "ForcedWallConQuestwar")
release_print("==== 21:00 攻城结束 ===")
-- 将皇宫内的玩家传送回城
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
-- 移除玩家的个人活跃值计时器
if hastimer(pid, 7) then
setofftimer(pid, 7)
end
end
end
end
```
2. 然后,在你的 `XueZhanShaCheng` 类文件中,**移除** `OnStartup` 和 `OnSbkSchedule` 这两个函数的定义。确保 `SBK_CAN_FLY` 这个变量在 `QManage.lua` 中定义为全局变量(例如 `_G.SBK_CAN_FLY = false`),或者在 `XueZhanShaCheng` 类中通过其他方式(如读取系统变量 `getsysvar`)来获取这个开关状态。
3. 另外,我注意到你的脚本中混合使用了 `print` 和 `release_print`。在正式的脚本中,为了性能和在客户端控制台查看,**建议统一使用 `release_print`**。`print` 函数在某些引擎环境下可能不会输出到理想的位置。
这样修改后,全局定时器就能正确触发,你的日志也就能打印出来了。如果还有不明白的地方,随时可以问我或者请教浮生梦尊师!
← 返回问答库