行会仓库是行会的公共钱柜:攻城的补给、打宝的收成、活动的奖品全放在里面,谁存了什么、谁取了什么,每一笔都要有账。共享仓库的实现要点是权限的分级、存取的原子与流水的审计。
---存入:职位校验后入库
function GuildRepo.deposit(actor, makeIndex)
local pos = getplayvar(actor, 2, "GuildPos")
if pos == nil or pos == "" then
sendmsg(actor, 1, "加入行会后才能使用仓库")
return false
end
local item = Repo.locate(actor, makeIndex)
if not item then return false end
if Repo.count() >= 200 then
sendmsg(actor, 1, "仓库已满 200 格")
return false
end
delitembymakeindex(actor, makeIndex)
Repo.add(item)
Repo.log(actor:GetName(), "存入", item:GetName())
sendmsg(actor, 1, "已存入 " .. item:GetName())
return true
end
仓库 200 格,权限按行会职位分档:普通成员只能存,堂主可取消耗品,会长与副会长可取全部。存入走 delitembymakeindex 摘除背包再入仓,两步在一个流程里完成,中断的半程由流水回滚。祖玛头像、沃玛号角的行会圣物另设圣物格,只进不出,圣物的归属是行会的脸面。
---取出的双重校验与流水
function GuildRepo.withdraw(actor, repoIdx)
local pos = getplayvar(actor, 2, "GuildPos")
if pos ~= "leader" and pos ~= "vice" then
sendmsg(actor, 1, "职位不足,无法取出")
return false
end
local item = Repo.peek(repoIdx)
if not item then return false end
if not giveitem(actor, item:GetName(), 1) then
sendmsg(actor, 1, "背包已满")
return false
end
Repo.remove(repoIdx)
Repo.log(actor:GetName(), "取出", item:GetName())
sendmsg(actor, 2, actor:GetName() .. " 从行会仓库取出了 " ..
item:GetName())
return true
end
取出的流程先给货再销账:giveitem 成功才移除仓库条目,背包满的取出原地不动。取出的动作用行会频道播报,仓库的大件去向全帮可见——公开是防腐最便宜的手段。流水记录四元组:谁、动作、物品、时间,审计的查询按行会与时间段过滤,仓库的账与游戏的物品流水每日核对,差额即漏洞的信号。合服的仓库合并按行会 ID 映射搬迁,两个仓库的圣物格冲突由会长谈判决定去留。
仓库的存量与流水的增减对账,差额告警;存取的频次按职位分布统计,越权尝试的计数进风控。
职位的判定曾经缓存了旧值,被撤职的副会长半小时后还能取件,职位的实时读取修复。存入的并发曾经超格,两个成员同秒塞满第 200 格,计数的原子校验补上。流水的查询曾经无索引,千行流水翻页拖垮行会面板,按时间与行会的联合索引治理。
仓库的格数与权限分档按行会等级成长:一级行会 100 格,五级行会 300 格。仓库的界面带流水页签,账目的透明就是行会的公信。圣物格的展示在行会驻地,祖玛头像的陈列是招新的活招牌。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 沙巴克占领行会坐收税收却只进不出,非占领行会的玩家心里不平衡。税务官玩法把税收做成明账:占领行会对摆摊与…
实战应用:用在哪里 高端玩家婚姻系统只有仪式没有过程,社交绑定缺一个高光事件。比武招亲做成擂台玩法:擂主设擂摆彩头,攻擂者报…
实战应用:用在哪里 开服七日限时礼包发到第六天断了粮,9 月 1 日当天领奖按钮灰的,投诉当天破千。事故根因是一条数字日期循…
实战应用:用在哪里 玩家拔线不退游戏,连接半开着,人不在指令也没有,在线数虚高,容量预案被假数据带着跑。心跳探测给每个在线玩…
实战应用:用在哪里 周三发了合成系统补丁,周四又改强化概率,两条变更叠加后玩家分不清是哪个改出来的。发布日历把全月变更集中排…
实战应用:用在哪里 容量预案需要知道滚动一小时的副本进入峰值,而不是全天累计。滑动窗口用 60 个槽位每槽记一分钟的进入数,…