摆摊是传奇的市井烟火:盟重土城摆一排小摊,人下线了摊还在卖。离线摆摊的引擎实现要点是挂单的数据托管、售卖的自动结算与摊位的经济成本——摊位费的定价直接决定土城的摊位密度。
---上架:扣摊位费,物品转托管
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 转入托管态,挂单数据与价格写进持久变量,玩家下线摊位照常营业。挂单的名字与价格在客户端的摊位界面浏览,购买的请求走交易行的成交通道复用。
---自动结算:每 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 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 沙巴克占领行会坐收税收却只进不出,非占领行会的玩家心里不平衡。税务官玩法把税收做成明账:占领行会对摆摊与…
实战应用:用在哪里 高端玩家婚姻系统只有仪式没有过程,社交绑定缺一个高光事件。比武招亲做成擂台玩法:擂主设擂摆彩头,攻擂者报…
实战应用:用在哪里 开服七日限时礼包发到第六天断了粮,9 月 1 日当天领奖按钮灰的,投诉当天破千。事故根因是一条数字日期循…
实战应用:用在哪里 玩家拔线不退游戏,连接半开着,人不在指令也没有,在线数虚高,容量预案被假数据带着跑。心跳探测给每个在线玩…
实战应用:用在哪里 周三发了合成系统补丁,周四又改强化概率,两条变更叠加后玩家分不清是哪个改出来的。发布日历把全月变更集中排…
实战应用:用在哪里 容量预案需要知道滚动一小时的副本进入峰值,而不是全天累计。滑动窗口用 60 个槽位每槽记一分钟的进入数,…