DengjiChaotuo = class("DengjiChaotuo", BaseSystemLogic)
function DengjiChaotuo:init()
self._cfg = Util:requireCfg(self.mCfg.severPath)
self.varName = VarCfg.player.nDengjiChaotuo -- 存储超脱次数的变量名
self.dayVar = VarCfg.player.nDengJi --天变量
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-09 14:02:12 |
👁️ 阅读: 8
哈喽,我是Lua后端老师!
小仙,看了你的代码,你是想让玩家每天零点自动清零超脱次数,而不是等到点击按钮时才清零。从你的代码逻辑看,你已经意识到了天变量`dayAddNum`在零点会被系统清零,并尝试利用这个特性。
不过,你的逻辑是放在按钮点击函数`ChaoTuo`里判断的,这确实会导致“不点按钮就不清零”。要实现自动清零,你需要把这个判断逻辑移到一个**每天零点都会自动触发**的引擎事件里。
在996引擎中,`resetday`这个QF触发事件,就是专门为“跨天登录触发”设计的,**即使是0点在线的玩家也会进入这个触发**。这是实现你需求最合适的地方。
你需要做以下几步:
1. **在QF脚本(通常是QFunction-0.txt)里,添加`[@resetday]`触发段。**
2. 在这个触发段里,调用你的`DengjiChaotuo`模块中的某个方法(比如一个专门处理清零的方法),或者直接写清零逻辑。
3. 在Lua模块中实现这个清零方法。
这里给你一个修改后的示例:
首先,在QF脚本中添加:
```lua
[@resetday]
#ACT
-- 调用Lua模块的跨天清零方法
LuaCall DengjiChaotuo:onResetDay("<$USERID>")
```
然后,修改你的`DengjiChaotuo.lua`,增加一个`onResetDay`方法:
```lua
function DengjiChaotuo:onResetDay(actor)
-- 获取玩家今天的超脱次数
local todayCount = GetInt(0, actor, self.varName) or 0
if todayCount > 0 then
-- 获取当前等级
local curLv = getbaseinfo(actor, 6)
-- 等级减去今天所有超脱次数
local resetLv = curLv - todayCount
if resetLv < 1 then
resetLv = 1
end
-- 恢复等级
setbaseinfo(actor, 6, resetLv)
-- 清空今天次数
SetInt(0, actor, self.varName, 0)
release_print("【零点自动重置】玩家" .. actor .. "等级已恢复原始值")
-- 给玩家发送提示消息
sendmsg(actor, "已到达零点,等级超脱次数已清零,等级已恢复。", 1)
end
end
```
最后,你原来`ChaoTuo`函数里关于零点重置的那一大段判断逻辑就可以**完全移除**了,因为它只会在点击时生效,现在由`resetday`事件接管。你的`ChaoTuo`函数可以更专注于处理消耗检查、增加等级和更新次数。
**核心要点:**
* `resetday`事件是引擎在每天零点(服务器时间)为所有在线玩家触发的,是实现“自动”行为的关键。
* 将清零和等级回退的逻辑放在这个事件触发的函数里,就能确保不需要玩家任何操作,在零点自动完成。
这样修改后,玩家在零点时,无论是否在线,只要触发了`resetday`,他的超脱次数就会自动清零,等级也会相应回退,实现你要的效果。
如果还有哪里不明白,随时问我,或者去请教我师傅浮生梦尊者!
← 返回问答库