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

连痛:拴住两只打一只,另一只陪疼

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

【游戏功能】

拴住两只打一只,另一只陪三成——连痛把"打击"变成了"打击们":紫线一拴,两只怪共担疼痛,你打左边的每一刀,右边的那只都要陪三成。这篇把整套模块拆开:配置表、紫线构件、陪痛结算、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:拴住两只打一只,另一只陪疼

演示场两只小怪各站一头。点「连痛!」:一条紫线在它们之间拱起来——拴上了。普攻左边的:十点伤害之外,右边的蹦出"陪三"——你打一只,另一只陪着疼三成。换打右边的,左边的照样陪。演示里算一笔账:连痛状态下一刀等于十三点总伤——比单体输出多三成,代价是拴上之前得先把它们赶到一条线上。连痛玩的是串联:一只的疼,两只来担。

demo
 fx-painlink

二、底层原理:一条紫线构件加一份陪痛结算

模块的机关是一对搭档。紫线构件:连痛挂上一条拱起的紫线——线认两只活口,死一只线断,断线的两只各归各的账。陪痛结算:拴线期对任何一方的伤害,另一方按三成陪痛——陪痛走真实结算不吃减免,陪是陪足的。和群体溅射那些范围伤害的分野在"陪痛认拴不认位置":溅射看距离,连痛看拴线——拴上的两只隔半场也一起疼,没拴的贴在一起也各疼各的。

陪痛为什么只有三成不到一半?陪痛过半的版本两拴怪的战斗变成单体输出的放大器,拴线成了必备起手;三成刚好是"值得拴、不值得只靠"的搭配位。

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

lua
-- @file PainLink.lua
-- 连痛 —— 拴住两只打一只,另一只陪疼

local PainLink = {}

local CONST = {
    LINK_SHARE    = 0.3,
    LINK_RADIUS   = 200,

    COLOR_LINK    = "#c04080",
    COLOR_DEEP    = "#4a1030",
    COLOR_GHOST   = "#f0b8d4",

    ZORDER_LINK   = 129,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1050000,
}

local _pairA     = 0
local _pairB     = 0
local _linked    = false
local _linkFx    = nil
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "PNK",
        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 PickPair()
    local list = SL:GetAllActorsInView()
    if #list < 2 then return nil end
    return list[1], list[2]
end

function PainLink.Link()
    if _linked then
        ShowTip("线还拴着——两只一起疼")
        return
    end
    local a, b = PickPair()
    if not a or not b then
        ShowTip("得两只都在——少一只拴不住")
        return
    end
    _pairA, _pairB = a, b
    _linked = true
    SafeRemove(_linkFx)
    _linkFx = GUI:Layout_Create(GUI:Attach_SceneF(),
        GenID("Link"), 0, 0, 0, 0, false)
    GUI:setLocalZOrder(_linkFx, CONST.ZORDER_LINK)
    SL:PlayLinkUpFx(a, b)
    SL:TipAbove(a, "拴!")
    SL:TipAbove(b, "拴!")
    ShowTip("紫线拴上了——打一只,另一只陪三成")
end

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

lua
-- 陪痛结算:拴线期打一只陪一只
SL:RegisterLUAEvent(LUA_EVENT_BEFORE_HURT, "PNK_Share", function(tid, dmg)
    if not _linked then return dmg end
    local other = 0
    if tid == _pairA then other = _pairB end
    if tid == _pairB then other = _pairA end
    if other ~= 0 and not SL:GetValue("ACTOR_DEAD", other) then
        local share = math.max(1,
            math.floor(dmg * CONST.LINK_SHARE))
        SL:ActorHurt(other, share)
        SL:TipAbove(other, "陪-" .. share)
        SL:PlayShareFx(other)
        if SL:GetValue("ACTOR_DEAD", other) then
            ShowTip("陪疼的那只倒了——线还拴着活口")
        end
    end
    return dmg
end)

-- 定时器:紫线跟脚
if not _scheduler then
    _scheduler = SL:Schedule(function()
        if not _linked then return end
        local ap = GetActorPos(_pairA)
        local bp = GetActorPos(_pairB)
        if _linkFx and ap and bp then
            GUI:setPosition(_linkFx,
                (ap.x + bp.x) / 2,
                (ap.y + bp.y) / 2 - 80)
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("连痛", function()
        PainLink.Link()
    end)
    ShowTip("技能已加载: 连痛 (调试按钮触发)")
end, 1.0)

function PainLink.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_BEFORE_HURT, "PNK_Share")
    SafeRemove(_linkFx)
    _linked = false
    _pairA = 0
    _pairB = 0
end

return PainLink

五、机制问答

问:拴线有距离限制吗?
答:拴的时候要都在视野里——拴上之后线认拴不认距离,隔半场的两只照样一起疼,紫线比距离长。

问:陪痛的那只死了线断吗?
答:不断——线认两只的活口,陪痛的那只倒下线还拴着活口,活口死了线才散。

问:陪痛能触发它的反伤吗?
答:能——陪痛走真实结算,反伤怪被拴进来会陪着疼还弹刺,拴反伤怪前先掂量。

问:玩家能被拴进线里吗?
答:不能——线只拴怪的阵营,拴人的版本连痛变成双刃锯,谁都不敢出手。

问:两只拴着的怪互相打算什么?
答:各疼各的——它们的互殴不经过陪痛结算,拴线只认玩家的伤害,它们的内讧是它们的私账。

问:连痛线和禁足能叠吗?

答:能——拴线管陪痛,禁足管腿,两套叠上拴着的两只谁也跑不掉谁也躲不开疼。

问:拴线期能换目标打另一只吗?

答:能——线拴的是两只的关系,打哪只都是主伤,另一只都陪三成,换着打总账一样。

问:连痛线能拴头目和小怪吗?

答:能——线认阵营不认体型,头目挨十小怪陪三,拴头目和小怪是牵机师的高阶课。

问:拴线期换场景线断吗?

答:断——线不过图,切场景即散,散了重拴就是,线的账不过夜。

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

第四笔是陪痛的比例:三成对十点平砍是"一刀两伤十三"的总账——比例过半拴线成了必备起手,一成的比例拴线沦为演出,三成刚好是"值得拴、不值得只靠"的搭配位。第三笔是拴线的门槛:双活口在场是拴线的底——门槛再低拴尸拴空,太高全场凑不齐一双。第二笔是紫线的弧度:线要拱起来不能拉直线——拱起的紫线有"绷着劲"的感觉,直线看着像装饰。第一笔是陪痛的分层:直打的数字大、陪痛的数字小且带"陪"字——两笔账一眼分清主次,玩家的输出认知才不乱。常见坑三个:陪痛的共享被减免二次削减,陪的比例越打越小;拴线期一方被控另一方跟着僵,控制串联成连锁;线段跟脚跟不上传送,紫线飘在半空。

商业服里连痛是"牵机师流派"的独门线:别人的刀砍一个口,他的线让一口变两口——商城里紫线的材质做成品级,丝线、筋线、缚魂线,那道拱在两怪之间的紫弧就是牵机师的手笔。运营落地还有两笔:一段是拴线教学——教一句"把它们赶到一条线上再拴",流派第一课是赶位置;一段是牵机榜——按拴线期陪痛的总伤排名,线拴得最值的人有碑。变体做成三角线:拴三只成环,每一只陪另外两只各一成五——从一拖一到一拖二,牵机师的线越织越密。这一篇的演示和整套模块照抄能跑,改的就是 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 技术组