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

【引擎触发】setday:每日重置与签到刷新

2026-09-21 18:44 作者:996 技术组 引擎触发

实战应用:用在哪里

日常玩法的心跳是每天的零点:签到刷新、副本次数清零、行会周任务换周——setday 触发在玩家每天首次登录时启动,resetday 兜住零点在线不 logout 的玩家,两兄弟合起来覆盖全部人的跨天时刻。

每日的刷新

lua

---setday: 每天登录触发 actor:玩家名(字符串)
function setday(actor)
    local player = getplayerbyname(actor)   -- 字符串转玩家对象
    if not player then return end
    local today = os.date("%Y%m%d")
    -- 签到的日键按天换新,昨日标记自然失效
    setplayvar(player, "HUMAN", "SignDay", today, 1)
    sendmsg(player, 1, "新的一天开始了,记得签到与日常!")
    -- 每日副本次数清零
    setplayvar(player, "HUMAN", "DungeonCount", 0, 1)
end

---resetday: 跨天在线的玩家也会触发
function resetday(actor)
    local player = getplayerbyname(actor)
    if not player then return end
    sendmsg(player, 1, "已为您刷新每日任务与副本次数")
    setplayvar(player, "HUMAN", "DungeonCount", 0, 1)
end

setday 在每天首次登录触发,resetday 让零点还在线的玩家同样吃到刷新——深夜挂机的玩家若只有 setday,他的日常要等到重新登录才刷新,resetday 补上这个洞。两个触发的动作保持同源:刷新的逻辑抽成一个函数,两处调用同一份,日常的规则不会两套。

签到的消费

lua

---签到:日键幂等,连签奖励
function Sign.daily(actor)
    local player = getplayerbyname(actor)
    if not player then return false end
    local today = os.date("%Y%m%d")
    if (getplayvar(player, 2, "SignDay") or "") == today then
        sendmsg(player, 1, "今日已签到")
        return false
    end
    setplayvar(player, "HUMAN", "SignDay", today, 1)
    local streak = tonumber(getplayvar(player, 2, "SignStreak")) or 0
    setplayvar(player, "HUMAN", "SignStreak", streak + 1, 1)
    -- 连签 7 天给大奖
    if (streak + 1) % 7 == 0 then
        giveitem(player, "连签宝箱", 1)
        sendmsg(player, 1, "连签 7 天,连签宝箱已发放!")
    else
        giveitem(player, "签到礼包", 1)
    end
    return true
end

签到与 setday 的刷新共用日键:setday 把 SignDay 清成新的一天,签到的幂等判断日键是否等于今天——刷新与消费的时间键同源,签到不会在跨天的边界重复或漏发。连签的计数独立于日键,断签清零的规则按补签卡的消费豁免。日常的重置清单逐项过:副本次数、每日任务、行会周进度(周键另算)、商城限购,每一项的刷新都登记在 setday 的清单里,新增日常时清单是检查表。

验证与监控

setday 与 resetday 的触发量按日统计,触发数应约等于日活;跨天时刻的在线玩家重置覆盖率抽检,漏刷的玩家样本即触发链的 Bug。

踩坑记录

setday 的触发曾经在玩家挂机两天不 logout 时丢失,零点在线的玩家日常没刷新,resetday 的补位触发修复。日键的时区曾经按 UTC 算,晚八点就跨了天,东八区的基准统一。签到与刷新的日键曾经两套格式,一份带年一份不带,跨年翻车后统一成一个生成函数。

上线要点

日常的重置时刻可配:活动服可改零点为早六点,重置的基准随配置走。补签卡的机制与连签的规则公示,签到的账目玩家自己能算清。日常的重置清单进版本验收,新日常上线先过跨天测试。

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

作者履历与出处

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

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

玩法策划基金成长

【玩法策划】基金系统:成长基金的节点返利玩法设计

实战应用:用在哪里 付费玩家的付费点集中在商城,成长线里缺一个长期投入的钩子。成长基金让玩家在低等级时一次性买入,随等级提升…

2026-09-23 02:55 996 技术组
玩法策划联赛竞猜

【玩法策划】行会联赛竞猜:比赛竞猜与竞猜币的玩法设计

实战应用:用在哪里 行会联赛打得不热闹,观战人数不到参赛人数的一半。联赛竞猜给观战者一张入场券:用竞猜币押注胜负,赔率随投注…

2026-09-23 02:55 996 技术组
案例复盘限时活动配置

【案例复盘】活动提前结束:限时活动提前关闭的事故复盘

实战应用:用在哪里 七夕限时活动原计划七天,上线第二天下午整点活动面板突然关闭,奖励领了一半,玩家以为被砍了福利,两小时内工…

2026-09-23 02:55 996 技术组
运维发布证书续期

【运维发布】证书续期:HTTPS 证书的自动提醒与登记机制

实战应用:用在哪里 HTTPS 证书过期一次,全服登录白屏了半个多小时,值班才发现证书没人管。证书续期机制把到期日写进系统变…

2026-09-23 02:55 996 技术组
界面UI堆栈返回

【界面UI】界面堆栈管理:页面返回的正确次序

实战应用:用在哪里 从行会面板点进成员列表再点开个人名片,连按返回键直接退回了主城,中间两层界面全部跳过。界面堆栈管理用一张…

2026-09-23 02:55 996 技术组
前端接口商城倒计时

【前端接口】商城橱窗:限时商品的上架倒计时实现

实战应用:用在哪里 限时商城的稀缺商品上架即被抢,玩家错过窗口感觉被区别对待。商城橱窗把每件限时商品的下架时间做成可视化倒计…

2026-09-23 02:55 996 技术组