【游戏功能】
先抛一个坑:打不过的怪,能不能把它从地里顶起来?听着像玩笑,可"立足"这件事本身就是怪的命根——爪子再快,脚不沾地也使不出来。垫脚纹干的就是这个:地里长出一根桩,把怪顶离地面一秒半——悬空的爪子抓不着你,落下来还得摔一跤。这篇把整套模块拆开:配置表、长桩演出、悬空判定、落地结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:地里长出一脚,把它顶上天
演示场怪照常压过来。点「垫脚!」:它脚下的地面鼓了——三根土黄色的桩从地里钻出来,把整只怪顶离地面一秒半。悬空的怪四脚乱蹬,"蹬腿"的小字时不时蹦一个——爪子够不着你,你的刀一刀一刀安心地砍。一秒半一到桩子缩回去,它重重摔下来——"摔-12"的黄字砸出,屏幕一震,尘土四起。演示里试两笔账:悬空一秒半白捡的两刀加落地的十二点,和不垫脚硬拼的交换比——多出来的账全是那一根桩付的利息。垫脚纹教的是断根:再凶的怪,离了地就是纸糊的。
fx-floatlift
二、底层原理:一根长桩演出加一次悬空判定
模块的机关是一对搭档。长桩演出:按纹那一拍怪的脚下长出土桩——桩顶着一秒半的悬空期,悬空期间怪的出手和走位整段冻结,四脚乱蹬是演给玩家看的白费劲。落地结算:桩收的那一拍怪从半空摔回地面——落地伤害一次付清,尘土、震屏、摔字三件套齐上。这三件套里尘土最有讲究——土要往四边溅不往上冒,往上冒像爆炸,往四边溅才是砸出来的坑。和击飞类机制的分野在"垫脚的桩是从地里长出来的":击飞是打上去的力,垫脚是地里长出来的支撑——它不是被你打飞的,是被地面自己出卖的,这份"地气帮你"的戏是这套纹的魂。
悬空为什么只顶一秒半?顶太久悬空变成挂机输出,怪的尊严全无;一秒半刚好是"两刀加一次落地账"的额度——垫脚是开胃的巧劲,不是正菜——巧劲的账要留给玩家自己去算,算明白了才叫会玩。
三、核心代码:完整模块(上·骨架)
-- @file FloatLift.lua
-- 垫脚桩纹 —— 地里长出一脚,把它顶上天
local FloatLift = {}
local CONST = {
LIFT_LIFE = 1.5,
LIFT_CD = 5.0,
FALL_DMG = 12,
LIFT_OFFSET = 46,
COLOR_LIFT = "#b09048",
COLOR_DEEP = "#483418",
COLOR_GHOST = "#f0e0b0",
ZORDER_LIFT = 133,
ZORDER_FX = 135,
AUTOINC_BASE = 1111000,
}
local _liftT = 0
local _cdLeft = 0
local _tid = 0
local _liftFx = nil
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "FTL",
CONST.AUTOINC_BASE + _autoInc)
end
local function GetActorPos(id)
if not id then return nil end
local x = SL:GetValue("ACTOR_POSITION_X", id)
local y = SL:GetValue("ACTOR_POSITION_Y", id)
if not x or not y then return nil end
return { x = x, y = y }
end
local function SafeRemove(node)
if node and not GUI:Widget_IsNull(node) then
GUI:removeFromParent(node)
end
end
local function ShowTip(msg)
if msg and msg ~= "" then SL:ShowSystemTips(msg) end
end
function FloatLift.Lifted()
return _liftT > 0
end
四、核心代码:完整模块(下·悬空判定与落地结算)
-- 悬空判定:悬空期间怪的出手许可整段冻结
SL:RegisterLUAEvent(LUA_EVENT_ACTION_CHECK, "FTL_Hold", function(tid)
if FloatLift.Lifted() and tid == _tid then
return false
end
return true
end)
-- 落地结算:桩收的那一拍算总账
local function TouchDown()
SL:ActorHurt(_tid, CONST.FALL_DMG)
SL:TipAbove(_tid, "摔-" .. CONST.FALL_DMG)
SL:PlayTouchDownFx(_tid)
SafeRemove(_liftFx)
_liftFx = nil
ShowTip("摔下来了——十二点入账")
end
function FloatLift.Cast()
if _cdLeft > 0 or FloatLift.Lifted() then return end
local tid = SL:GetValue("MARK_TARGET_ID")
if not tid then return end
local tp = GetActorPos(tid)
if not tp then return end
_cdLeft = CONST.LIFT_CD
_liftT = CONST.LIFT_LIFE
_tid = tid
SL:AddBuff(tid, "AIRBORNE", CONST.LIFT_LIFE)
SafeRemove(_liftFx)
_liftFx = GUI:Layout_Create(GUI:Attach_Scene(),
GenID("Stake"), tp.x, tp.y, 0, 0, false)
GUI:setLocalZOrder(_liftFx, CONST.ZORDER_LIFT)
SL:PlayStakeUpFx(tp.x)
ShowTip("地里长出桩了——顶它一秒半,落下摔十二")
end
-- 定时器:悬空倒计时与落地驱动
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _liftT > 0 then
_liftT = _liftT - dt
if _liftT <= 0 then
SL:RemoveBuff(_tid, "AIRBORNE")
TouchDown()
end
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("垫脚", function()
FloatLift.Cast()
end)
ShowTip("技能已加载: 垫脚纹 (调试按钮触发)")
end, 1.0)
function FloatLift.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SL:UnregisterLUAEvent(LUA_EVENT_ACTION_CHECK, "FTL_Hold")
if _tid ~= 0 then SL:RemoveBuff(_tid, "AIRBORNE") end
SafeRemove(_liftFx)
_liftT = 0
end
return FloatLift
五、机制问答
问:悬空的怪被打能还手吗?
答:不能——悬空期它的出手许可整段冻结,蹬腿是演的,爪子落不到你身上。
问:大体型的头目顶得动吗?
答:顶不动——桩有承重上限,头目的吨位直接把桩压断,说明栏写明"大体型免顶",能顶的只有寻常身板。
问:悬空那一拍你的刀怎么算命中?
答:照常命中——它悬空只是够不着你,你的刀够得着它,半空里的靶子不闪不避。
问:落地的摔伤吃暴击吗?
答:吃——摔伤走地面重击通道,暴击照掷,摔出个暴击是这套纹的压舱彩。
问:桩长出来它正好在出招怎么办?
答:招作废——悬空冻结认当下,抬到一半的爪跟着人一起被顶上去,落地从头再来。
六、调参指南与商业服怎么用
第四笔是悬空的时长:一秒半是"两刀加一摔"的额度——顶太久悬空变成挂机输出,太短桩刚长出来就缩回去,一秒半是巧劲和体面的平衡。第三笔是落地的分量:十二点对它六百的血是"疼但不致命"的一跤——摔太狠垫脚变成终结技,太轻等于白顶,十二点刚好让"落地"这一拍有响。第二笔是冻结的深度:出手走位整段停是满冻结——只停出手不停走位的版本,怪悬空着继续贴脸,落地贴你脸上,要顶就顶个全的。第一笔是桩的演出:三根桩破土、托举、回缩三段要连贯——桩是这套纹的戏胆,桩长得不真,悬空就成了飘。常见坑三个:悬空的贴图没跟着抬升导致怪悬在影子里;冻结解除和落地伤害差了半拍;头目判定漏了吨位校验把大怪也顶上了天。
商业服里垫脚纹是"地趟门"的反着来的功夫:别人练地上功夫,他练让敌人离地——商城里土桩的样式做成品级,土桩、石桩、龙骨桩,那三根破土而出的黄桩就是地趟门的顶门杠。运营落地还有两笔:一段是断根教学——教一句"它脚不沾地,爪子就是摆设",流派第一课是借地;一段是顶桩榜——按垫脚期白捡的输出总量排名,顶得最稳的人有碑。变体做成连环桩:悬空落地的瞬间再顶一次——从一顶到连顶,地趟门的桩越顶越欢。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
写完留一句给做立足系的同学:垫脚纹卖的是"脚不沾地什么都白搭"——那三根破土的黄桩和落地时砸出的尘土,是把"立足"两个字标出价格的一根顶门杠。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…