排行榜的实时榜单只能看到“现在”,但运营与玩家都需要“过去”:上周的战力榜前十是谁、上个月的财富榜曲线怎么走。快照的历史归档让榜单可以按周回放,荣誉的追溯与运营的分析都有了数据底座。
---每周一零点归档上周榜单
function boardArchiveWeekly()
local week = os.date("%Y_W%W", os.time() - 7 * 86400)
for name, board in pairs(BOARDS) do
local snap = {
week = week, name = name,
top50 = { table.unpack(board.list, 1, 50) },
at = os.time(),
}
QF_PersistJson("board_archive_" .. name .. "_" .. week, snap)
end
end
归档在每周一零点触发,截取榜单前 50 名连同时间戳写入归档文件。归档的文件按榜单名加周号命名,查询接口按周号检索,历史荣誉的页面按周切换展示。快照的写入是原子替换,归档过程中榜单的实时更新不受影响。
---查询某周某榜单的前十
function boardHistory(name, week)
local snap = QF_LoadJson("board_archive_" .. name .. "_" .. week)
if not snap then return {} end
local out = {}
for i = 1, math.min(10, #snap.top50) do
out[i] = { rank = i, id = snap.top50[i].id, score = snap.top50[i].score }
end
return out
end
历史查询返回前十的完整信息,玩家查询自己的历史最高排名也从归档取数。归档的保留期两年,两年的荣誉历史足够覆盖一届玩家的完整生命周期。归档的数据同时推送给官网的名人堂页面,游戏内的荣誉与站外的展示同源。
归档任务的执行成功率监控,漏归档的周自动从实时榜单补拍快照。
归档的周号计算在跨年周出错(W1 与 W53 的边界),跨年周的归档文件名加年份前缀后唯一。快照的玩家名曾经存的是 ID,名人堂页面显示一串数字,归档时冗余存储名字与头像字段,展示层不再二次查询。
归档的触发避开整点的重置高峰,错峰到零点过 10 分执行。历史查询的接口给官网与小程序开放只读权限,荣誉数据的复用场景超出游戏内的预期。快照的清理策略:两年前的归档压缩转冷存储,荣誉的数据永久但存储分层。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 沃玛教主血量每降一档触发一次全服播报,播报逻辑散在伤害结算里,改一条文案翻三个文件。时间轴框架把阶段播报…
实战应用:用在哪里 金位摊位成了稀缺资产,私下转让滋生倒卖。过户系统把转让收编:双方确认、缴纳成交价一成的过户费、转让后原主…
实战应用:用在哪里 师门积分商店的热门商品每周限购两件,限购状态跨周重置的口径必须稳:本周已购几件、下周何时刷新、补签周怎么…
实战应用:用在哪里 练级区怪物密度是玩家口碑的晴雨表:太密抢怪打架,太稀挂机空转。密度动态平衡机制把刷新倍率做成运营参数,按…
实战应用:用在哪里 新玩家不知道安全区边界在哪,迈出一步被野怪围殴,第一印象直接崩坏。边界警示方案:接近安全区边界时地面浮现…
实战应用:用在哪里 自动寻路省心但让玩家成了观光客,手动跑图自由却容易迷路。追踪切换方案:任务追踪面板提供自动与手动两种模式…