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

挑灯:灯油就是你的弹匣,烧的是时间

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

【游戏功能】

oil = oil - 1 —— 灯芯上两秒烧掉的一滴油,就是挑灯的全部家底:灯亮着,刀足十;油见底,刀软成五。挑灯一次四秒刀十五——费油也快一倍。这篇把整套模块拆开:配置表、灯油表、挑灯结算、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:灯油就是你的弹匣,烧的是时间

演示场玩家身侧挂一盏小灯,十滴油一目了然。开打:灯两秒滴一滴油,每一滴都在替你的刀付账——十点的刀足斤足两。油烧到剩四滴,点「挑灯!」:灯芯"腾"地蹿高,四秒里刀刀十五——金的数字压过灰字,代价是油滴得也快一倍。油烧到零:"灯枯"两个字一出,刀软成五点,连怪都能欺负你。演示里试两笔账:全程普通亮度省着烧,和挑灯狂攻速战速决——油是弹匣,时间是枪膛,打光了的灯连照路都不配。挑灯玩的是灯油经济学:亮,是烧出来的亮。

demo
 fx-lampoil

二、底层原理:一张灯油表加一档亮度结算

模块的机关是一对搭档。灯油表:十滴油的存量,两秒自然烧一滴——烧油认时间不认刀数,站着一动不动油也照样漏,灯油的账是时间账。亮度结算:油在,刀足十;挑灯的四秒里油双倍速烧、刀加五;油尽,刀软五——三档亮度三档刀,油量的读数直接换算伤害的斤两。和血契那类一次付费的分野在"灯油是流水不是一次性":血契割一口付三刀,挑灯的油按秒渗——每一刀的足两都是上一秒的油换的,账渗在时间里。

油尽为什么不直接灭灯停手?灭灯停手的版本灯枯成了强制休息;软刀五点的版本出手权还在——灯枯的玩家还能打,只是打的每一刀都在提醒他该省着点了。

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

lua
-- @file LampOil.lua
-- 挑灯 —— 灯油就是你的弹匣,烧的是时间

local LampOil = {}

local CONST = {
    OIL_MAX       = 10,
    BURN_GAP      = 2.0,
    LIT_GAP       = 1.0,
    LIT_LIFE      = 4.0,
    LIT_AMP       = 5,
    DIM_DMG       = 5,
    BASE_DMG      = 10,

    COLOR_OIL     = "#d0a848",
    COLOR_DEEP    = "#584812",
    COLOR_GHOST   = "#f4e0a8",

    ZORDER_LAMP   = 132,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1024000,
}

local _oil       = CONST.OIL_MAX
local _oilT      = 0
local _litT      = 0
local _cdLeft    = 0
local _lampFx    = nil
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "LPO",
        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 CurrentOut()
    if _oil <= 0 then return CONST.DIM_DMG end
    if _litT > 0 then return CONST.BASE_DMG + CONST.LIT_AMP end
    return CONST.BASE_DMG
end

function LampOil.Trim()
    if _cdLeft > 0 then
        ShowTip("灯在挑——" .. string.format("%.1f", _cdLeft) .. "秒")
        return
    end
    if _litT > 0 then
        ShowTip("灯已经亮了——还剩" .. string.format("%.1f", _litT) .. "秒")
        return
    end
    if _oil < 4 then
        ShowTip("油见底了——挑不动这四秒")
        return
    end
    _cdLeft = 4.0
    _litT = CONST.LIT_LIFE
    SL:PlayTrimFx(SL:GetValue("USER_ID"))
    SL:TipAboveMe("挑灯!")
    ShowTip("灯挑亮了——四秒刀十五,费油也快一倍")
end

四、核心代码:完整模块(下·定时器与亮度结算)

lua
-- 亮度结算:三档刀按油定
SL:RegisterLUAEvent(LUA_EVENT_MELEE_HIT, "LPO_Out", function(tid)
    local base = SL:GetValue("HIT_DAMAGE", tid) or CONST.BASE_DMG
    if _oil <= 0 then
        return CONST.DIM_DMG - base
    end
    if _litT > 0 then
        return CONST.BASE_DMG + CONST.LIT_AMP - base
    end
    return 0
end)

-- 定时器:烧油与灯芯
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _oil <= 0 then return end
        _oilT = _oilT - dt
        if _oilT <= 0 then
            _oilT = _litT > 0 and CONST.LIT_GAP or CONST.BURN_GAP
            _oil = _oil - 1
            if _oil <= 0 then
                _oil = 0
                _litT = 0
                ShowTip("灯枯了——油一滴不剩,刀软成五点")
            end
        end
        if _litT > 0 then
            _litT = _litT - dt
            if _litT <= 0 then
                ShowTip("灯暗回去——正常亮度,省着点烧")
            end
        end
        local myID = SL:GetValue("USER_ID")
        local mp = GetActorPos(myID)
        if _lampFx and mp then
            GUI:setPosition(_lampFx, mp.x + 40, mp.y - 96)
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("挑灯", function()
        LampOil.Trim()
    end)
    ShowTip("技能已加载: 挑灯 (调试按钮触发)")
end, 1.0)

function LampOil.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_MELEE_HIT, "LPO_Out")
    SafeRemove(_lampFx)
    _oil = CONST.OIL_MAX
end

return LampOil

五、机制问答

问:灯枯了还能挑吗?
答:挑不动——四秒挑灯费四滴油,一滴油都没有的灯芯挑不出火苗,先等回油再说。

问:油是打架才烧吗?
答:不是——油按秒渗,站着不动也烧,灯油账是时间账,这是它和一切按刀计费机制的分歧点。

问:挑灯的双倍烧会烧穿吗?
答:会——亮着的四秒烧四滴,油少于四滴挑灯被驳回,门槛写在明处,免得挑到一半灯枯。

问:油会自己回吗?
答:会回得很慢——每二十五秒蹭回一滴,回油是保底不是盼头,主粮还得省着烧。

问:灯枯的五点能吃加成吗?
答:能——软刀走正常结算,破势照加,灯枯不封结算的上限。

六、调参指南与商业服怎么用

第四笔是烧滴的节奏:两秒一滴对十滴油是二十秒的常亮——烧太快玩家的眼睛一直盯着油表,太慢灯油成了摆设,二十秒刚好是"一场短架烧不完、一场长架要算计"的线。第三笔是挑灯的杠杆:加五点对四秒双倍烧是"快攻专用"的定位——杠杆太轻不值得费油,太重挑灯变成常驻爆发。第二笔是灯枯的底线:五点保底是"能出手但抬不起头"的档——零伤的灯枯直接没收出手权,五点的软刀还留个念想。第一笔是油格的明账:十滴油一格格画在灯边——油的余量就是伤害的预期,玩家看油打刀,账目透明才有省油的讲究。常见坑三个:挑灯的双倍烧漏了首滴,开闸瞬间白赚;灯枯和挑灯的判定同时到,先后没掰清;回油在挂机时也涨,挂机回油把省油玩法磨平了。

商业服里挑灯是"掌灯流派"的家计:别人攒怒气,他省灯油——商城里灯的样式做成品级,纸灯、纱灯、琉璃灯,挑灯那一蹿的灯苗就是掌灯玩家的火力宣言。运营落地还有两笔:一段是省油教学——教一句"油是时间不是子弹",流派第一课是算账;一段是长明榜——按单场灯不枯的最长战斗排名,最会省的人有碑。变体做成双芯灯:油过半时挑灯费油减半——油多的玩家烧得任性,油少的省得精细,一盏灯两本账。这一篇的演示和整套模块照抄能跑,改的就是 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 技术组