CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
Lua实战

【Lua实战】os.time 与时区:跨服活动时间对齐

2026-09-21 13:21 作者:996 技术组 0 阅读 Lua实战

实战应用:用在哪里

跨服活动的开场时间以服务器本地时区为准:主服在东八区、跨服节点在 UTC 时区时,同一条 os.time 配置会在两台机器上差出 8 小时。跨服攻城、全服 BOSS 的定时开场,时间的基准统一是跨服功能的前置课。

时区的坑与统一基准

lua

---活动开场判断:统一用东八区基准
local OFFSET = 8 * 3600
function Sched.utc8Now()
    return os.time() + OFFSET + os.difftime(os.time(), os.time(os.date("!*t")))
end

---本地时间字符串换算为东八区时间戳
function Sched.parse(h, m)
    local t = os.date("*t", Sched.utc8Now())
    local base = os.time({ year = t.year, month = t.month, day = t.day,
        hour = h, min = m, sec = 0 })
    return base
end

os.time() 返回的秒数本身与时区无关,坑在 os.date 的本地化解析:同一张活动表在两台机器上解析出不同的时间戳。统一基准的做法是把所有配置时间先换算成东八区时间戳再比较,Sched.parse 输出的时间戳在任何时区的机器上含义一致。

开场的调度与预告

lua

---全局定时器 23 号:每 5 秒检查活动开场
setontimerex(23, 5)
function Sched.onTick()
    local now = os.time()
    for _, act in ipairs(ACT_LIST) do
        if not act.opened and now >= act.openAt then
            act.opened = true
            Sched.launch(act)
        elseif not act.notified and now >= act.openAt - 300 then
            act.notified = true
            Sched.broadcast(act, "将于 5 分钟后开启")
        end
    end
end

全局定时器每 5 秒扫描活动表:开场前 300 秒发全服预告,到点即开场。跨服攻城的 20:00 开场在两个集群的日志里必须落在同一秒,时区统一后偏差从 8 小时归零到 1 秒内。活动的状态标志进服务器级变量而非单服内存,合服与重启后的状态可恢复。

验证与监控

两套集群的开场时间戳差值监控,超过 3 秒告警;预告触达人数与实际入场人数的转化率周报。

踩坑记录

os.difftime 的参数顺序曾经写反,偏移量变成负 8 小时,活动提前一天开场惊动全服,参数顺序修正后基准函数加了双向断言。夏令时地区的日志时间让人误判故障时段,日志统一记东八区加 UTC 双份后排查效率恢复。跨天活动用 os.date 取日分组,曾经按 UTC 日分组导致奖励重置点漂移,分组键统一改东八区日期。

上线要点

所有活动配置表的时间字段注明时区,装载时按东八区归一化。跨服活动的时间戳以跨服节点的广播为准,各分服只跟随不自行判断,双基准并存比单一错误更难排查。时区的单元测试覆盖三个用例:UTC 机器、东八机器、手工改小时的机器,三者解析同一配置必须得到同一时间戳。

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

玩法策划远征编制

【玩法策划】跨服远征编制:借鉴MMO远征的分层推进方案

实战应用:用在哪里 跨服远征分先锋、主力、后勤三队独立推进,三线全通合围BOSS。不同战力成员都有参与感。 策划要点与配置 …

2026-09-22 21:15 996 技术组 · 0 阅读
案例复盘副本难度

【案例复盘】副本超时惩罚倍率复盘

实战应用:用在哪里 副本限时挑战加入超时血量惩罚:超时后BOSS攻击递增。上线后BOSS攻击叠到十倍秒杀全队。 事故还原与补…

2026-09-22 21:15 996 技术组 · 0 阅读
界面UI神兽特效

【界面UI】混沌麒麟入场特效:神兽召唤的三段演出设计

实战应用:用在哪里 混沌麒麟召唤是全服高光时刻:暗幕聚合、裂缝展开、麒麟着陆三段演出各1.3秒。 三段式入场演出编排 围观镜…

2026-09-22 21:15 996 技术组 · 0 阅读
前端接口任务回看

【前端接口】任务对话历史回看:对话记录的界面查询实现

实战应用:用在哪里 任务对话一闪而过玩家想回顾。回看接口把对话按节点存档,面板翻阅全部对话记录。 对话存档与查询渲染 当前章…

2026-09-22 21:15 996 技术组 · 0 阅读
引擎触发懒加载地图

【引擎触发】挂机地图按需激活:地图实例懒加载设计

实战应用:用在哪里 服务器承载六十张地图,空闲地图白耗资源。按需激活,末人离开后六十秒休眠。 激活与休眠触发 休眠回收 验证…

2026-09-22 21:15 996 技术组 · 0 阅读
Lua实战坐骑洗炼

【Lua实战】坐骑资质洗炼与锁定:资质系统的Lua实现

实战应用:用在哪里 坐骑资质洗炼随机重滚五条属性,锁定满意的条目不再重滚,锁定越多消耗越大。 洗炼与锁定 锁定消耗递增 验证…

2026-09-22 21:15 996 技术组 · 0 阅读