行会蹲守祖玛教主时,几十人同时输出,掉落归属扯皮是客服工单的大头。用首刀加伤害权重的判定,把归属规则公开化,能让抢怪活动秩序化运转。本篇给出可移植到正版授权版本服务端的记账与结算写法。
开怪瞬间记下首刀玩家,此后每次命中给攻击者累加一点仇恨值,用名字做键避免持有对象引用失效。触发函数attack首参是actor字符串,先转对象再取名字。
local firstHit, dmgSum = {}, {}
function attack(actor)
local player = class(actor)
local name = player:GetName()
if firstHit.ZUMA == nil then
firstHit.ZUMA = name
sendcentermsg(name .. "抢得祖玛教主首刀!")
end
dmgSum[name] = (dmgSum[name] or 0) + 1
end
结算走killmon触发:首刀占四成权重,仇恨值折算六成,取总分一名为归属者,其余参与玩家发安慰奖励。
function killmon(actor)
local best, top = "", 0
for name, cnt in pairs(dmgSum) do
local score = cnt + (name == firstHit.ZUMA and 400 or 0)
if score > top then best, top = name, score end
end
if best ~= "" then
giveitem(best, "裁决之杖", 1)
sendcentermsg("祖玛教主击杀归属:" .. best)
end
firstHit.ZUMA = nil
dmgSum = {}
end
GM分身测试:两个测试号分别打首刀与高仇恨,验证结算权重生效。开活动时用getmoncount(地图, "祖玛教主")确认刷怪成功,结算后读dmgSum表长度写入日志,正常一局应有三十到八十条参与记录,若为零说明attack触发没挂上。
actor是字符串,直接对它取名字会报错,必须class(actor)转换后再调getname。记账表按局清空,若教主被引走超时消失,killmon不触发,表会残留到下一局,所以要在genmon刷怪时预清理一次。giveitem的对象传名字符串即可离线投递,但改名卡使用后旧名字会失配,参与记录超过两小时的归属奖励改走sendmail并附上时间戳。同IP多账号参与要设权重折减系数0.5,防止工作室小号稀释归属判定。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
学员常见误区 Lua函数可返回多个值,学员用固定变量数接收时如果变量少于返回值,多余返回值被静默丢弃;如果变量多于返回值,多…
设计初衷 行会建筑的死穴是一次全解锁:会员没有逐步建设的过程感。梯度设计让每栋建筑都有前置条件和资源门槛。 数值模型 建筑分…
设计初衷 婚姻系统的属性加成是社交玩法的经济锚点:加成太弱没人结婚,太强则"为了属性被迫结婚"扭曲了社交本质。婚姻边界的设计…
设计初衷 宝箱类玩法的信任危机都源于同一句话:"概率是不是骗人的。"期望公示把概率从事后争议变成事前契约:奖池概率表全量公示…
设计初衷 流拍物(拍卖未成交的退回物品)堆积在卖家背包里成为死资产:低价值物流拍后无人问津,高价值物流拍后卖家不愿降价重拍。…
业务场景 沙巴克战功榜每周结算,玩家提交战功前不知道"再打多少能进前 10、前 10 的奖励是什么"。名次预览:输入自己的战…