【游戏功能】
打断是别人的机制——把它的招清了就完事。震腑劲不要这个:打在它出招半途的刀不清招,劲顺着招震进它的腑——中劲十秒里,它每出一招都自损二十,招照出、劲内伤。这篇的核心代码照引擎技能脚本的全规格写:配置表、读条构件、腑劲状态机、定时器、调试按钮。
一、效果演示:读条半途挨一劲,出招自损二十
演示场点「震腑劲!」:怪读条"崩山劲"的半途,这一劲砸上去——读条照走不清,怪的周身亮起金色的腑劲圈,头顶挂出"腑劲 三层 十秒"。十秒内它的大招照样出膛、照样拍你二十八——但它自己同时蹦出"腑损-20"的金字:招打你了,劲伤它了。十秒腑劲散了再打就是灰色的普攻十二——时机不对,一劲只值一次普攻。演示里先空地打一劲看灰字的落差,再掐着读条打一劲看十秒的腑账——同一下劲,两种身价。演示里先空地打一劲看灰字的落差,再掐着读条打一劲看十秒的腑账——同一下劲,两种身价。掐读条的窗口也要数:读条一点五秒、劲冷却三秒,读条之间刚好能匀出一次劲,掐拍的手感就是从这里来的。
fx-gutstrike
二、底层原理:一个命中时机判定加一份自损回执
模块的机关是一对搭档。时机判定:怪的读条态是劲的"入腑窗口"——劲落在读条里才挂腑劲,落在空地只算普攻;窗口的判定读的是怪的 chan 字段,不是玩家猜的拍子。自损回执:腑劲存的不是伤害是"反射率"——怪每出一招,招的结算出口顺手给它自己扣二十:出招即自损,招越多自损越勤。和打断的分野在这里:打断让招消失,腑劲让招变账——怪的大招还是能拍你二十八,可它每拍一次自己也掉二十,十秒三招就是六十的反射产值。和打断的分野在这里:打断让招消失,腑劲让招变账——怪的大招还是能拍你二十八,可它每拍一次自己也掉二十,十秒三招就是六十的反射产值。打不打得中是眼力,打在读条里是心眼,两层功夫叠出来的才是腑劲玩家。腑劲三层是存给连续读条的怪的:一次读条中三劲只算一层,三层是三次入腑的累计。
三、核心代码:完整模块(上·骨架)
--------------------------------------------------------------------------------
-- @file GutStrike.lua
-- @brief 震腑劲 —— 打在它出招的半途,劲震进腑
-- 客户端表现模块:配置表 / 腑劲构件 / 反射率状态机 / 定时器
--------------------------------------------------------------------------------
local GutStrike = {}
--------------------------------------------------------------------------------
-- 配置与常量
--------------------------------------------------------------------------------
local CONST = {
GUT_CD = 3.0, -- 下劲冷却
MISS_DMG = 12, -- 空地一劲十二
HEX_STACKS = 3, -- 腑劲三层封顶
HEX_LIFE = 10.0, -- 腑劲十秒
SELF_DMG = 20, -- 出招自损二十
-- 颜色
COLOR_GUT = "#d4b34a", -- 震金
COLOR_DEEP = "#6b5416", -- 深金
COLOR_GHOST = "#f5ecc8", -- 劲白
ZORDER_GROUND = 118,
ZORDER_HEX = 131,
ZORDER_EFFECT = 135,
AUTOINC_BASE = 951000,
}
--------------------------------------------------------------------------------
-- 模块内部状态
--------------------------------------------------------------------------------
local _hexStacks = 0 -- 腑劲层数
local _hexT = 0 -- 腑劲余时
local _cdLeft = 0
local _scheduler = nil
local _autoInc = 0
local m_cos = math.cos
local m_sin = math.sin
--------------------------------------------------------------------------------
-- 辅助函数
--------------------------------------------------------------------------------
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "GTS", CONST.AUTOINC_BASE + _autoInc)
end
local function GetActorPos(actorID)
if not actorID then return nil end
local x = SL:GetValue("ACTOR_POSITION_X", actorID)
local y = SL:GetValue("ACTOR_POSITION_Y", actorID)
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
---腑劲构件:周身金环
local function CreateHexNode()
local node = GUI:Layout_Create(GUI:Attach_SceneF(), GenID("Hex"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(node, CONST.ZORDER_HEX)
for i = 1, 26 do
local a1 = (i - 1) / 26 * 6.28
local a2 = i / 26 * 6.28
GUI:DrawLine_Create(node, string.format("h_%d", i), 0, 0, 2,
m_cos(a1) * 30, m_sin(a1) * 50, m_cos(a2) * 30, m_sin(a2) * 50,
CONST.COLOR_GUT, 200)
end
return node
end
骨架的三处立规。腑劲存层数不存反射总额——反射是"每招二十"的持续账,层数只决定"二十乘几"的乘数。HEX_LIFE 十秒独立于层数——新劲刷新的是时长不叠时长,三层三层往上叠的老模块会变成永动反伤机。腑劲构件是周身金环——劲在腑里,环在身外,环是给玩家读的表不是给怪的伤害。
四、核心代码:完整模块(下·定时器与自损回执)
--------------------------------------------------------------------------------
-- 下劲:读条态入腑、空地普攻
--------------------------------------------------------------------------------
function GutStrike.Cast()
if _cdLeft > 0 then return end
_cdLeft = CONST.GUT_CD
local casting = SL:IsCasting(SL:GetValue("MARK_TARGET_ID"))
if casting then
_hexStacks = math.min(CONST.HEX_STACKS, _hexStacks + 1)
_hexT = CONST.HEX_LIFE
SL:TipAbove(SL:GetValue("MARK_TARGET_ID"), "震腑!")
ShowTip("劲入腑了——十秒里它出一招自损二十")
else
SL:ActorHurt(SL:GetValue("MARK_TARGET_ID"), CONST.MISS_DMG)
ShowTip("空地一劲——只算普攻十二")
end
end
--------------------------------------------------------------------------------
-- 招的结算出口:出招即自损
--------------------------------------------------------------------------------
local function OnMonsterCast()
if _hexStacks <= 0 then return end
local selfDmg = _hexStacks * CONST.SELF_DMG
SL:ActorHurt(SL:GetValue("MARK_TARGET_ID"), selfDmg)
SL:TipAbove(SL:GetValue("MARK_TARGET_ID"), "腑损-" .. selfDmg)
end
--------------------------------------------------------------------------------
-- 定时器:腑劲余时与招的周期
--------------------------------------------------------------------------------
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _hexT > 0 then
_hexT = _hexT - dt
if _hexT <= 0 then
_hexStacks = 0
ShowTip("腑劲散了——重新找它读条的半途")
end
end
local casting = SL:IsCasting(SL:GetValue("MARK_TARGET_ID"))
if casting and not _wasCasting then
OnMonsterCast()
end
_wasCasting = casting
end, 0.02)
end
SL:RegisterLUAEvent(LUA_EVENT_SCENE_CLEAR, "GTS_Clear", function()
_hexStacks, _hexT = 0, 0
end)
SL:ScheduleOnce(function()
ShowTip("技能已加载: 震腑劲 (调试按钮触发)")
end, 1.0)
return GutStrike
下半场的自损出口写在"怪出招"的状态切换上:_wasCasting 从真变假的那一帧就是招落地的那一帧——自损跟着招的落地走,读条途中不预扣,中途被打断也不追账。腑劲到期的清零连层数一起清——散劲不散层的版本,下一轮挂劲直接从三层起跳,十秒的租约就成了永久产权。腑劲到期的清零连层数一起清——散劲不散层的版本,下一轮挂劲直接从三层起跳,十秒的租约就成了永久产权。层数的上限也要演给玩家看:三层封顶的环画三道金弧,弧满即顶,顶了再下劲就是浪费。场景清空把租约一并作废,这是"十秒"两个字能被信任的前提。
五、调参指南与商业服怎么用
调参三笔账。自损二十对读条周期三点五秒是十秒三招六十的反射产值——产值对玩家同期输出压在三成以内,腑劲是惩罚的回执不是第二输出。读条周期三点五对劲冷却三秒留半秒余量——玩家每次读条都有劲可下,掐读条的操作永远有题目。层数三层封顶对连续读条的怪是"多劳多得"的顶——封顶再高,读条怪的腑劲会压过正面输出的全部手法。常见坑三个:命中时机的判定读的是读条结束而不是读条进行,玩家掐不到半途;自损跟着读条开始结算,中途被别的效果打断的招也算它出过招;腑劲层数的视觉不随层数变,三层的环和一层的环一个亮度。
商业服里震腑劲是"技术流打头目"的尊严:打在半途的劲等于把头目的大招变成它自己的失血点——头目读条越勤的副本,腑劲玩家的身价越高。商城里劲的品级做在"入腑特效"上——铜劲金环、玉劲琉璃环,震腑那一瞬的特效就是手速党的勋章。变体做成腑劲共振:队友同帧下劲,双劲入腑自损翻倍——掐同一帧的操作把单人技巧升成团队暗号。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
写完留一句给做反射系的同学:震腑卖的是"借招还身"——不清它的招、不断它的势,让它每一次出手都替你记账。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 蓄力技为什么总是单发?影炮偏要贯穿全屏:蓄一秒射一道暗影弹道穿全屏——线上所有目标各挨五十五,弹道从你脚下贯穿…
【游戏功能】 灼烧为什么总烧在皮肤上?灼心偏要烧进心里:心被灼了六秒——六秒里怪每出一招就自损八,出得越多损得越多。这篇的核…
【游戏功能】 魂卫为什么只有三盏就不能多了?魂蜂偏要做成可以积累的:杀掉小怪化一盏魂蜂跟着你走,至多三盏——三盏魂蜂各自两秒…
【游戏功能】 镜墙为什么只能反弹不能冰冻?霜镜偏要双管齐下:弹道撞上霜镜原路画回去——回程的弹道还带着冰冻效果,扎中怪怪也冻…
【游戏功能】 单体射击为什么打不动厚血怪?穿心刺给的答案是:箭伤八加穿心伤,穿心伤等于最大血量百分之六——血越厚的怪越疼。这…
【游戏功能】 影刺的全机制就一句话:化影绕到它身后,从背刺出的那一刀双倍二十四——正面十二、背后二十四,它一转身就变白板。这…