行会蹲守祖玛教主时,几十人同时输出,掉落归属扯皮是客服工单的大头。用首刀加伤害权重的判定,把归属规则公开化,能让抢怪活动秩序化运转。本篇给出可移植到正版授权版本服务端的记账与结算写法。
开怪瞬间记下首刀玩家,此后每次命中给攻击者累加一点仇恨值,用名字做键避免持有对象引用失效。触发函数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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 战士的烈火剑法一击熄火后要等八秒冷却,连招断档感强烈。疾风烈火斩在烈火剑法命中后给一次连击窗口:三秒内再…
实战应用:用在哪里 阵营对抗打到中期容易疲软:打赢没有额外好处,输掉也没有代价。阵营声望体系给阵营战装上荣誉刻度:个人与阵营…
实战应用:用在哪里 拿下沙巴克之后呢?城主除了名字挂在城墙上,对城市毫无影响。城主施政玩法让占领变成治理:城主每周获得市政令…
实战应用:用在哪里 主线路光缆被挖断的深夜,全服掉线 20 分钟,玩家以为游戏倒闭。备用线路方案给接入层配第二条出口:主线路…
实战应用:用在哪里 行会官员由帮主任命的老模式弊端明显:任人唯亲、能上不能下。行会选举接口把官员换届做成投票制:每两个月一次…
实战应用:用在哪里 烈火剑法的伤害加成、冷却时间、下一级提升,全靠玩家记忆或去官网查。技能说明悬浮卡片在鼠标悬停技能图标零点…