BUFF系统是战斗状态的核心引擎:烈火的灼烧、圣言的防御提升、疾跑的速度加成,每种增益的叠加层数、互斥关系、到期行为都由一张配置表驱动而非硬编码。祖玛教主的群体减速、沃玛战士的自爆易伤,也是同一套机制的变体。
---添加BUFF obj:玩家|怪物 buffid:10000起步 time:时长 OverLap:叠加层数 objOwner:施放者 abil:属性表
function addbuff(obj, buffid, time, OverLap, objOwner, abil) end
-- 施放攻击强化:叠 2 层,持续 60 秒
addbuff(actor, 10001, 60, 2, actor, { [1] = 200, [4] = 20 })
-- 查询是否已有同 ID BUFF
local has = hasbuff(actor, 10001)
abil 属性表用属性 ID 做键:1 号位配 200 点攻击、4 号位配 20 点防御。叠加规则在 buff 表配置,分为刷新时长、叠层、忽略三种模式:叠加模式下的烈火灼烧可叠 5 层,刷新模式下圣言术重复施放只刷新时间不叠层数。
---BUFF 互斥检查
function Buff.checkMutex(actor, buffId)
local group = BUFF_DEF[buffId].mutexGroup
if not group then return true end
for _, active in pairs(actor.activeBuffs) do
if BUFF_DEF[active.id].mutexGroup == group then
return false
end
end
return true
end
互斥表按组定义:攻击强化组、防御强化组、速度组各自独立,同组只能存在一个,新加的替换旧的。疾跑药水与坐骑加速同属速度组,喝了疾跑再上坐骑,坐骑加速覆盖疾跑。BUFF 到期自动清理属性修正,与 recalcabilitys 联动刷新面板,面板展示与实际生效的层数严格一致。
BUFF 的叠加层数分布与互斥触发次数按天统计,互斥告警的密度反映配置表的合理性。
互斥组的键曾经没有统一大小写,两个写法不同的攻击强化被视为不同组,同组互斥失效,键的归一化处理修复。叠加层数曾经没有上限,理论上无限叠层导致属性溢出,层数的配置上限与硬编码双保险解决了问题。
BUFF 配置表支持热重载,调整叠加与互斥不需要重启。可视化(图标、进度环、层数角标)与数据层联动,图标消失的瞬间属性修正已经回收,不允许出现面板与实际不符的窗口期。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 跨服远征分先锋、主力、后勤三队独立推进,三线全通合围BOSS。不同战力成员都有参与感。 策划要点与配置 …
实战应用:用在哪里 副本限时挑战加入超时血量惩罚:超时后BOSS攻击递增。上线后BOSS攻击叠到十倍秒杀全队。 事故还原与补…
实战应用:用在哪里 混沌麒麟召唤是全服高光时刻:暗幕聚合、裂缝展开、麒麟着陆三段演出各1.3秒。 三段式入场演出编排 围观镜…
实战应用:用在哪里 任务对话一闪而过玩家想回顾。回看接口把对话按节点存档,面板翻阅全部对话记录。 对话存档与查询渲染 当前章…
实战应用:用在哪里 服务器承载六十张地图,空闲地图白耗资源。按需激活,末人离开后六十秒休眠。 激活与休眠触发 休眠回收 验证…
实战应用:用在哪里 坐骑资质洗炼随机重滚五条属性,锁定满意的条目不再重滚,锁定越多消耗越大。 洗炼与锁定 锁定消耗递增 验证…