【游戏功能】
灼烧为什么总烧在皮肤上?灼心偏要烧进心里:心被灼了六秒——六秒里怪每出一招就自损八,出得越多损得越多。这篇的核心代码照引擎技能脚本的全规格写:配置表、灼心构件、出招自损回执、定时器、调试按钮。
一、效果演示:心被灼了,招变成刀
演示场点「灼心!」:怪的胸口亮起一圈红紫色的灼心环——头顶挂出"灼心 六秒"。六秒里怪每出一招,招的结算出口顺手给它自己扣八:金字"腑损-8"跟着招的落地一起蹦——招打你了也打它了。六秒灼心散了再打就是灰色的普攻十——时机不对一劲只值一次普攻。演示里先空地打一羽看灰字的落差,再掐着出招打一羽看六秒的腑账——同一下劲两种身价。
fx-burnheart
二、底层原理:一个出招时机判定加一份自损回执
模块的机关是一对搭档。时机判定:怪的出招态是劲的"入心窗口"——劲落在出招里才挂灼心,落在空地只算普攻。自损回执:灼心存的不是伤害是"反射率"——怪每出一招,招的结算出口顺手给它自己扣八。和打断的分野:打断让招消失,灼心让招变账——怪的大招还是能拍你十二,可它每拍一次自己也掉八。
出招时机的判定窗口值得细说:怪的出招态从抬手到落地有一段前摇——前摇里点燃的灼心挂在怪的出招结算出口上,落地那一下自损八跟着招一起结;如果等招落地才点燃,这一招已经结完了,自损要等下一招——掐前摇和掐落地的差距就是一招的账,高玩和萌新的灼心输出差三成全在这零点几秒里。所以灼心的技能说明栏里最值钱的一句话是"等它抬手再点",时机教学做进文案,比做进数值便宜得多。
三、核心代码:完整模块(上·骨架)
-- @file BurnHeart.lua
-- 灼心 —— 点燃它的心,疼的时候也伤自己
local BurnHeart = {}
local CONST = {
HEART_LIFE = 6.0,
HEART_CD = 6.0,
SELF_DMG = 8,
COLOR_HEART = "#e8608a",
COLOR_DEEP = "#6b1a3a",
COLOR_GHOST = "#ffc0d0",
ZORDER_HEART = 131,
ZORDER_FX = 135,
AUTOINC_BASE = 984000,
}
local _heartT = 0
local _hexTick = 0
local _cdLeft = 0
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "BHN",
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
local function CreateHeartFx()
local node = GUI:Layout_Create(GUI:Attach_SceneF(),
GenID("Hrt"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(node, CONST.ZORDER_HEART)
for i = 1, 24 do
local a1 = (i - 1) / 24 * 6.28
local a2 = i / 24 * 6.28
GUI:DrawLine_Create(node, string.format("h_%d", i), 0, 0, 2,
m_cos(a1) * 30, m_sin(a1) * 52,
m_cos(a2) * 30, m_sin(a2) * 52,
CONST.COLOR_HEART, 200)
end
return node
end
四、核心代码:完整模块(下·定时器与出招自损)
-- 灼心入口
function BurnHeart.Cast()
if _cdLeft > 0 or _heartT > 0 then return end
_cdLeft = CONST.HEART_CD
_heartT = CONST.HEART_LIFE
_hexTick = 0
CreateHeartFx()
ShowTip("心灼了——六秒里它一出手就自损八")
end
-- 出招自损回执
local function OnMonsterCast()
if _heartT <= 0 then return end
SL:ActorHurt(SL:GetValue("MARK_TARGET_ID"), CONST.SELF_DMG)
SL:TipAbove(SL:GetValue("MARK_TARGET_ID"), "腑损-8")
end
-- 定时器:灼心余时与出招时机
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _heartT > 0 then
_heartT = _heartT - dt
if _heartT <= 0 then
ShowTip("心灼散了——下一发跟上")
end
end
end, 0.02)
end
SL:RegisterLUAEvent(LUA_EVENT_MONSTER_CAST, "BHN_Cast", function()
if _heartT > 0 then
OnMonsterCast()
end
end)
SL:ScheduleOnce(function()
ShowTip("技能已加载: 灼心 (调试按钮触发)")
end, 1.0)
return BurnHeart
五、机制问答:三个高频追问
问:灼心期怪被控制了还自损吗?
答:不自损——控制态的怪没有出招结算,自损跟着出招走,晕住的怪六秒白灼——灼心的窗口和控制的窗口天然互斥,控场流派要自己做取舍。
问:自损的八点能暴击吗?
答:不能——反射率是固定值,不参与暴击掷骰,账目干净玩家才算得清,算得清才愿意练。
问:怪的血条见底了灼心还挂吗?
答:不挂——灼心对残血怪自动失准,斩杀线以下它自己会倒,灼心不当补刀技,各司其职。
问:两个灼心能叠吗?
答:不能——同一个怪只挂一份灼心,重复点燃只刷新时长,叠层的版本六秒烧穿一切,单份的账才可控。
六、调参指南与商业服怎么用
调参三笔账。自损八对出招周期两点二秒是十秒四招三十二的反射产值——产值对玩家同期输出压在三成以内,灼心是惩罚的回执不是第二输出。灼心六秒对冷却六秒是无缝循环——无缝的版本灼心变成常驻,冷却八秒留两秒真空。出招周期两秒二对灼心六秒是三招的窗口——三招的自损够疼玩家才愿意主动引怪出招。常见坑三个:出招自损的判定没查灼心标记,灼心散了自损还在跳;灼心期的自损和普攻伤害混在一起算,分不清哪笔是灼心的;灼心的视觉只有头顶文字没有环,存在感稀。
第四笔是腑损数字的节流:每招最多蹦一个腑损数字——连招密集的怪一秒三招,三个数字叠着蹦反而看不清总账,一招一账就是可读性的底线。
商业服里灼心是"控场流派"的第二条命:引怪出招的打法第一次被自损奖励——控场玩家的操作从走位长到了引招。商城里灼心的颜色做成品级——红心、紫心、金心,灼心的环色就是控场流派的身份标。变体做成灼心传染:被灼心标记的怪死亡时把灼心传给旁边的怪——传染链的深度从灼羽长到了灼心。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
运营落地还有两笔:一段是引招教学——灼心的正确用法要在技能说明里配一句"等它抬手再点",说明栏的一行字省掉客服的一半解释量;一段是灼心的战绩统计——面板上单开一栏"腑损总账",控场玩家看到自己一赛季烧掉的自损乘以几百招,续费的决定就做完了。
另外赛季任务里排一环引招五十次——逼着玩家亲手掐一次时机,掐过一次的留存就是控场流派的种子用户。
写完留一句给做灼心系的同学:灼心卖的是"招变成刀"——它出的每一招都是双刃剑,灼心只是把双刃剑的那个双字给了你。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 排查一个报错走到深夜:玩家申诉"人物瞬移",录像里人也确实是凭空跳了半张地图——坐标链上多出来一次没有来由的写…
【游戏功能】 后山出过一单笑话:一个远程怪卡在断桥那头射了全队十分钟,走不过去、勾不着、弹道够不到——最后是位玩钩子的老哥一…
【游戏功能】 M.at = M.at 2 —— 就这一行,让一只盯了三天的速攻怪从"碰不得"变成"随便打"。怪的可怕从来不在…
【游戏功能】 为什么连着打同一个怪,一刀会比一刀疼?叠劲的答案是:劲是攒出来的——起手八点,每接一刀加四点,叠到六层刀刀二十…
【游戏功能】 群里报过一个怪现象:同一位玩家打同一个怪,有时一刀十三有时一刀十,面板攻击力没变过——排查了半天才发现,十三的…
【游戏功能】 线上出过一单事故:同战力两个人对砍,先手的那位反而输了——事后翻账才发现,赢家的每一刀都比面板数值高出一截,高…