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

【后端接口】摆摊系统:离线挂单与自动结算

2026-09-21 17:46 作者:996 技术组 0 阅读 后端接口

实战应用:用在哪里

摆摊是传奇的市井烟火:盟重土城摆一排小摊,人下线了摊还在卖。离线摆摊的引擎实现要点是挂单的数据托管、售卖的自动结算与摊位的经济成本——摊位费的定价直接决定土城的摊位密度。

挂单的托管

lua

---上架:扣摊位费,物品转托管
function Stall.list(actor, makeIndex, price)
    local n = tonumber(getplayvar(actor, 2, "StallCount")) or 0
    if n >= 20 then
        sendmsg(actor, 1, "摊位最多挂 20 件")
        return false
    end
    if not checkitemw(actor, "金币", 20000) then
        sendmsg(actor, 1, "摊位费不足,需 2 万金币")
        return false
    end
    takeitem(actor, "金币", 20000, 0, "摊位费")
    setplayvar(actor, "HUMAN", "Stall_" .. n, makeIndex .. ":" .. price, 1)
    setplayvar(actor, "HUMAN", "StallCount", n + 1, 1)
    sendmsg(actor, 1, "上架成功,摊位费 2 万金币已收")
    return true
end

上架的上限 20 件,摊位费 2 万金币按次收取——摊位的稀缺性由定价调节,土城的黄金摊位是行会与散户的必争之地。物品按唯一 ID 转入托管态,挂单数据与价格写进持久变量,玩家下线摊位照常营业。挂单的名字与价格在客户端的摊位界面浏览,购买的请求走交易行的成交通道复用。

售卖的结算

lua

---自动结算:每 30 分钟扫一次成交
setontimerex(74, 1800)
function Stall.settle(actor)
    local n = tonumber(getplayvar(actor, 2, "StallCount")) or 0
    local earned = 0
    for i = 0, n - 1 do
        local slot = "Stall_" .. i
        local v = getplayvar(actor, 2, slot)
        if v and Stall.sold(v) then
            local price = tonumber(v:match(":(%d+)$")) or 0
            earned = earned + math.floor(price * 0.95)
            setplayvar(actor, 2, slot, "", 1)
        end
    end
    if earned > 0 then
        sendmail(actor:GetUserId(), 8006, "摆摊结算",
            "您的摊位售出商品,扣除 5% 手续费",
            "金币|" .. earned)
    end
end

成交的记录由购买的结算通道写入,自动结算每 30 分钟把售出件的货款按 95% 折算后用 sendmail 邮寄,5% 的手续费是交易行的同源费率。邮件的投递让离线卖家的收入睡后到账,摊位的体验形成正循环,睡觉时也在赚钱。下架的物品原路退回背包,未成交不退摊位费——成本的沉没让挂单的定价认真起来。

验证与监控

摊位的挂单量与成交率的统计,土城摊位区的在线密度与摊位数联动扩容;结算邮件的金额与成交流水对账。

踩坑记录

摊位费的扣取曾经在上架校验失败时也执行,先验后扣的顺序统一到全部消耗类玩法。成交标记曾经与结算的扫描竞态,售出件被结算两次,标记的原子读写修复。摊位区的浏览请求曾经全量拉取,千人摆摊的列表让网关喘不过气,浏览按视野分页加载。

上线要点

摊位费与挂单上限进配置,新手村免费摊位三个吸引第一笔交易。摊位的搜索按物品名与价格区间过滤,买家的效率就是成交率。摆摊的税入沙巴克城主的口袋,主城的商业繁华与攻城的利益直接挂钩。

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

作者履历与出处

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

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

玩法策划沙巴克税收

【玩法策划】沙城税务官:税收分配与廉政度的玩法设计

实战应用:用在哪里 沙巴克占领行会坐收税收却只进不出,非占领行会的玩家心里不平衡。税务官玩法把税收做成明账:占领行会对摆摊与…

2026-09-23 01:24 996 技术组 · 0 阅读
玩法策划比武社交

【玩法策划】比武招亲:比武切磋与社交绑定的玩法设计

实战应用:用在哪里 高端玩家婚姻系统只有仪式没有过程,社交绑定缺一个高光事件。比武招亲做成擂台玩法:擂主设擂摆彩头,攻擂者报…

2026-09-23 01:24 996 技术组 · 0 阅读
案例复盘限时礼包日期

【案例复盘】限时礼包少发一天的事故复盘

实战应用:用在哪里 开服七日限时礼包发到第六天断了粮,9 月 1 日当天领奖按钮灰的,投诉当天破千。事故根因是一条数字日期循…

2026-09-23 01:24 996 技术组 · 0 阅读
网络通信心跳假在线

【网络通信】心跳探测:半开连接的主动识别

实战应用:用在哪里 玩家拔线不退游戏,连接半开着,人不在指令也没有,在线数虚高,容量预案被假数据带着跑。心跳探测给每个在线玩…

2026-09-23 01:24 996 技术组 · 0 阅读
运维发布发布日历

【运维发布】发布日历:全月变更的集中排期

实战应用:用在哪里 周三发了合成系统补丁,周四又改强化概率,两条变更叠加后玩家分不清是哪个改出来的。发布日历把全月变更集中排…

2026-09-23 01:24 996 技术组 · 0 阅读
Lua实战滑动窗口计数

【Lua实战】时间窗口计数:滑动窗口的环形数组实现

实战应用:用在哪里 容量预案需要知道滚动一小时的副本进入峰值,而不是全天累计。滑动窗口用 60 个槽位每槽记一分钟的进入数,…

2026-09-23 01:24 996 技术组 · 0 阅读