日常玩法的心跳是每天的零点:签到刷新、副本次数清零、行会周任务换周——setday 触发在玩家每天首次登录时启动,resetday 兜住零点在线不 logout 的玩家,两兄弟合起来覆盖全部人的跨天时刻。
---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 补上这个洞。两个触发的动作保持同源:刷新的逻辑抽成一个函数,两处调用同一份,日常的规则不会两套。
---签到:日键幂等,连签奖励
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 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 付费玩家的付费点集中在商城,成长线里缺一个长期投入的钩子。成长基金让玩家在低等级时一次性买入,随等级提升…
实战应用:用在哪里 行会联赛打得不热闹,观战人数不到参赛人数的一半。联赛竞猜给观战者一张入场券:用竞猜币押注胜负,赔率随投注…
实战应用:用在哪里 七夕限时活动原计划七天,上线第二天下午整点活动面板突然关闭,奖励领了一半,玩家以为被砍了福利,两小时内工…
实战应用:用在哪里 HTTPS 证书过期一次,全服登录白屏了半个多小时,值班才发现证书没人管。证书续期机制把到期日写进系统变…
实战应用:用在哪里 从行会面板点进成员列表再点开个人名片,连按返回键直接退回了主城,中间两层界面全部跳过。界面堆栈管理用一张…
实战应用:用在哪里 限时商城的稀缺商品上架即被抢,玩家错过窗口感觉被区别对待。商城橱窗把每件限时商品的下架时间做成可视化倒计…