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

三环扣:三角链死一伤二,连环清场

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

【游戏功能】

三只怪三角连着链:死一只,另外两只各挨十五;链上再倒一只,最后那只又挨十五——三环扣把"清怪"变成了"连环",杀的顺序对了,链子替你收尾。这篇把整套模块拆开:配置表、三角链表、连环结算、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:三角链死一伤二,连环清场

演示场三只小怪站成三角,两两之间青橙色的链线连着。普攻撂倒第一只:它倒下的同一帧,链线闪光——另外两只各挨十五的红字。再打倒第二只(血已经被链伤磨薄了):最后一环再闪,第三只又挨十五——多半直接见底。三只怪,杀一只带两只,链子替你收尾。演示里试两种杀法:不挑顺序瞎打,和专挑血薄的先杀——连环的账每一环都在变,会算的清得快。三环扣玩的是连锁:杀的不是怪,是链上的第一枚扣。

demo
 fx-trinet

二、底层原理:一张三角链表加一次连环结算

模块的机关是一对搭档。三角链表:三只怪两两连链——链认三角不认距离,拴上的三只谁挨死讯,链条就顺着链传导伤。连环结算:链条上的怪死亡时,其余活口各挨十五——这份十五还能再杀,杀掉的再传,链传到没有活口为止。和溅射那类范围伤害的分野在"连环认链不认位置":溅射看半径,连环看拴链——三只散在半场的怪只要链在就一起疼,挤成一堆没拴链的也各疼各的。

连环为什么会终止?链的十五是"死讯的代价"——代价不衰减的版本三环扣变成无限连锁炮,衰减的版本每一环都比上一环难收,算环就是这门机制的算术。

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

lua
-- @file TriNet.lua
-- 三环扣 —— 三角链死一伤二,连环清场

local TriNet = {}

local CONST = {
    CHAIN_DMG     = 15,

    COLOR_CHAIN   = "#c86830",
    COLOR_DEEP    = "#54240e",
    COLOR_GHOST   = "#f4c8a8",

    ZORDER_CHAIN  = 129,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1054000,
}

local _trio      = {}
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "TNT",
        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 ShowTip(msg)
    if msg and msg ~= "" then SL:ShowSystemTips(msg) end
end

local function AliveCount()
    local n = 0
    for _, tid in ipairs(_trio) do
        if not SL:GetValue("ACTOR_DEAD", tid) then n = n + 1 end
    end
    return n
end

local function ChainHit(exclude, dmg)
    local hit = false
    for _, tid in ipairs(_trio) do
        if tid ~= exclude
            and not SL:GetValue("ACTOR_DEAD", tid) then
            SL:ActorHurt(tid, dmg)
            SL:TipAbove(tid, "链-15")
            hit = true
            if SL:GetValue("ACTOR_DEAD", tid) then
                ChainHit(tid, dmg)
            end
        end
    end
    return hit
end

四、核心代码:完整模块(下·定时器与死亡钩子)

lua
-- 死亡钩子:链上传伤
SL:RegisterLUAEvent(LUA_EVENT_ACTOR_DEATH, "TNT_Chain", function(tid)
    for _, t in ipairs(_trio) do
        if t == tid then
            if AliveCount() > 0 then
                ChainHit(tid, CONST.CHAIN_DMG)
                ShowTip("连环扣开了——一只带一只走")
            end
            break
        end
    end
end)

-- 定时器:链线的存续巡检
if not _scheduler then
    _scheduler = SL:Schedule(function()
        if #_trio < 3 then return end
        local alive = AliveCount()
        if alive == 0 then
            ShowTip("三只全倒——链子把最后一环也收了")
        end
    end, 0.5)
end

SL:ScheduleOnce(function()
    _trio = SL:GetSmallTrio()
    SL:BindDebugButton("清点", function()
        ShowTip("还剩" .. AliveCount() .. "只在链上")
    end)
    ShowTip("技能已加载: 三环扣 (调试按钮触发)")
end, 1.0)

function TriNet.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_ACTOR_DEATH, "TNT_Chain")
    _trio = {}
end

return TriNet

五、机制问答

问:链上的怪能被治愈吗?
答:能——链传伤不传疗,治愈照常生效,链上奶一口也是三只一起稳,这也是链不散的理由。

问:链伤能暴击吗?
答:能——链伤走正常结算,暴击的链环一个暴击带倒两只,连环的账面越暴越好看。

问:链外第四只怪受牵连吗?
答:不受——链只认三只,第四只站边上白看,链外的怪不进这个账本。

问:两环同时倒算一环还是两环?
答:两环——每笔死亡各传各的,同帧双倒就是双倍链伤,链的账按事件数不按帧。

问:最后一只被链伤倒下算通关吗?
答:算——链伤的击杀照样记战绩,链子收的尾也是尾,这一场叫"零刀清场"的极端玩法。

问:链上的怪会自己散开吗?

答:不会——链在阵在,三只怪各守各角,散不开也跑不掉,链就是阵的眼。

问:三环的怪血量不同先杀谁?

答:先杀血厚的——链伤固定十五不挑厚薄,厚血怪多挨一环链就多省三刀平砍。

问:连环能跳环吗?

答:不能——链按三角逐环传,隔环跳传的版本连环变乱码,逐环才是链的规矩。

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

第四笔是链伤的斤两:十五点对两百血的小怪是"两环半清一只"的账——链伤太轻连环变温吞水,太重一只倒全场倒,十五刚好是"每环都得挨一下普攻"的线。第三笔是环数的容量:三环是"一眼算得清"的容量——五环的链要记查账本,两环的链没有连锁感,三环刚好是"心算不超三个数"的容量。第二笔是传导的顺序:同帧多环按链表顺序逐环传——顺序透明玩家才能预演"杀这只带哪只",顺序混乱的连环就是乱账。第一笔是链线的画法:活口之间的链亮、死口的链灭——链的明暗就是战场的人口普查,一眼扫过去剩几只一目了然。常见坑三个:连环的递归没设终止,同帧三环互传栈溢出;链伤的击杀归属挂在链上而非玩家,战绩页漏账;链线的层级压过怪的模型,线盖在怪脸上。

商业服里三环扣是"锁链师流派"的收尾手艺:别人清怪一只只点,他清怪算环收——商城里链线的材质做成品级,麻链、铁链、缚魂链,三角之间那三道一明一暗的链弧就是锁链师的账房。运营落地还有两笔:一段是算环教学——教一句"先杀哪只,链替你算",流派第一课是排击杀顺序;一段是连环榜——按单场连环的总传导伤害排名,算环最精的人有碑。变体做成四环方阵:四只怪四方链——从三角到四方,链师的账本翻倍。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

锁链师的老话只有一句:杀谁不重要,链在就行。

锁链师的第二课:链伤不挑顺序挑时机,薄血怪半血时破一环,连环刚好收完。

锁链师的第三课:链线的明暗就是战场地图,链亮着谁也别想跑。

写完留一句给做连锁系的同学:三环扣卖的是"杀一是杀三"——那三道一明一暗的链弧,是把击杀顺序变成伤害路线的一张环网。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

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

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

LATEST ARTICLES

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

进阶实战游戏功能

磁引:四秒磁点,它的箭全拐进这点碎掉

【游戏功能】 磁点一开,它的箭全拐——四秒里它射出的每一支箭都拐向同一个聚点,到了聚点整支碎掉,一支都够不着你。磁引把"躲箭…

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

钟摆:半场一摆,谁站线上谁挨砸

【游戏功能】 半场一摆两秒一趟的钟摆,砸中站线上的一切——包括被你引过去的怪。钟摆把"地形"变成了武器:它本身不认敌我,你引…

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

铰击:两键同按,铰它一下二十

【游戏功能】 两键同按零点一五秒内——铰击:两把刃铰在一起砸它二十,外加半秒的僵。单按一键只有十点白给。这篇把整套模块拆开:…

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

三环扣:三角链死一伤二,连环清场

【游戏功能】 三只怪三角连着链:死一只,另外两只各挨十五;链上再倒一只,最后那只又挨十五——三环扣把"清怪"变成了"连环",…

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

蓄盾爆:按住攒盾,盾值就是弹量

【游戏功能】 按住攒盾,盾值就是弹量,松手引爆贴脸的怪——蓄盾爆把"防御"改写成了"蓄弹药":盾攒得越厚炸得越疼,攒盾的两秒…

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

三键诀:劈刺扫按对了顺序,一记四十

【游戏功能】 按对 劈→刺→扫 三键,一记四十;按错一环,只值八点平砍。三键诀把连招的顺序做成了考卷:三枚键摆在你面前,顺序…

2026-10-01 16:31 996 技术组