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

【数据存储】NPC 商店:库存管理与限时补货

2026-09-22 21:07 作者:996 技术组 0 阅读 数据存储

实战应用:用在哪里

NPC 商店不是无限的货架:限量的技能书、每日的补给药水、节日限定的坐骑碎片——库存与补货的管理让商店有了运营的节奏。商店的存储要点是库存的原子扣减、补货的周期与限购的维度。

库存的扣减

lua

---NPC 商店:限量商品的购买
function Shop.buy(actor, goodsId)
    local player = class(actor)
    if not player then return false end
    local g = Shop.goods[goodsId]
    if not g then return false end
    -- 限量商品的库存校验
    if g.limit and g.stock <= 0 then
        sendmsg(actor, 1, "今日已售罄,请明日再来")
        return false
    end
    -- 限购:单账号的日限
    local buyKey = "ShopBuy_" .. goodsId .. "_" .. os.date("%Y%m%d")
    local bought = tonumber(getplayvar(actor, 2, buyKey)) or 0
    if g.perDay and bought >= g.perDay then
        sendmsg(actor, 1, "该商品每日限购 " .. g.perDay .. " 件")
        return false
    end
    if not checkitemw(actor, "金币", g.price) then
        sendmsg(actor, 1, "金币不足")
        return false
    end
    takeitem(actor, "金币", g.price, 0, "购买 " .. g.name)
    if g.limit then g.stock = g.stock - 1 end
    setplayvar(actor, "HUMAN", buyKey, bought + 1, 1)
    giveitem(actor, g.name, 1)
    sendmsg(actor, 1, "购买成功:" .. g.name)
    return true
end

商品的两种限制并行:全服的限量(库存共享,卖完即止)与个人的日限(每账号每日 N 件)——限量的稀缺是全服的竞争,限购的公平是账号的约束。购买的事务四步:库存或限购的校验、金币的扣取、库存与限购的记账、物品的发放,顺序的颠倒任何一步都是漏洞。商店的货架分常驻与限时:常驻的货架无限量(药水、卷轴),限时的货架靠库存与补货制造稀缺。

补货的周期

lua

---限时货架的补货:每日零点回满
setontimerex(112, 60)
function Shop.restock()
    local hm = os.date("%H%M")
    if hm ~= "0000" then return end
    for _, g in pairs(Shop.goods) do
        if g.limit and g.daily then
            g.stock = g.dailyStock
        end
    end
    Ops.log("商店限时货架补货完成")
end

补货的周期按货架的类型定:每日回满的货架(限量的技能书每日 10 本)、每周回满的货架(稀有的坐骑碎片每周 3 个)、绝不回满的绝版货架——补货的节奏是稀缺的时间维度。补货的播报让玩家知道上架的时刻:限量的技能书每日零点上架,蹲点的玩家形成购买的习惯时刻。售罄的即时呈现与库存的快照推送让货架的数字可信,超发的每一种可能都被原子扣减堵住。

验证与监控

库存的账实核对:销售流水加剩余库存等于投放总量,每日验一次等式;限购的拦截统计与购买的成功率对照,限购的维度是否被绕过看数据。

踩坑记录

库存的扣减曾经与校验分离,并发购买超发了 3 本限量书,临界区的互斥修复。限购的键曾经没带日期,跨日不清零,日期键的完整性补齐。补货的时刻曾经与日常重置同一秒,两个批量任务撞车拖慢彼此,错峰到 00:02。

上线要点

货架的商品、限量的档位与补货的周期进配置,运营的活动节奏自控。售罄的界面标注明日补货的时刻,等待的预期管理。限购的维度与黑市、礼包的限购体系统一,全服的限购语义一致。

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

作者履历与出处

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

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

工具链

【工具链】风格检查器:Lua 脚本命名与规范的自动审查

实战应用:用在哪里 脚本的规范靠人盯盯不过来:命名风格漂移、全局变量乱用、缩进混着来——风格检查器把这些规则的执行自动化。提…

2026-09-22 22:32 996 技术组 · 0 阅读
界面UI

【界面UI】拍卖行界面:出价流程与截拍提醒

实战应用:用在哪里 拍卖行的出价是一场与时间的博弈:出价的按钮、倒计时的紧迫、截拍瞬间的悬念——拍卖界面的要点是出价的流程、…

2026-09-22 21:12 996 技术组 · 0 阅读
框架设计

【框架设计】幸运值机制:强化失败的隐性补偿

实战应用:用在哪里 强化连败七次是什么体验?幸运值机制给失败的玩家一个隐性的承诺:每次失败累加幸运值,幸运值越高下一次的成功…

2026-09-22 21:12 996 技术组 · 0 阅读
安全加密

【安全加密】日志防篡改:哈希链与异地备份

实战应用:用在哪里 审计日志的价值在于不可抵赖:被改过的日志比没有日志更危险——纠纷的追溯、内部的追责都建立在「日志没被动过…

2026-09-22 21:12 996 技术组 · 0 阅读
性能调优

【性能调优】批量邮件:活动奖励的分批投递

实战应用:用在哪里 活动结束给 3 万玩家发奖励:一次性群发让邮件表瞬间多 3 万行、投递的队列堵塞正常的通信。批量邮件的分…

2026-09-22 21:12 996 技术组 · 0 阅读
网络通信

【网络通信】面对面交易:握手、锁定与确认的协议

实战应用:用在哪里 面对面的交易是传奇最经典的交互:两人面对面、各自放入物品与金币、双方确认后成交。交易的协议要点是会话的建…

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