【游戏功能】
交班计时 = 1.0 —— 交班的那一秒,两个岗哨都在行礼:手离开刀,眼离开敌,全身的门都开着。交班把这一秒做成了机制:双岗每四秒一交班,交班的一秒里俩都白身——打谁都是双倍。这篇把整套模块拆开:配置表、交班表、白身判定、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:双岗交班那一秒,谁都不设防
演示场两支岗哨各守一段,头顶的交班倒计四秒一跳。点「催岗!」:一声哨响把倒计掐到零——两支岗哨同时向中间走,碰面行礼,"白身一秒"的提示挂上两边头顶。这一秒里你的刀砍谁都是二十点的红字——交班的行礼是他们的礼数,也是他们的破绽。一秒一过,礼毕各归各位,刀口回档。演示里试两拍:掐着白身打双倍,和平时硬磨——会数交班的人,一分钟的输出顶不会数的两分钟。交班教的是读表:他们的规矩越严,你的机会越准。
fx-shiftswap
二、底层原理:一张交班节拍表加一次白身判定
模块的机关是一对搭档。交班节拍:两支岗哨共享一条四秒的节拍表——节拍到零,双双向中间点走位、行礼、白身一秒,然后各归各位,节拍重计。白身判定:白身态里两支岗哨的受击都乘二——白身认岗不认人,打哪个都一样,这一秒里没有主次。和破绽那类单体窗口的分野在"白身是双开的":破绽开在一个怪身上,交班开在两支岗哨上——一次窗口两份收益,交班的账天然比单岗的账宽。
交班为什么双双白身而不是轮流?轮流白身的版本先交的先挨打,后交的看戏——双白身才是"礼数误事"的正解:两个人都在行礼,谁也护不了谁。
三、核心代码:完整模块(上·骨架)
-- @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
四、核心代码:完整模块(下·定时器与白身出口)
-- 白身出口:交班期的刀翻倍
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 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 它的拍子一秒六一轮,拍上出刀白给,拍子空当里递刀才是十六点。错拍把"读它的拍"变成递刀的时机学:绿窗一亮,刀递…
【游戏功能】 两刀压进它一拍里——第二刀落定的瞬间它趔趄一秒,趔趄里刀刀翻倍。抢拍把"比它快"做成了机制:它两秒一拍地出手,…
【游戏功能】 按住一点五秒再松手——沉刀的全部仪式就这一按一放:按住时劲往刀上沉,松手那一瞬二十二点的重刀见真章;按不满就松…
【游戏功能】 起手之后零点三秒里再点一下,两刀并成一记十六点的双击斩;没接上,起手就白给了。双击斩把"两击"这个概念拆进输入…
【游戏功能】 它出什么招,你就换什么式——劈克刺、刺克扫、扫克劈,三式相扣的一个圈。挪移换式把猜拳搬进了打架:怪的下一手提前…
【游戏功能】 连珠 = 连珠 + 1 —— 半秒里每按一次涨一格的连珠,五珠攒满就是一记二十五点的重轰。连珠快拳把"手快"直…