一、线上事故:世界BOSS战利按击杀者独吞,伤害 92% 的队伍零收益,公会集体抗议;改为按伤害占比比例分成,贡献多少拿多少。
二、底层原理:比例分成先求总伤害再逐个乘占比:share = floor(total * dmg / sum);先乘后除避免小数截断偏差,合计恰等于总额无丢失。
三、正确代码:
错误写法。示例代码如下:
local function split(actor, total, dmgs)
giveitem(actor, "金条", total, 0, "BOSS独吞") -- 击杀者全拿
end
正确写法。示例代码如下:
local function split(actor, total, dmgs)
local sum = 0
for _, d in ipairs(dmgs) do sum = sum + d.val end
for _, d in ipairs(dmgs) do
local share = math.floor(total * d.val / sum)
giveitem(actor, "金条", share, 0,
"祖玛教主按贡献分成")
end
end
四、引擎验证:伤害 6000/3000/1000 分 10000 金:独吞版两队收益 0;比例版 6000/3000/1000 逐一到账,合计恰 10000 无截断丢失。
五、FAQ:问:floor 后合计变少怎么办?答:差额补给伤害最高者,尾差一步归位。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、机制原理 隐蔽的坑:给表挂上 __gc 元方法,指望对象被回收时顺手关闭资源——脚本从头跑到尾,元方法一次都没…
【游戏】 一、规则机制 抛个坑:坐骑提速全场开放行不行?城里被高速身影来回冲撞,野区战斗刚接手人就窜出视野,PVP 双方都骂…
【游戏】 一、规则机制 隐蔽的坑:奇遇按 1% 概率在每次击杀时判定,运气差的玩家连杀三百只毫无动静,投诉"事件是假的"。感…
【语法】 一、机制原理 抛个坑:三十个活动开关要存档,开三十个字段太臃肿,Lua 5.1 又没有位运算符——还能把开关压进一…
【游戏】 一、规则机制 线上事故:活动加怪全压在出生点周边,门口怪海堆积秒刷秒清,深处空无一物;改成均匀散布又稀得打不动,体…
【游戏】 一、规则机制 抛个坑:药能无限嗑吗?产物直接叠 buff 的话,肝帝把攻击药当饭吃,数值表全线失守。丹药规则两把锁…