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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 行会建设需要资金,成员的投入却看不到回报。行会发展基金让成员按份投入行会基金,基金用于行会建设与集体活动…
实战应用:用在哪里 占领沙巴克后的日常维护靠几个人,城内挂机广告无人管,安全区成了法外之地。沙城巡逻队把城防日常做成排班玩法…
实战应用:用在哪里 行会仓库运营数月后杂物堆积:过期活动道具、低级材料、重复装备混杂在贵重物资之间。仓库整理接口按价值与用途…
实战应用:用在哪里 一次活动奖励少发,三名客服给出三种答复:补发、不补发、等通知。玩家把三张截图拼在一起发到论坛,一场本可善…
实战应用:用在哪里 玩家拥有多个称号,切换佩戴后效果不符预期又要来回换。称号预览在切换前展示佩戴效果:名字上方的称号样式、属…
实战应用:用在哪里 赤月巢穴的魔龙教主血量降至三成会进入狂暴:攻击翻倍、召唤赤月护卫、周期性释放全屏魔龙血域。狂暴触发把 b…