排行榜的上榜奖励是排行的物质回报:按名次分档发放,前 10 名高档、前 50 名中档、参与奖保底。奖励的发放与补发机制确保每个上榜玩家都能收到奖励,补发的触发条件与幂等的标记防止重复发放。
---排行榜奖励的发放
function BoardReward.distribute(boardName, rankList)
local rewards = BOARD_REWARDS[boardName]
for i, rec in ipairs(rankList) do
if i <= rewards.maxRank then
local tier = math.ceil(i / rewards.tierSize)
local reward = rewards.tiers[tier]
sendmail(rec.id, 9001, boardName .. " 第" .. i .. "名奖励", "", reward.items)
rec.claimed = true
end
end
end
奖励的发放按名次分档:前 10 名一档、前 30 名二档、前 50 名三档,每档的奖励内容在配置表定义。发放的记录写入榜单快照,已发放的标记防止重复发放。奖励的发放走邮件通道,离线的玩家也能收到。
---补发:漏发的奖励自动补发
function BoardReward.checkMissed(boardName)
local snapshot = QF_LoadJson("board_archive_" .. boardName)
for _, rec in ipairs(snapshot.top50) do
local claimed = rewardClaims[rec.id]
if not claimed then
local tier = math.ceil(rec.rank / rewards.tierSize)
sendmail(rec.id, rewards.tiers[tier].items, "排行榜补发")
rewardClaims[rec.id] = true
end
end
end
补发的扫描每 5 分钟执行一次:对照快照与已发放标记,漏发的自动补发。补发的记录与原发放日志关联,同一玩家不会被重复补发。补发的优先级按名次排序,前 10 名的补发优先处理。
发放与补发的覆盖率对账:快照中每个上榜玩家的奖励状态(已发/已补/待查)三态标记。
奖励的补发曾经按快照的全量扫描,扫描的时间在榜单人数多时超过 5 分钟,增量扫描(只扫新增的)优化后可控。补发的邮件曾经缺失名次信息,玩家不知道自己排了第几,补发的邮件附上完整排名。
奖励的发放与补发的日志进排行榜的审计链,每一笔奖励都有发放记录与时间戳。奖励的配置与排行榜的结算联动:结算后自动触发发放与补发的流程。发放的失败重试机制:邮件发送失败的重试三次后转人工处理。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 行会建设需要资金,成员的投入却看不到回报。行会发展基金让成员按份投入行会基金,基金用于行会建设与集体活动…
实战应用:用在哪里 占领沙巴克后的日常维护靠几个人,城内挂机广告无人管,安全区成了法外之地。沙城巡逻队把城防日常做成排班玩法…
实战应用:用在哪里 行会仓库运营数月后杂物堆积:过期活动道具、低级材料、重复装备混杂在贵重物资之间。仓库整理接口按价值与用途…
实战应用:用在哪里 一次活动奖励少发,三名客服给出三种答复:补发、不补发、等通知。玩家把三张截图拼在一起发到论坛,一场本可善…
实战应用:用在哪里 玩家拥有多个称号,切换佩戴后效果不符预期又要来回换。称号预览在切换前展示佩戴效果:名字上方的称号样式、属…
实战应用:用在哪里 赤月巢穴的魔龙教主血量降至三成会进入狂暴:攻击翻倍、召唤赤月护卫、周期性释放全屏魔龙血域。狂暴触发把 b…