运营复盘要回答每天零点的在线人数、祖玛教主是否存活、开区天数三个数,临时翻日志经常对不齐。定时快照每天 00:05 固化一组运营指标,按日期存键,保留 90 天,复盘直接取数。三个数写进周报只需一次区间查询,运营自助取数后数据类临时工单少了一多半。快照键按日期命名,与流水表天然对齐,跨系统核对不再需要人工换算口径。
全局定时器每 60 秒醒一次,到点采集:grobalinfo(6) 取全服在线数,grobalinfo(1) 取开区天数,getmoncount 核对世界 BOSS 存活,拼串写入带日期后缀的系统变量并落盘。
setontimerex(122, 60)
function ontimer122()
if os.date("%H%M") ~= "0005" then return end
local day = os.date("%Y%m%d")
local line = grobalinfo(6) .. "|" .. grobalinfo(1) .. "|" .. getmoncount("祖玛教主")
setsysvarex("SNAP_" .. day, line, 1)
end
按日期区间拉快照拼周报,日期当数字逐日推进,无效日期查不到键自动跳过;91 天前的键置空回收,防止变量表无限膨胀。采集动作本身很轻:三个接口调用加一次拼串,60 秒一轮的开销可以忽略。
function querySnap(fromDay, toDay)
local lines = {}
local t = fromDay
while t <= toDay do
local v = getsysvar("SNAP_" .. t)
if v ~= nil and v ~= "" then
table.insert(lines, t .. " " .. v)
end
t = t + 1
end
return table.concat(lines, "\n")
end
function cleanSnap(today)
local edge = today - 91000000
for i = 1, 5 do
setsysvarex("SNAP_" .. (edge - i * 10000), "", 1)
end
end
跨月日期段查询核对完整性,缺键跳过不报错;91 天过期样本核对清理后键为空;快照值与手工查询的在线数逐项比对,误差为零。监控每日快照是否生成,00:06 仍无当日新键即告警。查询接口按一周区间跑一次全量导出,与逐日手工记录核对,七行全对才算过关。
采集点放在 00:05 而不是 00:00,零点重置流程写一半的在线数最初被快照固化过,复盘拿到的第一天数据全是错位值。setsysvarex 的落盘参数漏给过,重启后一周快照蒸发,补了持久化标记才稳。日期当数字递增跨月会扫出 20260932 这类无效日,键不存在直接跳过,一次多查几十次可以接受,没有必要引入日期库。祖玛教主存活位被运营当成生态指标盯着,实际它更多反映重置脚本是否正常,解读时要分清含义。cleanSnap 每轮只清五个键是有意为之,把删除摊薄到多轮定时器里,避免零点后集中清理造成变量表抖动。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 装备回收商 NPC 每天按评分收购玩家的装备,裁决之杖、骨玉权杖按攻击、持久加权打分,榜上只要前五名。数…
实战应用:用在哪里 沙巴克攻城是全服行会战的最高舞台:攻方砸开城门、抢占皇宫,守方依托城墙与复活点反打。规则设计的关键是节奏…
实战应用:用在哪里 影分身玩法给法师职业补上生存短板:危急时刻召唤四个影分身分担仇恨,敌人需要在六格范围内分辨真身,猜错就浪…
实战应用:用在哪里 组队邀请、行会宣战这类关键信令丢了没有兜底,玩家只能反复手点,高峰期体验很差。重试机制给信令加确认回执:…
实战应用:用在哪里 新资料片上线首日预约量常是日常十倍,一口气全开会让数据库与登录网关同时过载。滚动开区把开区动作排成队列:…
实战应用:用在哪里 百人同屏的沙巴克外围战场,每个玩家每秒跑动会触发数次位置更新,全部即时下发时广播量随人数平方增长,网关先…