CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
进阶实战游戏功能996引擎

焚香:点一炷香,香烧着时三刀一回血

2026-10-01 13:57 作者:996 技术组 996引擎Lua教程传奇脚本进阶实战游戏功能996引擎

【游戏功能】

香烧着的时候,人心最定。焚香把这句老话做成了机制:点一炷八秒的香,香烧着的三刀一叩首——每叩一回,血回六点。香烧完,灰烬落地,下一炷七秒后再点。这篇把整套模块拆开:配置表、焚香构件、叩首计数、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:点一炷香,香烧着时三刀一回血

演示场玩家头顶一条绿血条,先让它挨两刀亏点血。点「焚香!」:一炷细香在玩家身侧立起来,青烟一缕一缕往上飘——八秒的香头烧得安稳。这八秒里玩家的刀每落三刀,第三刀落定的瞬间头顶蹦出"叩首+六"——血条一格一格爬回来。香烧到底,灰烬簌簌落地,回血的节奏也停了——七秒后再点一炷,节奏重新开始。演示里试两种点法:满血点香浪费一炷,和亏着血掐刀数点香——香回的是细水长流的血,点在刀口上才不亏。焚香玩的是节拍:三刀一叩首,刀是拍子,香是钟。

demo
 fx-incenseburn

二、底层原理:一条香期计时加一份叩首计数

模块的机关是一对搭档。香期计时:焚香挂八秒——香认时间不认刀数,一秒都不多烧,烧完的灰不赊账。叩首计数:香期里的每一刀落账记一叩,三叩触发一回回血六点——叩首认的是刀数不是伤害,软刀硬刀都算一叩,香前的账目一律平等。和吸血那类按伤害提成的分野在"焚香按拍不按量":吸血看刀的斤两,焚香看刀的数目——轻刀重刀在香前一样叩首,这套机制的公平写在香灰里。

叩首为什么是三刀不是一刀?一刀一叩的版本焚香变成持续回血挂件,三刀一叩把回血拆成了节奏奖励——手不停的人才有得回,香是给勤快人点的。

三、核心代码:完整模块(上·骨架)

lua
-- @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

四、核心代码:完整模块(下·定时器与叩首回血)

lua
-- 叩首计数:香期里刀刀记叩
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 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

进阶实战游戏功能

胎记:出生带金印三秒,三秒里刀刀二十

【游戏功能】 新刷出来的怪身上为什么有金印?胎记给的答案是:每一只新生的怪都带着一枚三秒的金印胎记——三秒里打它,刀刀二十;…

2026-10-01 14:27 996 技术组
进阶实战游戏功能

超度:尸体上念两秒,回二十下一刀双倍

【游戏功能】 prayT = 2.0 —— 念经的两秒,就是超度的全部门槛:对着一具尸体念满两秒,灰烬升起,血回二十,下一刀…

2026-10-01 14:27 996 技术组
进阶实战游戏功能

认领:第一刀认领,认过的怪挨你的刀加一成五

【游戏功能】 认领 = true —— 就这一行,把"打谁"变成了"认谁":第一刀落在谁身上,一封朱印就贴在谁的头顶——认过…

2026-10-01 14:27 996 技术组
进阶实战游戏功能

遗泽:倒下的怪留一圈遗泽,站进去三秒加两成五

【游戏功能】 怪倒下的地方为什么值得多站一会儿?遗泽给了个温柔的说法:它倒下的那一片地会留下十二秒的泽环——站在环里满三秒,…

2026-10-01 14:27 996 技术组
进阶实战游戏功能

截魂:它死后魂要飞回石像,半路截下就断重生

【游戏功能】 打死它为什么它又站起来了?截魂揭开底牌:这怪死后魂不散——一缕魂从尸体里飘出来,两秒半飞回右侧的石像,魂到石像…

2026-10-01 14:27 996 技术组
进阶实战游戏功能

蜕壳:怪出生带三页硬壳,壳破四秒虚

【游戏功能】 新刷出来的怪为什么头三刀不掉血?蜕壳给了答案:它出生时带着三页硬壳,壳页一页页替它挨刀——三刀破壳,壳破的那一…

2026-10-01 14:27 996 技术组