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

交班:双岗交班那一秒,谁都不设防

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

【游戏功能】

交班计时 = 1.0 —— 交班的那一秒,两个岗哨都在行礼:手离开刀,眼离开敌,全身的门都开着。交班把这一秒做成了机制:双岗每四秒一交班,交班的一秒里俩都白身——打谁都是双倍。这篇把整套模块拆开:配置表、交班表、白身判定、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:双岗交班那一秒,谁都不设防

演示场两支岗哨各守一段,头顶的交班倒计四秒一跳。点「催岗!」:一声哨响把倒计掐到零——两支岗哨同时向中间走,碰面行礼,"白身一秒"的提示挂上两边头顶。这一秒里你的刀砍谁都是二十点的红字——交班的行礼是他们的礼数,也是他们的破绽。一秒一过,礼毕各归各位,刀口回档。演示里试两拍:掐着白身打双倍,和平时硬磨——会数交班的人,一分钟的输出顶不会数的两分钟。交班教的是读表:他们的规矩越严,你的机会越准。

demo
 fx-shiftswap

二、底层原理:一张交班节拍表加一次白身判定

模块的机关是一对搭档。交班节拍:两支岗哨共享一条四秒的节拍表——节拍到零,双双向中间点走位、行礼、白身一秒,然后各归各位,节拍重计。白身判定:白身态里两支岗哨的受击都乘二——白身认岗不认人,打哪个都一样,这一秒里没有主次。和破绽那类单体窗口的分野在"白身是双开的":破绽开在一个怪身上,交班开在两支岗哨上——一次窗口两份收益,交班的账天然比单岗的账宽。

交班为什么双双白身而不是轮流?轮流白身的版本先交的先挨打,后交的看戏——双白身才是"礼数误事"的正解:两个人都在行礼,谁也护不了谁。

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

lua
-- @file ShiftSwap.lua
-- 交班 —— 双岗交班那一秒,谁都不设防

local ShiftSwap = {}

local CONST = {
    CYCLE_TIME    = 4.0,
    SWAP_TIME     = 1.0,
    WHITE_AMP     = 2.0,

    COLOR_SWAP    = "#5888a8",
    COLOR_DEEP    = "#1e3040",
    COLOR_GHOST   = "#c0d8e8",

    ZORDER_SWAP   = 129,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1035000,
}

local _cycleT    = CONST.CYCLE_TIME
local _swapFx    = nil
local _swapT     = 0
local _cdLeft    = 0
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "SSW",
        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 StartSwap()
    _swapT = CONST.SWAP_TIME
    local ids = SL:GetGuardPair()
    for _, gid in ipairs(ids) do
        SL:FreezeActorAll(gid, CONST.SWAP_TIME)
        SL:PlaySaluteFx(gid)
        SL:TipAbove(gid, "白身")
    end
    SL:PlaySwapGongFx()
    ShowTip("交班了——俩都白身,一秒双倍")
end

function ShiftSwap.Hurry()
    if _cdLeft > 0 then
        ShowTip("岗在催——" .. string.format("%.1f", _cdLeft) .. "秒")
        return
    end
    _cdLeft = 5.0
    _cycleT = math.min(_cycleT, 0.4)
    SL:PlayHurryWhistleFx()
    ShowTip("哨响了——它们提前交班,看好那一秒")
end

四、核心代码:完整模块(下·定时器与白身出口)

lua
-- 白身出口:交班期的刀翻倍
SL:RegisterLUAEvent(LUA_EVENT_BEFORE_HURT, "SSW_White", function(tid, dmg)
    if _swapT > 0 and SL:IsGuard(tid) then
        return math.floor(dmg * CONST.WHITE_AMP)
    end
    return dmg
end)

-- 定时器:节拍推进与交班触发
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _swapT > 0 then
            _swapT = _swapT - dt
            local mp = GetActorPos(SL:GetValue("USER_ID"))
            if _swapFx and mp then
                GUI:setPosition(_swapFx, mp.x, mp.y - 50)
            end
            if _swapT <= 0 then
                ShowTip("班交完了——恢复设防,等下一班")
            end
            return
        end
        _cycleT = _cycleT - dt
        if _cycleT <= 0 then
            _cycleT = CONST.CYCLE_TIME
            StartSwap()
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("催岗", function()
        ShiftSwap.Hurry()
    end)
    ShowTip("技能已加载: 交班 (调试按钮触发)")
end, 1.0)

function ShiftSwap.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_BEFORE_HURT, "SSW_White")
    SafeRemove(_swapFx)
    _swapT = 0
end

return ShiftSwap

五、机制问答

问:交班期它们的攻击也停吗?
答:停——白身是双停,手上的刀和身上的甲一起歇,这一秒里它们连挨打都不会还手。

问:催岗能连吹吗?
答:能但限五秒一吹——连吹只是把节拍提前,不叠加,白身的一秒还是一秒。

问:交班的岗哨死一只怎么办?
答:剩一只自己跟自己交班——单岗的白身照开,规矩比人活得久,这也是交班怪最迂的地方。

问:白身和破绽叠加吗?
答:叠——白身乘二,破势再乘,交班期的破势刀是四倍的账。

问:交班期被推散了还交吗?
答:不交——白身要求两人碰面行礼,推散的这一班直接跳过,节拍重计。

问:交班期能上迟滞吗?

答:能——白身是挨刀的乘区,迟滞是它自己的节奏,两套叠上交班期又疼又慢,岗哨最怕的组合。

问:两只岗哨血量不均先打谁?

答:打白身里血薄的那只——窗口只有一秒,双倍的刀要挑最值得清的岗。

问:白身期的岗哨还会还手吗?

答:一秒里手都抬不起来——行礼的姿势锁死了攻击和移动,白身过的头一拍它们才缓过神还手。

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

第四笔是节拍的密度:四秒一班对一秒的白身是四分之一的窗口占比——节拍太密白身像常驻,太疏一局碰不上两回,四秒刚好是"两刀平砍等一班"的算术。第三笔是白身的深度:翻倍对岗哨三百血是"一秒能砸三十"的窗口——窗口里的伤害要够威胁,不够威胁的窗口等于没有。第二笔是双停的规矩:白身期连它们的攻击一起冻结——只加伤不停手的交班是伪窗口,双停的交班才是真的行礼。第一笔是节拍的可见:头顶倒计加连线——倒计看得见,催岗才有的放矢,藏起来的节拍是没法读的表。常见坑三个:白身期它们的受击闪白顶掉行礼动画;一只死了另一只的白身不取消,对着空气行礼;催岗的哨响和交班的锣声共用一个音,玩家听不出哪声是哪班。

商业服里交班是"更夫流派"的钟点:别人掐血条,他们掐钟点——商城里交班锣的样式做成品级,铜锣、更锣、子午锣,那一声催岗的哨响就是更夫的叫班。运营落地还有两笔:一段是读表教学——教一句"四秒一班,班上一秒金",流派的第一课是背表;一段是掐点榜——按白身期打出的总伤排名,表背得最熟的人有碑。变体做成三班倒:三支岗哨轮转交班,任一时刻总有一班在白身——从掐一秒到排满一分钟的课表,更夫的记性就是输出。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

更夫的顺口溜再补半句:白身一秒金,错过等四秒。

写完留一句给做节拍系的同学:交班卖的是"他们的规矩就是你的表"——那一秒双双行礼的白身,是把敌人的纪律改写成你的输出时刻表的钟点。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

错拍:踩着它的拍子递刀,拍上十六

【游戏功能】 它的拍子一秒六一轮,拍上出刀白给,拍子空当里递刀才是十六点。错拍把"读它的拍"变成递刀的时机学:绿窗一亮,刀递…

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

抢拍:两刀压进它一拍,第二刀震它趔趄

【游戏功能】 两刀压进它一拍里——第二刀落定的瞬间它趔趄一秒,趔趄里刀刀翻倍。抢拍把"比它快"做成了机制:它两秒一拍地出手,…

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

沉刀:按住蓄劲,松手见真章

【游戏功能】 按住一点五秒再松手——沉刀的全部仪式就这一按一放:按住时劲往刀上沉,松手那一瞬二十二点的重刀见真章;按不满就松…

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

双击斩:双击成斩,单击白给

【游戏功能】 起手之后零点三秒里再点一下,两刀并成一记十六点的双击斩;没接上,起手就白给了。双击斩把"两击"这个概念拆进输入…

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

挪移换式:看它的招换你的式,对上了双倍

【游戏功能】 它出什么招,你就换什么式——劈克刺、刺克扫、扫克劈,三式相扣的一个圈。挪移换式把猜拳搬进了打架:怪的下一手提前…

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

连珠快拳:连按攒拳劲,五拳一轰

【游戏功能】 连珠 = 连珠 + 1 —— 半秒里每按一次涨一格的连珠,五珠攒满就是一记二十五点的重轰。连珠快拳把"手快"直…

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