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

影从纹:你砍一刀,影子跟半刀

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

【游戏功能】

先抛一个坑:影子的那半刀,为什么要慢半秒才落?跟刀的影子要是和你同时出手,它就是第二个你,热闹是热闹,玩家很快就把它当成了固定的输出倍率。慢半秒的跟刀有自己的节奏——你的刀音落下之后,它的半刀像回声一样追上来,账面上多七点,耳朵里多一声余韵。这篇把影从随行整套写法拆开:唤影出窍、随行跟刀、半拍回声、归位再唤,一段一段照抄能跑。

一、效果演示

演示场侠客身边多出一道半透明的银影。点「唤影!」:影子出窍随行十二秒——你每中一刀,半秒后它补上一记七点的银字小刀,你砍的节奏里多出一声回声。十二秒到影子归位,歇六秒才能再唤。唤与不唤、什么时候唤,输出曲线就在这半刀的回声里厚起来。

mermaid
flowchart TD
A[点唤影] --> B{影子歇够了吗}
B -- 没有 --> C[拦下等CD]
B -- 好了 --> D[影从出窍十二秒]
D --> E[你中一刀]
E --> F[半秒后跟半刀七点]
F --> G{十二秒到了吗}
G -- 没有 --> E
G -- 到了 --> H[归位 歇六秒]
demo
 fx-crest-echo

二、底层原理

影从系统的机关是"随行跟刀"——影子不独立出手,只读你的命中账:你中一刀,半秒后它补半刀七点。这条"读账不掷骰"的规矩让影子永远和你同频:你停手它歇着,你爆发它跟进,影从是输出的回声不是第二台机器。半秒的延迟是回声的魂——同时落的双刀是复制粘贴,慢半拍的跟刀才听得出层次,账面上是七点,体感里是一声应和。
随行有时限:十二秒出窍归位,歇六秒再唤——影子是借来的力,不是常驻的挂件,唤的时机成了小算计:留着急用还是现在就开。影子的画面半透明银色,站位贴在你侧后半格,你动它随动,你出手它虚晃——像不像三分真。幂尔框架这边跟刀挂在命中结算的尾巴上,半秒的延迟用延后结算自检前提,归位回收一条口子清干净。

这套玩法的代码量不到八十行,难的不是跟刀而是那半秒——同时落的是倍率,慢半拍的才是回声。

再看跟刀的延后结算为什么要自检——半秒在战斗里够世界变一次样:怪倒了、窗口关了、你换了目标,影子补刀前都得重新问一遍前提,前提不在就安静作废。延后结算最忌拿着出发时的旧地图走完全程——出发时怪在,落地时怪没了,这一刀要追着空气砍。自检一遍前提,是所有延后账的礼貌。

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

lua
-- @file CrestEcho.lua
-- 影从纹 —— 你砍一刀 影子跟半刀

local CrestEcho = {}

local CONST = {
    DURATION      = 12,
    REST_CD       = 6,
    FOLLOW_DELAY  = 0.5,
    FOLLOW_DMG    = 7,

    AUTOINC_BASE  = 1201200,
}

local _on       = false
local _left     = 0
local _cd       = 0
local _autoInc  = 0

local function ShowTip(msg)
    if msg and msg ~= "" then SL:ShowSystemTips(msg) end
end

local function GenID()
    _autoInc = _autoInc + 1
    return CONST.AUTOINC_BASE + _autoInc
end

function CrestEcho.IsOn() return _on end

-- 唤影: 出窍有时限
function CrestEcho.Summon()
    if _on then
        ShowTip("影从已经跟着了")
        return
    end
    if _cd > 0 then
        ShowTip("影子还没歇够——再等" .. math.ceil(_cd) .. "秒")
        return
    end
    _on = true
    _left = CONST.DURATION
    ShowTip("影从出窍" .. CONST.DURATION .. "秒——你一刀它半刀")
end

四、核心代码:完整模块(下·推进与卸载)

lua
-- 跟刀: 延后结算先自检前提
function CrestEcho.Follow(targetIn)
    if not _on then return 0 end
    local fireIn = CONST.FOLLOW_DELAY
    -- 战斗侧在延迟到点时回调 OnLand 并重新核对 targetIn
    return fireIn, function(stillIn)
        if stillIn and _on then
            ShowTip("影从补刀——" .. CONST.FOLLOW_DMG .. "点")
            return CONST.FOLLOW_DMG
        end
        return 0
    end
end

if not _ticker then
    _ticker = SL:Schedule(function(dt)
        if _cd > 0 then _cd = _cd - dt end
        if not _on then return end
        _left = _left - dt
        if _left <= 0 then
            _on = false
            _cd = CONST.REST_CD
            ShowTip("影从归位——歇六秒再唤")
        end
    end, 0.05)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("唤影!", function()
        CrestEcho.Summon()
    end)
    ShowTip("技能已加载: 影从纹")
end, 1.0)

function CrestEcho.Unload()
    if _ticker then SL:Unschedule(_ticker) end
    _on = false
    _left = 0
end

return CrestEcho

五、机制问答

问:跟刀为什么慢半秒?
答:同时落的双刀是复制粘贴——慢半拍的跟刀才是回声,账上七点耳朵里一声应和。

问:影子为什么不独立出手?
答:读账不掷骰——永远和你同频,你停它歇你爆发它跟进,影从是回声不是第二台机器。

问:随行为什么要限时?
答:借来的力不做常驻挂件——十二秒的窗口让唤的时机成为小算计。

问:补刀前为什么要自检前提?
答:半秒够世界变一次样——怪倒了窗口关了,延后的刀要安静作废,不追着空气砍。

问:影子为什么贴侧后半格?
答:随行的位置感——像不像三分真,影子跟着你走的才像长在身上,钉在原地的只是幻灯。

六、调参与实战怎么用

参数层面三个量——随行时长、跟刀延迟、半刀伤害。延迟半秒是回声的甜点:同拍成倍率,一秒以上断了气。实战里这套读账跟刀的骨架能搬去灵宠协战、亡语追击、余震补刀,全是读命中账、延迟兑现、限时随行一条线。常见坑两个:影子独立出手成了第二输出位;延后结算不自检,刀追空气。

补充一个设计层面的思考——主动型机制的反馈要"先给判断依据,再给判定的结果":预警先亮、窗口先画、结果后到,玩家输赢都输赢在自己看得懂的信息上。判定依据藏起来的主动机制是运气测试器,玩家赢了不知道为什么赢,输了不知道该改什么——信息给足,操作才有成长感。

补充一个维护层面的思考——带位置和窗口的状态,重载的时候要跟着账本一起走:火圈烧到第几秒、窗口还剩几刀、闪身的朝向停在哪一边,这些都是账,不是画面。画面可以重建,账不能丢也不能多——重载后圈还在账没了、账还在圈没了,都是清场清了一半的活。

补充一个工程层面的思考——延后结算的跟随判定要带自检:影子补的那一刀、反噬的那一记,落地前先看怪还在不在场、窗口还开不开,条件不成立就安静作废。延后的结算最会撞上"世界已经变了"的尴尬,每一次延后都要自己重新问一遍前提。

写完留一句给做随行系的同学:玩家要的影子是回声不是替身——慢半秒的跟刀,账薄一声长,听着就踏实。

作者履历与出处

本文由 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 技术组