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

接力:用甲减乙的冷却,轮转不断

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

【游戏功能】

用甲减乙二秒,用乙减甲二秒——接力的全部机关就是这一条互减链:两招轮着放,每放一招另一招冷却减二秒,三秒的冷却被轮成不到一秒一放,刀刀不断档。这篇把整套模块拆开:配置表、接力表、互减结算、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:两技轮着放,刀刀不断档

演示场两枚键:「甲!」和「乙!」——各三秒冷却,但互减二秒。点「甲!」:十二点伤害,乙的冷却当场减二秒——"乙✓"闪出来。紧接着点「乙!」:十二点伤害,甲的冷却又减二秒——"甲✓"。两键轮着按,刀刀不断档,一秒一发的节奏比平砍还密。演示里试两种打法:只按甲硬等三秒冷却,和甲乙轮转永不空档——前者的输出是断断续续的脉冲,后者是绵延不断的流水。接力教的是轮转:不只是一招的事,是两招互相成全的循环。

demo
 fx-cdrelay

二、底层原理:一条互减链加一次轮转结算

模块的机关是一对搭档。互减链:甲和乙各挂三秒冷却——用甲的时候乙的冷却减二秒,用乙的时候甲的冷却减二秒,互减的方向是"用谁的冷却谁不动,另一方的冷却往前跳"。轮转结算:因为互减二秒而三秒冷却只剩一秒真空,两招轮着放的节奏是一秒一发——真空的一秒是接力全部的手感来源。和冷却缩减那些百分比折扣的分野在"接力是定值互减不是折扣":冷却缩某某减三成冷却,接力是减二秒的绝对值——百分比在高频技上收益滚雪球,定值减在高频技上收益线性,接力选了后者因为好算。

互减为什么是二秒不是三秒?三秒的互减等于零冷却,接力变成了无限连按;二秒留一秒真空,真空里怪的刀照拍——接力的平衡就靠这一秒的喘息。

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

lua
-- @file CdRelay.lua
-- 接力 —— 用甲减乙的冷却,轮转不断

local CdRelay = {}

local CONST = {
    SKILL_CD      = 3.0,
    RELAY_REDUCE  = 2.0,
    SKILL_DMG     = 12,

    COLOR_RELAY   = "#c89040",
    COLOR_DEEP    = "#503810",
    COLOR_GHOST   = "#f4d8a0",

    ZORDER_RELAY  = 132,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1064000,
}

local _cdA     = 0
local _cdB     = 0
local _scheduler = nil
local _autoInc = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "CDR",
        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 HitTarget(dmg, tag)
    local tid = SL:GetValue("MARK_TARGET_ID")
    if not tid or SL:GetValue("ACTOR_DEAD", tid) then return end
    SL:ActorHurt(tid, dmg)
    SL:TipAbove(tid, tag .. "-" .. dmg)
    SL:PlayRelayHitFx(tid, tag)
    if SL:GetValue("ACTOR_DEAD", tid) then
        ShowTip("它倒了——接力收的尾")
    end
end

function CdRelay.UseA()
    if _cdA > 0 then
        ShowTip("甲在冷——" .. string.format("%.1f", _cdA) .. "秒")
        return
    end
    _cdA = CONST.SKILL_CD
    _cdB = math.max(0, _cdB - CONST.RELAY_REDUCE)
    HitTarget(CONST.SKILL_DMG, "甲")
    ShowTip("甲出了——乙的冷却减二秒")
end

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

lua
-- 乙技入口
function CdRelay.UseB()
    if _cdB > 0 then
        ShowTip("乙在冷——" .. string.format("%.1f", _cdB) .. "秒")
        return
    end
    _cdB = CONST.SKILL_CD
    _cdA = math.max(0, _cdA - CONST.RELAY_REDUCE)
    HitTarget(CONST.SKILL_DMG, "乙")
    ShowTip("乙出了——甲的冷却减二秒")
end

-- 定时器:双冷却推进
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        if _cdA > 0 then _cdA = math.max(0, _cdA - dt) end
        if _cdB > 0 then _cdB = math.max(0, _cdB - dt) end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("甲", function()
        CdRelay.UseA()
    end)
    SL:BindDebugButton2("乙", function()
        CdRelay.UseB()
    end)
    ShowTip("技能已加载: 接力 (调试按钮触发)")
end, 1.0)

function CdRelay.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    _cdA = 0
    _cdB = 0
end

return CdRelay

五、机制问答

问:两技伤害一样吗?
答:一样——接力教的是轮转不是选伤害,甲乙十二点完全相同,区分它们的只有冷却互减的方向。

问:只用甲不用乙行吗?
答:行但亏——甲三秒一刀;甲乙轮转不到一秒一刀,效率差三倍,接力全部的价值就在轮转上。

问:两技同时按算接力吗?
答:算各自出招——同帧按两键各结各的,互减的方向按先后判,但冷却各走各的互不覆盖。

问:接力能传给第三招吗?
答:这版只做双向——两技互减是接力的最小模型,三技以上的甲减乙、乙减丙、丙再减甲是进阶版的功课。

问:冷却归零了再按有额外奖励吗?
答:没有——零冷却按下去就是正常出招,接力不奖励手快只奖励轮转对。

问:接力能和其他冷却缩减叠加吗?

答:能——接力的互减是技能间的联动,装备或天赋的冷却缩减各自独立生效,两套减法一起算。

问:甲和乙的顺序有讲究吗?

答:先甲后乙和先乙后甲效果完全对称——接力教的是轮转不是偏好,两键公平是它最大的魅力。

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

第四笔是互减的斤两:减二秒对三秒冷却是"一秒真空"的余量——互减满额等于零冷却无限连,互减太薄轮转断成脉冲。第三笔是伤害的档位:十二点对十四点挨刀是"输出略亏但节奏赢"的交换——接力技的伤害不必太高因为它的优势在频率。第二笔是冷却的长度:三秒是"轮转后一秒真空"的节拍——冷却太短真空消失变成永动,太长轮转断成脉冲。第一笔是冷却读数的明示:甲乙各自的秒数常驻显示——冷却的读数就是接力的乐谱,玩家看着秒数决定按谁。常见坑三个:互减的结算用了同一帧两次触发,甲减乙乙又减甲无限循环;冷却减到负数没做归零,负冷却让下一招秒回;甲乙的伤害不同但互减相同,玩家全堆用伤害高的那个。

商业服里接力是"琴师流派"的和弦:单音平淡双音成曲——商城里甲乙键的样式做成品级,铜键、玉键、龙纹键,甲乙交替按下时琴弦上跳动的两道光就是琴师的指法。运营落地还有两笔:一段是轮转教学——教一句"甲完了按乙,乙完了按甲",流派第一课是循环不是连招;一段是接力榜——按一分钟内甲乙交替次数排名,轮转最顺的人有碑。变体做成三键轮:三招甲乙丙互减轮转——甲减乙丙再减甲的三向循环,接力从双音变成三和弦。这一篇的演示和整套模块照抄能跑,改的就是 那张配置表。

琴师的要诀就一条:不按冷却走,按互减走。

写完留一句给做循环系的同学:接力卖的是"两招互相成全"——那对一秒一发的甲乙键和头顶不断归零的冷却读数,是把冷却从限制变成节奏的一根互减链条。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

走一格为什么是半秒?拆开996引擎走路状态机

接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…

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

特效总挂在脚后跟上?挂点表选对一行顶十行

【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…

2026-10-03 05:30 996 技术组
进阶实战游戏功能

刀刀都判命中,玩家为什么喊挥空?命中表现差的那一拍

【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…

2026-10-03 05:30 996 技术组
进阶实战游戏功能

怪的皮一会儿绿一会儿红?状态染色的色号表就三列

【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…

2026-10-03 05:30 996 技术组
进阶实战游戏功能

996引擎Buff系统解剖:中毒变绿、冰冻发白是怎么挂上去的

前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…

2026-10-03 05:25 996 技术组
进阶实战游戏功能

编钟纹:五口钟排着敲,一口更比一口疼

【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…

2026-10-03 05:01 996 技术组