【游戏功能】
chg=math.min(24,chg+8)——先拆这一行。借风纹的账全在这一行的封顶里:它劈空的每一刀往你身上借八分劲,借满二十四分封顶,下一刀一次兑清。借风纹的逻辑有点不讲理:它出招落了空,那一刀的劲没处去——纹把这份落空的劲截下来,归你。它劈空越多,你攒的劲越足;它招招扎实,你一分借不着。这篇把整套模块拆开:配置表、劈空侦测、借劲封顶、兑劲结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:它劈空的一刀,借给你当劲
演示场怪照常抡爪。点「借风!」:一圈青白色的纹绕上玩家——十二秒借风期。这一拍起它的爪有四分之一的可能劈空——爪风扫过你半尺之外的空气,"劈空"的青字从它爪边飘出来,同时你的身上亮起一圈青色的风环:"借劲+8"。攒到三口借劲,你的下一刀就是三十六点的青字大刀,一口把借的劲全兑出去。演示里试两笔账:它的爪招招扎实和招招劈空两种极端——前者你借不到一分,后者你的刀翻倍。借风纹教的是借势:它失手的每一刀,都是你的进项。
fx-windborrow
二、底层原理:一次劈空侦测加一道借劲封顶
模块的机关是一对搭档。劈空侦测:纹成期里它的每一爪出手先掷劈空——四分之一的爪风落空,落空的那一爪不伤你分毫,劲道被纹截下。借劲封顶:借到的劲八分一份、二十四分封顶——封顶之后它再劈空,劲散在风里谁也拿不着,你的下一刀把攒的劲一次兑清。和反弹类机制的分野在"借风收的是它没打出来的劲":反伤收的是它打中的那一刀,借风收的是它打空的那一刀——它越想打中你,失手的劲越多,你攒的劲越足,这份"以它的失手养你的刀"的账是借风的魂。
封顶为什么钉在二十四?不封顶的版本借劲无上限,攒到六十点的借劲一刀成了战略武器,劈空率成了整场仗的胜负手;二十四分封顶之后,借劲是三口一份的零花,兑劲的频率比兑劲的厚度更要紧。
三、核心代码:完整模块(上·骨架)
-- @file WindBorrow.lua
-- 借风顺纹 —— 它劈空的一刀,借给你当劲
local WindBorrow = {}
local CONST = {
CREST_LIFE = 12.0,
CREST_CD = 4.0,
WHIFF_RATE = 0.25,
BORROW_STEP = 8,
BORROW_CAP = 24,
COLOR_WIND = "#88b8a8",
COLOR_DEEP = "#2e4840",
COLOR_GHOST = "#c0e8dc",
ZORDER_WIND = 133,
ZORDER_FX = 135,
AUTOINC_BASE = 1134000,
}
local _crestT = 0
local _cdLeft = 0
local _borrow = 0
local _crestFx = nil
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "WBR",
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 WindBorrow.Charge()
return _borrow
end
四、核心代码:完整模块(下·劈空侦测与兑劲结算)
-- 劈空侦测与借劲:它出招掷骰,劈空的劲入你的账
SL:RegisterLUAEvent(LUA_EVENT_BEFORE_HURT, "WBR_Gust", function(dmg)
if _crestT <= 0 then return dmg end
if math.random() < CONST.WHIFF_RATE then
_borrow = math.min(CONST.BORROW_CAP,
_borrow + CONST.BORROW_STEP)
SL:TipAboveMe("借劲+" .. CONST.BORROW_STEP)
return 0
end
return dmg
end)
-- 兑劲结算:你的下一刀把攒的劲一次兑清
SL:RegisterLUAEvent(LUA_EVENT_MELEE_DAMAGE, "WBR_Pay", function()
if _borrow <= 0 then return 0 end
local pay = _borrow
_borrow = 0
SL:TipAboveMe("兑劲!")
return pay
end)
function WindBorrow.Cast()
if _cdLeft > 0 or _crestT > 0 then return end
local myID = SL:GetValue("USER_ID")
_cdLeft = CONST.CREST_CD
_crestT = CONST.CREST_LIFE
_borrow = 0
SafeRemove(_crestFx)
_crestFx = GUI:Layout_Create(GUI:Attach_SceneF(),
GenID("Gust"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(_crestFx, CONST.ZORDER_WIND)
SL:PlayGustUpFx(myID)
ShowTip("借风开了——它劈空的刀,劲都归你")
end
-- 定时器:纹成倒计时与风环跟画
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _crestT > 0 then
_crestT = _crestT - dt
local myID = SL:GetValue("USER_ID")
local mp = GetActorPos(myID)
if _crestFx and mp then
GUI:setPosition(_crestFx, mp.x, mp.y - 62)
end
if _crestT <= 0 then
SafeRemove(_crestFx)
ShowTip("风停了——劈空的劲自己散了")
end
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("借风", function()
WindBorrow.Cast()
end)
ShowTip("技能已加载: 借风纹 (调试按钮触发)")
end, 1.0)
function WindBorrow.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SL:UnregisterLUAEvent(LUA_EVENT_BEFORE_HURT, "WBR_Gust")
SL:UnregisterLUAEvent(LUA_EVENT_MELEE_DAMAGE, "WBR_Pay")
SafeRemove(_crestFx)
_crestT = 0
_borrow = 0
end
return WindBorrow
五、机制问答
问:它劈空的判定对它自己有利吗?
答:不利——劈空的那一爪零伤害零收益,劲全归你,它是这套纹里唯一的输家。
问:借劲封顶后还继续劈空呢?
答:劲散风里——封顶后的劈空只有"劈空"两个字没有借劲,这也逼着玩家攒到就兑别死攥。
问:兑劲的那一刀吃暴击吗?
答:吃——兑劲走的是加算通道,兑完的总额当底刀,暴击在底刀上照常乘,借满兑暴是这套纹的台风天。
问:它劈空的瞬间我正在出手怎么办?
答:两不相干——它的劈空劲记在你的账上不记时机,你的刀什么时候兑随你,劲不过夜是唯一的规矩。
问:纹收了没兑的劲还在吗?
答:不在——劲是风里的账,纹收劲散,下一窗从头借。
六、调参指南与商业服怎么用
第四笔是劈空的费率:四分之一的劈空率是借劲的水源——费率太低一场仗借不满一口,太高它成了活靶子,四分之一刚好是"看得见它失手"的浓度。第三笔是封顶的位置:二十四分三口兑清是借劲的容量——不封顶的版本借劲成战略武器,封顶太高兑劲的频率失去意义,三口一份刚好是"攒得勤兑得爽"的账。第二笔是兑劲的通道:一次兑清不分期是劲的脾气——分期的版本兑劲变成慢性增伤,一次兑清才有"攒了一口大的"的爽感。第一笔是风环的读数:借劲几份风环转几圈——风环是劲的容量表,玩家扫一眼就知道下一刀有多重。常见坑三个:劈空判定漏了它在途的爪导致借劲和实伤两头算;兑劲后忘了清账连着两刀都重;风环在纹收后还转着不散。
商业服里借风纹是"顺风堂"的巧劲:别人的增益靠自己的刀,他的增益靠对家的失手——商城里风环的样式做成品级,草环、竹环、青凤环,那圈转在身上的青白风环就是顺风堂的帆。运营落地还有两笔:一段是等风教学——教一句"它劈空你别躲,那是给你送劲",流派第一课是站桩看天;一段是借风榜——按单次兑劲的最高伤害排名,风借得最足的人有碑。变体做成逆风:它招招扎实的时候你挨的刀也给你攒劲——从只借劈空到连实伤都借,顺风堂的帆越张越满。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
写完留一句给做截获系的同学:借风纹卖的是"它失手的劲归你"——那圈转着的青白风环和劈空时飘出的青字,是把敌方的失误入账的第一张截条。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版的炮台索敌逻辑有个隐蔽报错:炮台永远打同一个怪——即使那只怪已经死了,索敌的游标也不挪窝。追到底索敌的游…
【语法算法】 先抛一个坑:打不完的火系怪怎么办?火抗怪火打不动,换冰系技能要切装备要换面板——切完黄花菜都凉了。元素转换的答…
【语法算法】 上个月的事故复盘会上有个数字被念了三遍:四成——策划写的是"同伴陪疼四成",代码落下去成了"陪疼四十点",两只…
【语法算法】 单行代码拆解:弹射初速=-420——弹射的全部动力就这一行的负初速。负号朝上、四百二十是弹射的初速大小——踩上…
【语法算法】 上一版的减速类模块全按"乘以零点五"来写,帧率无关的版本照搬了这套写法——结果高帧率机上减速效果好,低帧率机上…
【语法算法】 先抛一个坑:怎么把散在四处的怪聚到一起打?逐个拉是笨办法,一个范围技又只能打一片——引力球的答案是一个会动的吸…