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

迟滞咒:咒它出手慢一倍,节奏全乱招招落空

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

【游戏功能】

M.at = M.at * 2 —— 就这一行,让一只盯了三天的速攻怪从"碰不得"变成"随便打"。怪的可怕从来不在单下一击有多疼,在它两秒一抬的节奏:你掐不准它抬手,就只能挨。迟滞咒把这条节奏拦腰拽慢一倍,四秒里它出手拖、走路晃,招招落在你半步之外。这篇把整套模块拆开:配置表、迟滞构件、节奏改写、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:抬手慢一倍,节奏全乱

演示场先看怪的原始节奏:两秒一抬手,抬手到落拳零点二秒,走路匀速。点「迟滞!」:怪的脚下泛起一圈青灰色的咒环,头顶挂出"迟滞 四秒"——它的抬手拖到四点八秒一抬,落拳的抬臂慢得能看清每一帧,走路一步三晃。咒散的瞬间节奏猛地弹回两秒一抬——弹回的那一下如果不留神,最容易被反咬。演示里盯着看两轮就能体会:迟滞的四秒不是减伤的四秒,是"它把你当木桩"的四秒。

demo
 fx-sluggish

二、底层原理:一个周期改写加一个速率开关

迟滞咒的机关是一对搭档。周期改写:怪的出招计时器在结咒的瞬间把周期乘二——两秒一抬变四秒一抬,抬手前摇同步拉长,落拳的延迟也翻倍。速率开关:走路速度减半、动作帧率从每秒九帧拖到五帧——帧率一慢,整个模型看着都"沉"了,视觉的慢和数值的慢是同一套开关。和眩晕定身的分野在"能动但慢":被迟滞的怪照常出手照常走位,只是全套动作乘了零点五的速率——控制系剥夺它的行动,迟滞系只是给它上秤砣。

为什么改周期而不是直接削伤害?削伤害的版本怪照旧两秒一抬,玩家的走位节奏不用变,迟滞就成了一个数字;改周期的版本玩家要重新学一遍它的出手点,节奏的错位感才是迟滞咒的玩法本体。

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

lua
-- @file Sluggish.lua
-- 迟滞咒 —— 咒它出手慢一倍,节奏全乱

local Sluggish = {}

local CONST = {
    SLOW_LIFE     = 4.0,
    SLOW_CD       = 6.0,
    RATE_ATK      = 2.0,
    RATE_MOVE     = 0.5,
    RATE_ANIM     = 0.55,

    COLOR_SLOW    = "#9098c8",
    COLOR_DEEP    = "#2e3450",
    COLOR_GHOST   = "#d0d4ec",

    ZORDER_CURSE  = 131,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 989000,
}

local _slowT     = 0
local _slowID    = 0
local _cdLeft    = 0
local _curseFx   = nil
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "SLG",
        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 ApplySlowRate(id)
    SL:SetActorRate(id, "atk", CONST.RATE_ATK)
    SL:SetActorRate(id, "move", CONST.RATE_MOVE)
    SL:SetActorRate(id, "anim", CONST.RATE_ANIM)
end

local function ClearSlowRate(id)
    SL:SetActorRate(id, "atk", 1.0)
    SL:SetActorRate(id, "move", 1.0)
    SL:SetActorRate(id, "anim", 1.0)
end

function Sluggish.Cast()
    if _cdLeft > 0 or _slowT > 0 then return end
    local tid = SL:GetValue("MARK_TARGET_ID")
    if not tid then return end
    _cdLeft = CONST.SLOW_CD
    _slowT = CONST.SLOW_LIFE
    _slowID = tid
    ApplySlowRate(tid)
    _curseFx = GUI:Layout_Create(GUI:Attach_SceneF(),
        GenID("Curse"), 0, 0, 0, 0, false)
    GUI:setLocalZOrder(_curseFx, CONST.ZORDER_CURSE)
    SL:PlayCurseFx(tid)
    SL:TipAbove(tid, "迟滞!")
    ShowTip("咒上了——四秒里它出手慢一倍")
end

四、核心代码:完整模块(下·定时器与速率回收)

lua
-- 定时器:咒期倒计时与速率回收
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _slowT > 0 then
            _slowT = _slowT - dt
            local tp = GetActorPos(_slowID)
            if _curseFx and tp then
                GUI:setPosition(_curseFx, tp.x, tp.y - 78)
            end
            if _slowT <= 0 or not tp
                or SL:GetValue("ACTOR_DEAD", _slowID) then
                _slowT = 0
                ClearSlowRate(_slowID)
                SafeRemove(_curseFx)
                ShowTip("咒散了——它的节奏回来了,当心反咬")
            end
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("迟滞", function()
        Sluggish.Cast()
    end)
    ShowTip("技能已加载: 迟滞咒 (调试按钮触发)")
end, 1.0)

-- 卸载兜底:速率必须还原,绝不能带出战斗
function Sluggish.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    if _slowT > 0 then ClearSlowRate(_slowID) end
    SafeRemove(_curseFx)
end

return Sluggish

五、机制问答

问:迟滞能和冻结叠吗?
答:不能——同一目标只认一条速率链,冻结的零速优先、迟滞靠边站,链式速率改成乘法叠出来负数就是事故。

问:怪被迟滞后攻速装还有效吗?
答:有效——装备攻速乘在迟滞之后的速率上,四点八秒的抬手配攻速装能拉回三点多,氪金对抗迟滞是成立的商业逻辑。

问:抬手拉长了玩家占多大便宜?
答:前摇翻倍意味着走位窗口翻倍——原来零点二秒的躲刀窗变零点四秒,迟滞的价值不是纸面数字,是全战斗最奢侈的资源:反应时间。

问:咒可以驱散吗?
答:可以——驱散类清速率链,迟滞被驱散时速率当场还原,这也是迟滞咒克制不了净化流的原因,一个流派总要有天敌。

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

第四笔是倍率的心里账:乘二是"明显慢但还能接受"的档位——乘三的版本怪抬手慢得像幻灯片,滑稽感盖过压迫感;乘一点五玩家根本看不出变慢。第三笔是咒期的长度:四秒对它两秒的原周期是两轮完整出手被拖成一轮——咒期里玩家能安全打两到三轮普攻,这个交换比才值得花六秒冷却。第二笔是帧率的视觉档:动画帧率零点五五配移动零点五是"拖泥带水"的观感甜点——帧率和速率不配套,模型慢了脚底却飞快,看着像鬼畜。第一笔是散咒的提醒:咒散的瞬间要给玩家一个明确的音效提示——节奏弹回原速的那一拍最容易挨反打,提醒到位了散咒才是博弈点不是坑点。常见坑三个:怪死亡速率没还原,下一只同款怪继承了秤砣;咒期切场景没回收,带咒出战斗的怪永久迟滞;速率写进基础值而不是乘区,咒散后找不到还原的依据。

商业服里迟滞咒是"教头流派"的看家本事:不靠伤害靠节奏,把怪的出手点掰开揉碎教给玩家——商城里咒环的样式做成品级,青环、墨环、鎏金环,咒环落下的那一秒就是教头的戒尺。运营落地还有两笔:一段是速攻怪的对策提示——遇到两秒一抬的速攻怪时弹一句"试试迟滞咒",机制教学嵌进关卡比嵌进新手引导自然;一段是咒期的伤害统计——迟滞期打出的伤害单列一栏,教头玩家看着"咒期输出占比"就有了练的方向。变体做成迟滞领域:咒落到地上不跟怪走,站进圈的怪全体慢半拍——单体咒长成了控场阵。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

写完留一句给做控制系的同学:迟滞咒卖的是"它的节奏归我管"——四秒里它抬手的每一个慢动作,都是你走位的教学片,慢下来,才看得清。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

迷沙:扬一把沙糊它眼,它举着刀也够不着你

【游戏功能】 远程怪的箭为什么总是躲不开?因为它看得比你远——两百步外它就开弓,箭到面前你才听见风声。迷沙给的就是个土办法:…

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

逆鳞:血见三成它红了眼,打你狠挨得更狠

【游戏功能】 为什么老猎人打怪总要留一手,血见三成了反而越打越小心?因为逆鳞要起了——血量压进三成线的怪会红眼:出手快一倍、…

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

封脉:掐断它的杀劲,四秒里狂也狂不起来

【游戏功能】 排查一份战斗日志走到半夜:同一个怪的同一套普攻,有时十四点有时二十二点,装备、等级、面板全对不上。最后在它的状…

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

禁足:一钉钉住它的脚,四秒里哪儿也去不了

【游戏功能】 放风筝的怪有多气人?它永远比你快半步:你追它退,你退它射,血条磨了十分钟愣是没近过身。禁足给的就是那句解气的话…

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

卧薪:站定两秒不挪步,蓄出来那刀双倍

【游戏功能】 守塔的那位老哥出过一单名场面:全队都在跑位,就他站在怪堆里一动不动——三秒后他一刀把满血怪劈掉了小半管。后来复…

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

血契:割自己一刀换三刀狠的,血债血偿

【游戏功能】 明明攻击力一样,为什么有人三刀能顶别人五刀?血契的答案是:那三刀里掺着他自己的血——开契的一瞬扣六十点血,换接…

2026-10-01 11:50 996 技术组