战斗资源只有冷却与蓝条,技能循环固定,缺少爆发窗口的抉择。怒气条封装:普攻与受击积攒怒气,终结技消耗怒气按存量分档结算伤害——攒还是放、放到几档再放,输出循环有了节奏维度。
怒气积累。示例代码如下:
local function addRage(actor, amount)
local rage = tonumber(getplayvar(actor, 0, "Rage")) or 0
rage = math.min(rage + amount, 100)
setplayvar(actor, 0, "Rage", rage, 0)
end
local function onAttack(actor)
addRage(actor, 6)
end
local function onBeHit(actor)
addRage(actor, 4)
end
终结技分档结算。示例代码如下:
local TIERS = { 0, 800, 1800, 3200 }
local function castFinish(actor)
local rage = tonumber(getplayvar(actor, 0, "Rage")) or 0
if rage < 30 then
sendmsg(actor, 1, "怒气不足 30,无法释放终结技。")
return
end
local tier = math.floor(rage / 30)
if tier > 3 then
tier = 3
end
setplayvar(actor, 0, "Rage", 0, 0)
sendmsg(actor, 1, "终结技命中,伤害 " .. TIERS[tier + 1] .. "。")
end
addRage 统一入口,100 封顶防溢出;普攻加 6、受击加 4,主动输出收益高于挨打,鼓励进攻。castFinish 以 30 怒为一档(30 到 59 一档、60 到 89 二档、90 到 100 三档),TIERS 档位表给递增回报;命中后全消耗清零,下一轮重新积攒。Rage 用 setplayvar 的 isSave=0 临时变量存储:下线即清,怒气不入库存档,保住战斗资源的即时属性。
怒气系统踩过三个坑:一是切换地图怒气残留,进新图即满怒爆发,跨图强度失衡——进图触发器统一清零;二是档位伤害表写死在脚本里,数值调档要改代码热更——档位表挪到 sysvar 配置读取,数值同学自己就能调;三是终结技未命中也清零怒气引发投诉——改为命中判定通过才清零,未命中返还一半怒气,手感与规则两头都照顾。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、一行代码拆解:if CONTRIB = price then CONTRIB = CONTRIB - pric…
【语法】 一、隐蔽陷阱:三个物品的全排列共 6 种,手写三重循环出 27 种含大量重复——递归交换法:固定一位、递归排其余、…
【语法】 一、抛坑提问:成就池 50 项,玩家已解锁 32 项,剩下的怎么一遍筛出?差集运算——以全集为基准,遍历时查已有集…
【语法】 一、抛坑提问:3 根柱子 5 个盘子从甲柱挪到丙柱,每次只能移一个且大盘不压小盘——把"挪 n 个"分解成"挪 n…
【游戏】 一、一行代码拆解:CASTING[actor] = nil —— 回城打断的核心:施法期间被攻击即清空施法状态并返…
【游戏】 一、一行代码拆解:APPLY[acc] = os.time() —— 入会审批的全部骨架:申请进队列带时间戳,官员…