行会宝库是行会凝聚力的储蓄罐:成员捐献装备宝物进宝库,攒够进度后用宝库钥匙开启,全行会按贡献分赏。接口层要管好三本账:捐献账、钥匙账、分赏账,三本账互相独立又彼此校验,任何一笔都对得上,宝库才守得住人心。
捐献装备按价值折算宝库进度,进度条共一万点,满格后宝库进入可开启状态;捐献记录带成员编号与时间,分赏时按贡献占比排序。示例代码如下:
-- 行会宝库:捐献入账
local player = class(actor)
local DONATE_VALUE = {["裁决之杖"] = 2000, ["圣战头盔"] = 800, ["金创药"] = 10}
local function donate(player, itemName)
local value = DONATE_VALUE[itemName]
if value == nil then
sendmsg(player, 1, 0, "该物品不在宝库捐献清单内。")
return
end
local progress = tonumber(getplayvar(player, "GUILD", "VaultProgress") or 0)
if progress >= 10000 then
sendmsg(player, 1, 0, "宝库已满,等待钥匙开启。")
return
end
setplayvar(player, "GUILD", "VaultProgress", progress + value, true)
setplayvar(player, "HUMAN", "VaultMyPts", tonumber(getplayvar(player, "HUMAN", "VaultMyPts") or 0) + value, true)
sendmsg(player, 1, 0, "捐献成功,宝库进度 " .. progress + value .. "/10000。")
end
开启消耗钥匙一把,按个人贡献占比把宝库大奖分成十份发放,贡献为零的成员分得参与奖;开启后宝库进度清零进入新一轮。示例代码如下:
-- 宝库开启:钥匙与分赏
local player = class(actor)
local function openVault(player)
local progress = tonumber(getplayvar(player, "GUILD", "VaultProgress") or 0)
if progress < 10000 then
sendmsg(player, 1, 0, "宝库进度 " .. progress .. "/10000,尚未满格。")
return
end
if not checkitemw(player, "宝库钥匙", 1) then
sendmsg(player, 1, 0, "需要一把宝库钥匙。")
return
end
takeitem(player, "宝库钥匙", 1)
setplayvar(player, "GUILD", "VaultProgress", 0, true)
giveitem(player, "宝库锦盒", 1)
sendcentermsg(player, 255, 0, "行会宝库开启,贡献榜成员请到宝库官处领取奖励!", 0, 8)
end
验证四条链路:捐献清单外物品拒收、进度满格后拒捐、无钥匙拒开、开启后进度清零重新累积。贡献账与分赏账逐笔核对,占比四舍五入的尾差统一归入行会基金。线上监控捐献速率与开启频率,钥匙消耗速度远超捐献速度说明开启门槛偏低;贡献榜前十占比超过七成说明收益过度集中,分赏规则需要向参与奖倾斜。
捐献价值表曾不含新装备,玩家捐了展示为十点的默认值,高价武器被当白菜捐,未配置价值的物品拒收并提示。开启权限曾只看钥匙不看贡献,新人一把钥匙独吞全员积累,开启资格加贡献占比一成的下限。分赏排序并列贡献的处理缺失,两人并列第一只发了一份大奖,并列名次按时间先后顺延,尾差与并列都要有明确规则。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 蜈蚣洞深处的黑暗区域是老传奇最经典的压迫感来源:没有火把,屏幕只剩身边一圈微光,黑暗里随时窜出钳虫。视野…
实战应用:用在哪里 行会管理层每周要给成员发福利邮件,一封封发到崩溃。邮件撰写面板支持附件拖拽与群发名单:从背包把物品拖进附…
实战应用:用在哪里 顶级装备直接掉落太破坏生态,长期不掉又让人绝望。碎片兑换把屠龙这样的神器拆成六十块碎片:野外精英怪概率掉…
实战应用:用在哪里 沙巴克守城最怕城防形同虚设:城墙上没箭、城门后没药、守军没人指挥补给。军备库玩法把城防物资做成一套捐献与…
实战应用:用在哪里 金币靠打、元宝靠充,两种货币一旦混在一个变量里记账,对不上账的时候谁都说不清。货币钱包把金币、元宝、绑元…
实战应用:用在哪里 每个在线客户端都要定时发心跳保活,一万在线就是每秒上百个心跳包,其中九成来自挂机与后台窗口。心跳分级按客…