副本的重置分两层:每日重置(挑战次数、进度按业务日清零)与失败重置(团灭后回到入口重来)。两层重置混在一起实现是事故高发区——每日锚点没做对会出现"跨天进度残留",失败重置没做对会出现"重置后奖励重复领"。
local function checkDailyReset(progress, dungeonId)
local today = os.date("%Y-%m-%d")
if progress.date ~= today then
progress.date = today
progress.count = 0
progress.bossKilled = false
saveProgress(playerId, dungeonId, progress)
log("DUNGEON_RESET", playerId, dungeonId)
end
return progress
end
读取进度时惰性触发重置(比对日期串),不需要定时器全服扫描——每个玩家在自己的读取路径上完成重置,跨天边界的处理天然分散。
团灭重置按开启时的快照重建副本:怪物复活、机关复位、进度清零。快照在副本开启时生成(怪物清单、位置、状态),重置时逐项恢复。重置次数上限(如 3 次)计数在副本对象上,超限踢出并进入冷却(冷却期间不可再进)。
副本奖励的重复领取是重置机制最危险的事故。三道闸:进度字段置位(已领奖标志)在发放前检查;发放流水唯一键(玩家 id + 副本 id + 日期)数据库层去重;每日重置后进度清零同时清领奖标志。三道闸配合每日锚点,重置类客诉可以压到接近零。副本重置的日志(谁在何时重置了哪个副本)全部留痕,团本运营的每一次操作都有据可查。
重置的触发时机有讲究:惰性重置(玩家读取进度时比对日期)比定时全服扫描更省资源,且不会在凌晨集中触发大量写入。跨天瞬间的边界处理:23:59 开的副本在 00:01 结算,按开启时的日期锚点结算(属于昨天的那次挑战),锚点在副本开启时固化。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 脚本的规范靠人盯盯不过来:命名风格漂移、全局变量乱用、缩进混着来——风格检查器把这些规则的执行自动化。提…
实战应用:用在哪里 拍卖行的出价是一场与时间的博弈:出价的按钮、倒计时的紧迫、截拍瞬间的悬念——拍卖界面的要点是出价的流程、…
实战应用:用在哪里 强化连败七次是什么体验?幸运值机制给失败的玩家一个隐性的承诺:每次失败累加幸运值,幸运值越高下一次的成功…
实战应用:用在哪里 审计日志的价值在于不可抵赖:被改过的日志比没有日志更危险——纠纷的追溯、内部的追责都建立在「日志没被动过…
实战应用:用在哪里 活动结束给 3 万玩家发奖励:一次性群发让邮件表瞬间多 3 万行、投递的队列堵塞正常的通信。批量邮件的分…
实战应用:用在哪里 面对面的交易是传奇最经典的交互:两人面对面、各自放入物品与金币、双方确认后成交。交易的协议要点是会话的建…