【游戏功能】
香烧着的时候,人心最定。焚香把这句老话做成了机制:点一炷八秒的香,香烧着的三刀一叩首——每叩一回,血回六点。香烧完,灰烬落地,下一炷七秒后再点。这篇把整套模块拆开:配置表、焚香构件、叩首计数、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:点一炷香,香烧着时三刀一回血
演示场玩家头顶一条绿血条,先让它挨两刀亏点血。点「焚香!」:一炷细香在玩家身侧立起来,青烟一缕一缕往上飘——八秒的香头烧得安稳。这八秒里玩家的刀每落三刀,第三刀落定的瞬间头顶蹦出"叩首+六"——血条一格一格爬回来。香烧到底,灰烬簌簌落地,回血的节奏也停了——七秒后再点一炷,节奏重新开始。演示里试两种点法:满血点香浪费一炷,和亏着血掐刀数点香——香回的是细水长流的血,点在刀口上才不亏。焚香玩的是节拍:三刀一叩首,刀是拍子,香是钟。
fx-incenseburn
二、底层原理:一条香期计时加一份叩首计数
模块的机关是一对搭档。香期计时:焚香挂八秒——香认时间不认刀数,一秒都不多烧,烧完的灰不赊账。叩首计数:香期里的每一刀落账记一叩,三叩触发一回回血六点——叩首认的是刀数不是伤害,软刀硬刀都算一叩,香前的账目一律平等。和吸血那类按伤害提成的分野在"焚香按拍不按量":吸血看刀的斤两,焚香看刀的数目——轻刀重刀在香前一样叩首,这套机制的公平写在香灰里。
叩首为什么是三刀不是一刀?一刀一叩的版本焚香变成持续回血挂件,三刀一叩把回血拆成了节奏奖励——手不停的人才有得回,香是给勤快人点的。
三、核心代码:完整模块(上·骨架)
-- @file IncenseBurn.lua
-- 焚香 —— 点一炷香,香烧着时三刀一回血
local IncenseBurn = {}
local CONST = {
INCENSE_LIFE = 8.0,
INCENSE_CD = 7.0,
BOW_COUNT = 3,
BOW_HEAL = 6,
COLOR_BURN = "#b08858",
COLOR_DEEP = "#4a3418",
COLOR_GHOST = "#ecd8b8",
ZORDER_INCENSE= 132,
ZORDER_FX = 135,
AUTOINC_BASE = 1027000,
}
local _insT = 0
local _combo = 0
local _cdLeft = 0
local _insFx = nil
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "ICB",
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 IncenseBurn.Light()
if _cdLeft > 0 then
ShowTip("香在点——" .. string.format("%.1f", _cdLeft) .. "秒")
return
end
if _insT > 0 then
ShowTip("香还烧着——还剩" .. string.format("%.1f", _insT) .. "秒")
return
end
_cdLeft = CONST.INCENSE_CD
_insT = CONST.INCENSE_LIFE
_combo = 0
SafeRemove(_insFx)
_insFx = GUI:Layout_Create(GUI:Attach_SceneF(),
GenID("Incense"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(_insFx, CONST.ZORDER_INCENSE)
SL:PlayLightIncenseFx(SL:GetValue("USER_ID"))
SL:TipAboveMe("焚香")
ShowTip("香点上了——八秒里三刀一叩首,叩一回回六点")
end
四、核心代码:完整模块(下·定时器与叩首回血)
-- 叩首计数:香期里刀刀记叩
SL:RegisterLUAEvent(LUA_EVENT_MELEE_HIT, "ICB_Bow", function(tid)
if _insT > 0 then
_combo = _combo + 1
if _combo >= CONST.BOW_COUNT then
_combo = 0
SL:RestoreActorHp(SL:GetValue("USER_ID"), CONST.BOW_HEAL)
SL:PlayBowFx(SL:GetValue("USER_ID"))
SL:TipAboveMe("叩首+6")
end
end
end)
-- 定时器:香期倒计时与香柱跟脚
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _insT > 0 then
_insT = _insT - dt
local myID = SL:GetValue("USER_ID")
local mp = GetActorPos(myID)
if _insFx and mp then
GUI:setPosition(_insFx, mp.x + 34, mp.y - 96)
end
if _insT <= 0 then
SafeRemove(_insFx)
_insFx = nil
ShowTip("香烧完了——灰烬落地,下一炷七秒后")
end
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("焚香", function()
IncenseBurn.Light()
end)
ShowTip("技能已加载: 焚香 (调试按钮触发)")
end, 1.0)
function IncenseBurn.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SL:UnregisterLUAEvent(LUA_EVENT_MELEE_HIT, "ICB_Bow")
SafeRemove(_insFx)
_insT = 0
_combo = 0
end
return IncenseBurn
五、机制问答
问:香期里的空刀记叩吗?
答:记——叩首认出刀不认命中,劈空的刀也算一叩,香前的账一律平等,软刀硬刀空刀都一样。
问:香烬能收集吗?
答:不能——灰落地就散,香期的价值在烧的过程里,囤香灰的版本焚香变成攒材料的农活。
问:两炷香能同时点吗?
答:不能——香炉只容一炷,重香只刷新时长,香叠香的版本回血叠成泉水。
问:香期被控了香停烧吗?
答:不停——香认自己的表,人晕着香照烧,晕掉的八秒是白点的香,下香前先看自己的站位。
问:满血点香亏多少?
答:亏一炷——叩首的回血满血时白叩,香的价值全在亏血的时候,点香前摸摸自己的血条。
问:焚香和匀气能同开吗?
答:能——香数刀,气数出刀的账,两本账各记各的,同开的时候脑子里要打两副算盘。
问:香期里换目标叩首清吗?
答:不清——叩首记在自己的刀上不认对象,换怪接着数,香期的节拍不打断。
六、调参指南与商业服怎么用
第四笔是叩首的深度:三刀一叩对一点四秒的刀速是四秒二一口——叩得太勤焚香变成回血光环,太懒八秒的香只叩两回,三刀的节拍刚好催人出刀。第三笔是香期的长度:八秒对七秒冷却是十五秒一炷的循环——香期超过冷却的版本双香连烧,回血的流水不断,七秒的空档是整机制的呼吸。第二笔是回血的斤两:六点一叩满香十六点对三百的血条是半成——回太厚香成了第二管血,太薄点香纯属仪式,半成刚好是"细水长流"的注脚。第一笔是香柱的可读:香头的高度随香期下移——香烧到哪,回血的余量就剩多少,低头看香比抬头看表更有味道。常见坑三个:香期里的软刀不记叩,气尽和焚香两个机制打架;香柱跟脚跟丢,烟飘在半空;回血触发在满血时照扣计数,满血期白烧三刀。
商业服里焚香是"香客流派"的心安:打的是架,点的是香——商城里香柱的样式做成品级,檀香、龙涎香、百年线香,那一缕随刀节奏盘上去的青烟就是香客玩家的定心咒。运营落地还有两笔:一段是节拍教学——教一句"三刀一叩,别断了拍子",流派的功夫全在数数上;一段是长香榜——按香期内叩首回血总量排名,最会点香的人有碑。变体做成高香:点一炷三倍长的高香,叩首的回血翻倍但香期里挨的刀也加两成——高香好烧,代价也高。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
香客的规矩也只有一条:点香要看血,叩首要数刀。
写完留一句给做节拍系的同学:焚香卖的是"香烧着的时候人心最定"——那一缕随刀盘上去的青烟,是把回血拆成节拍、把节拍点成香火的慢功夫。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 新刷出来的怪身上为什么有金印?胎记给的答案是:每一只新生的怪都带着一枚三秒的金印胎记——三秒里打它,刀刀二十;…
【游戏功能】 prayT = 2.0 —— 念经的两秒,就是超度的全部门槛:对着一具尸体念满两秒,灰烬升起,血回二十,下一刀…
【游戏功能】 认领 = true —— 就这一行,把"打谁"变成了"认谁":第一刀落在谁身上,一封朱印就贴在谁的头顶——认过…
【游戏功能】 怪倒下的地方为什么值得多站一会儿?遗泽给了个温柔的说法:它倒下的那一片地会留下十二秒的泽环——站在环里满三秒,…
【游戏功能】 打死它为什么它又站起来了?截魂揭开底牌:这怪死后魂不散——一缕魂从尸体里飘出来,两秒半飞回右侧的石像,魂到石像…
【游戏功能】 新刷出来的怪为什么头三刀不掉血?蜕壳给了答案:它出生时带着三页硬壳,壳页一页页替它挨刀——三刀破壳,壳破的那一…