【游戏功能】
数值组翻过一笔扯皮的账:同一只头目,A 队三分钟放倒,B 队磨了十一分钟还灭了——装备差不到一成,输出差了一倍。查战斗记录发现答案不在人身上在一只沙漏上:A 队开局就立沙漏,八秒破甲期里抢走了三成血;B 队头目进入狂暴之后才想起沙漏还在冷却。今天这篇把沙漏阵拆开讲:沙漏里刀为什么翻倍、沙漏外它为什么疯,代码、参数、商业服用法,五节各管一段。
一、效果演示:八秒窗,一支令
演示场点「立沙漏!」,场地中间立起一只漏沙的玻璃壶——顶上的沙堆一秒一秒塌下去,底下的堆一秒一秒涨起来。沙漏立起的八秒是破甲期:怪身上挂裂纹,你的每一刀翻倍——十四的普攻砸出二十八的金字,刀光也比平时宽一圈。沙走完的那一帧玻璃壶炸开,怪当场狂暴:周身红光、出手快了一倍、每口从十四涨到二十四,字幕明牌"沙走完了——撤"。玻璃壶的沙堆是跟着倒计时实时画的:顶上塌多少、底下涨多少,读沙堆就是读时间——看惯了倒计时条的眼睛,看沙堆反而更紧张。演示里可以做一次对照组:破甲期挂机不动,等狂暴后再打——同样的八秒,血条差出一大截,这就是这只沙漏要教的事。
fx-hourglass
二、底层原理:一个全场阶段开关
机制的骨架是一个阶段布尔加一条倒计时。沙漏立起,全场进入"破甲期":怪的护甲系数切到低位,玩家伤害出口乘二;玻璃壶每帧推进沙量,沙量走完,阶段切到"狂暴期"——怪的攻速系数和伤害系数同步上调,两边一起变,玩家才真切感受到"窗口关了"。要害在于阶段是全场属性不是个人增益:破甲期的翻倍对场上所有玩家生效,这也是它和"自身爆发药"的本质区别——爆发药改变一个人的输出,沙漏改变整场仗的规则。狂暴的不可逆要写死在迁移里——回退分支哪怕留一条,玩家就会开发出"卡沙漏"的循环打法。狂暴是单向的:沙漏只能立一次,狂暴没有解法,这个"不可逆"逼着全队把八秒当成一场仗里最贵的资源来排班。
三、核心代码:幂尔框架怎么写
local Hourglass = {}
local SAND_LIFE = 8.0 -- 沙漏八秒
local BREAK_MULT = 2.0 -- 破甲期伤害乘二
local RAGE_SPD = 1.5 -- 狂暴攻速乘一点五
local RAGE_DMG = 24 -- 狂暴后单发
local phase = "normal" -- normal / break / rage
local sand = 0
-- 施放入口:按钮回调调用
function SL:CastGlass()
if phase ~= "normal" then return end
phase = "break"
sand = SAND_LIFE
SL:Announce("破甲期!")
end
-- 伤害出口:阶段查表
function SL:PlayerDamage(base)
if phase == "break" then return math.round(base * BREAK_MULT) end
return base
end
-- 每帧入口:沙量推进与阶段切换
function SL:OnTick(dt)
if phase ~= "break" then return end
sand = sand - dt
if sand <= 0 then
phase = "rage"
SL:SetMonsterRage(RAGE_SPD, RAGE_DMG)
SL:Announce("狂暴!")
end
end
return Hourglass
对着代码说三处。phase 只有两个合法迁移: normal 到 break、break 到 rage——入口处 phase ~= "normal" 一行把重复立漏和狂暴后补立全部拦死,状态机的路修窄了,怪状态就出不来。伤害放大只写在 PlayerDamage 一个出口:破甲期的翻倍不改技能倍率、不追加特效,它就是一行乘法——乘法写在多个出口的版本,漏一个出口数字就对不上。SetMonsterRage 一次把攻速和伤害两个系数都交出去,狂暴的两半必须同帧生效,只涨攻速不涨伤害的狂暴是假狂暴。
四、调参指南:窗口、翻倍、狂暴的三难
窗口时长:八秒对两秒一跳的普攻是四刀翻倍,加上技能大约能抢走总血量两成半——低于一成五玩家无感,高于三成狂暴形同虚设。翻倍系数:破甲期乘二是最直觉的牌,也可以改乘一点五再把窗口拉长到十二秒,总收益一样,节奏感完全不同——短窗高倍是抢,长窗低倍是磨,商业服选前者。狂暴强度:狂暴后的输出压到破甲期收益的两倍上下最妙——它保证"窗口里偷懒"和"窗口外硬打"都亏,只有踩着沙漏打才有赚。立沙漏的动作本身要有一拍硬直——免费瞬发的沙漏会被编进连招里乱按,半秒的立阵动作让它保留一次"选择"的分量。常见坑四个:狂暴之后再立沙漏没拦住,两段破甲叠出数值事故;沙漏倒计时没有进度条,玩家不知道还剩几秒,八秒窗口靠心算;狂暴切换只有字幕没有演出,怪的攻击翻倍了玩家以为吃了错号;破甲期对召唤兽的攻击不生效,狗咬的还是原价,账面两套。
五、商业服怎么用:这个机制卖给谁
沙漏阵在商业服里是"指挥价值"的放大器:野队各打各的,有指挥的队踩着沙漏集火,同一个头目两种通关时间——指挥的消费理由就是这么来的。副本侧它是头目设计的节拍器:三只头目三只沙漏,沙漏间隔越短,仗越打越像演奏。付费变体最顺的是"沙漏扩容"——商城道具把八秒窗延长到十秒,或者把冷却从十四秒压到十秒,时间就是伤害,时间就是充值理由。再进一步做成竞速赛:全服比"沙漏内输出占比",占比榜就是氪金度和配合度的双榜。这一篇的演示和代码照抄能跑,改的就是第三节那几个数。
写完留一句给做阶段机制的同学:全场阶段卖的是"同一时刻一起变"——变的那一帧越响,玩家越愿意为踩点排队。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 if _shadowT 0 then spd = noShadow and 12 or 24 end ——一行…
【游戏功能】 魂卫的全机制就一句:杀掉小怪化一盏魂火跟着你走,每盏魂火两秒自动劈最近的大怪一口八点,至多三盏——「引魂!」按…
【游戏功能】 一道咒飞过来,硬吃是四秒里一秒十的钝疼——有没有第三条路?纸人替灾给的就是第三条路:贴一个纸人在身后,八秒里头…
【游戏功能】 挨打还能赚钱?水镜式的答案是:挨的刀七成存进镜里不扣血、三成照常疼,六秒后点「还镜」,存量乘一点五放成水炮——…
【游戏功能】 if _mirrorT 0 then SL:TipAboveMe("免疫") return end ——一道写…
【游戏功能】 远近战的矛盾怎么解?远战的答案是把怪挡在射程外,近战的答案是把人拖进射程内——缩地阵给的第三个答案最蛮横:圈只…