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:35:59 |
👁️ 阅读: 7
我是lua后端老师!
小仙,看了你的代码,主要问题出在零点跨天时的逻辑处理上。你的`syncData`函数只在打开面板时调用,如果在零点时面板已经打开,里面的数据就不会被刷新,导致后续点击按钮时,判断用的`count`还是旧值,所以会继续叠加。
根据你的需求,应该在**每次点击超脱按钮时**,都先检查一次天变量,确保数据是最新的。修改你的`ChaoTuo`函数,在开始逻辑前先调用一次同步逻辑来刷新数据。
以下是修改后的`ChaoTuo`函数核心部分:
```lua
function DengjiChaotuo:ChaoTuo(actor, data)
-- 在开始任何操作前,先同步一次数据,确保count和天变量状态是最新的
-- 这里不显示UI,只做数据刷新
self:syncData(actor, false)
local cfg = self._cfg[1]
local cost = cfg.cost or {}
local level = data
-- 重新获取刷新后的天变量值(可选,用于打印日志)
local dayAddNum = GMLib:getObjTLInt(actor, self.dayVar)
release_print("点击按钮时,当前等级超脱天变量值:", dayAddNum)
-- 获取同步后的当前超脱次数
local count = GetInt(0, actor, self.varName) or 0
-- 检查是否达到上限
if count >= self.maxChaotuo then
Msg.richMsg(actor, "已达到最高超脱次数(" .. self.maxChaotuo .. "次),无法继续超脱!")
return
end
-- 检查消耗
if not GMLib:checkItems(actor, cost, 0, 1) then
return
end
-- ... 后续扣除材料、增加等级、更新次数的代码保持不变 ...
-- 记得在更新次数后调用 self:updateUI(actor, count) 更新界面显示
end
```
**关键点:**
1. 在`ChaoTuo`函数开头调用 `self:syncData(actor, false)`,目的是执行`syncData`里跨天清零的逻辑,但不触发`initUI`(避免UI冲突)。
2. 这样无论玩家何时点击按钮,都会先判断是否跨天,如果跨天了就会先执行`count`清零和等级恢复,然后再进行新的超脱计算。
3. 你的`syncData`函数本身逻辑是对的,只是调用时机需要增加。
这样修改后,无论玩家是否在零点时打开着NPC面板,点击超脱按钮的行为都会是正确的。如果还有不明白的,随时可以再问我,或者请教浮生梦尊师!
← 返回问答库