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

【进阶实战】补偿发放失误:重复补偿的追回流程封装

2026-09-25 06:46 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本进阶实战996引擎Lua补偿追回发放失误

业务场景

一次故障补偿多发了一倍(配置的补偿份数错了),发现时已有 3000 名玩家领取——直接负数扣回会引发二次投诉,不追回则是 3000 份的资产多投。补偿追回封装:追回不走负数直扣,走"确认函加分期收回"的流程:先发说明函告知多发与收回计划,再从后续产出中分期冲抵,玩家的资产体验不被粗暴打断。

核心实现

追回单与分期冲抵:确认函、分期扣减、结清标记。示例代码如下:

lua
local function createRecovery(actorName, total, mailId)
    local actor = getplayerbyname(actorName)
    setplayvar(actor, "HUMAN", "Recovery_" .. mailId,
        total .. "|0|recovering", 1)
    sendmail("#" .. actorName, 0, "补偿调整说明",
        "因发放调整,超额部分将从后续收益中分期收回,每日最多扣减 20%。", "")
end
local function recoverDaily(actorName, mailId, dailyGain)
    local actor = getplayerbyname(actorName)
    local rec = getplayvar(actor, "HUMAN", "Recovery_" .. mailId) or ""
    if rec == "" or string.find(rec, "done", 1, true) then
        return
    end
    local total, paid = string.match(rec, "^(%d+)|(%d+)|")
    local owe = tonumber(total) - tonumber(paid)
    local take = math.min(math.floor(dailyGain * 0.2), owe)
    if take <= 0 then
        return
    end
    paid = tonumber(paid) + take
    if paid >= tonumber(total) then
        setplayvar(actor, "HUMAN", "Recovery_" .. mailId,
            total .. "|" .. total .. "|done", 1)
    else
        setplayvar(actor, "HUMAN", "Recovery_" .. mailId,
            total .. "|" .. paid .. "|recovering", 1)
    end
end

追回进度查询示例代码如下:

lua
local function queryRecovery(actorName, mailId)
    local actor = getplayerbyname(actorName)
    sendmsg(actor, 1, "追回进度:" ..
        (getplayvar(actor, "HUMAN", "Recovery_" .. mailId) or "无"))
end

接口拆解

Recovery_邮件号 记录应收回总额、已收回额与状态三段。recoverDaily 从玩家当日收益中按 20% 上限冲抵——从增量扣而非从存量扣,不动玩家已有资产。paid 达到 total 即置 done 结清。追回前先发说明函告知规则,玩家知情是追回合法性的前提。

踩坑记录

补偿追回踩过三个坑:一是从玩家存量直接负扣,玩家用掉多发部分后余额变负,引发更大投诉——改为从后续产出按比例冲抵后投诉归零;二是追回在多个收益入口重复执行(打怪与任务各扣一次 20%),冲抵入口要统一收口每天一次;三是结清状态没有落库标记,日冲抵逻辑每天重复执行到永久,done 标记必须落库且优先检查。

作者履历与出处

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

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

高级技巧996引擎

【高级技巧】Lua敏感词扫描:沙巴克喊话的词表命中统计

一、抛坑提问:封禁词 80 个,逐个替换要扫 80 遍正文,命中次数还全丢——一次遍历配合词表命中统计,命中几个词、各命中几…

2026-09-26 14:17 996 技术组 · 0 阅读
入门夯实996引擎

【入门夯实】Lua背包容量:裁决之杖入包前的空位校验

一、一行代码拆解:if BAG = CAP then return false end —— 入包前先查空位的容量闸:格子满…

2026-09-26 14:17 996 技术组 · 0 阅读
入门夯实996引擎

【入门夯实】Lua两段判定:祖玛教主掉落的先稀有度再物品

一、抛坑提问:掉落表 200 个物品权重排到眼花——先掷"掉不掉、掉哪个稀有度",再在该稀有度池里抽物品,两段判定让每张表都…

2026-09-26 14:17 996 技术组 · 0 阅读
高级技巧996引擎

【高级技巧】Lua合击窗口:烈火剑法双人连招的时间容差

一、抛坑提问:两名队员 0.5 秒内先后命中才算"合击"触发额外伤害——命中时间戳各自独立,怎么判定够近?用后发命中时间减先…

2026-09-26 14:17 996 技术组 · 0 阅读
策划架构996引擎

【策划架构】Lua登出保存:组队结算数据的离线落库钩子

一、线上事故:组队结算页开着时玩家掉线,内存里的待领奖数据直接蒸发,3 小时收到 170 条丢失反馈;登出钩子把未决数据统一…

2026-09-26 14:17 996 技术组 · 0 阅读
入门夯实996引擎

【入门夯实】Lua堆叠合并:仓库同物叠加的计数归并

一、抛坑提问:背包里 4 组"金创药×30"占 4 格,为什么不能叠成一格 120 瓶?按物品 id 归并计数,同 id 累…

2026-09-26 14:17 996 技术组 · 0 阅读