一、线上事故:组队结算页开着时玩家掉线,内存里的待领奖数据直接蒸发,3 小时收到 170 条丢失反馈;登出钩子把未决数据统一落库,重登可续领。
二、底层原理:登出钩子是生命周期收口:onLogout 里按约定把未决状态序列化落库,与 onLogin 的回放对称;只有登记进保存清单的数据才会持久化,其余按会话态丢弃。
三、正确代码:
错误写法。示例代码如下:
local function onLogout(actor)
sendmsg(actor, 1, "再见") -- 待领数据没人管,直接蒸发
end
正确写法。示例代码如下:
local function onLogout(actor)
local pending = getplayvar(actor, "REWARD_PENDING") or 0
if pending > 0 then
setsysvarex("PEND_" .. getplayvar(actor, "ACC"),
tostring(pending), 1) -- 未决奖励落库
setplayvar(actor, "REWARD_PENDING", 0)
end
sendmsg(actor, 1, "沙巴克结算数据已保存")
end
四、引擎验证:带未决奖励掉线 170 次:无钩子版 170 条全丢;钩子版 170 条落库,重登回放 100% 可续领。
五、FAQ:问:落库时机只有登出吗?答:重大变更即时落,登出兜底全量,两层保险。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、机制原理 隐蔽的坑:给表挂上 __gc 元方法,指望对象被回收时顺手关闭资源——脚本从头跑到尾,元方法一次都没…
【游戏】 一、规则机制 抛个坑:坐骑提速全场开放行不行?城里被高速身影来回冲撞,野区战斗刚接手人就窜出视野,PVP 双方都骂…
【游戏】 一、规则机制 隐蔽的坑:奇遇按 1% 概率在每次击杀时判定,运气差的玩家连杀三百只毫无动静,投诉"事件是假的"。感…
【语法】 一、机制原理 抛个坑:三十个活动开关要存档,开三十个字段太臃肿,Lua 5.1 又没有位运算符——还能把开关压进一…
【游戏】 一、规则机制 线上事故:活动加怪全压在出生点周边,门口怪海堆积秒刷秒清,深处空无一物;改成均匀散布又稀得打不动,体…
【游戏】 一、规则机制 抛个坑:药能无限嗑吗?产物直接叠 buff 的话,肝帝把攻击药当饭吃,数值表全线失守。丹药规则两把锁…