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

抛砖:一块砖砸出个破绽,接住就是双倍

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

【游戏功能】

它接招的那一秒,就是你的那一秒。抛砖把这句拳谚做成了机制:一块砖头砸过去,它本能抬手格挡——格挡的一秒二里,招式用老、门户大开,这一刀翻倍。这篇把整套模块拆开:配置表、砖头构件、格挡判定、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:一块砖砸出个破绽,接住就是双倍

演示场点「抛砖!」:一块青砖划着弧线砸向怪——它本能地抬臂格挡,"格挡了!"三个字挂上头顶:一秒二的破绽窗口开着。窗口里你的刀是二十点的金字——双倍的账打在它举着的手臂上。窗口一过,它放下手臂照常出刀。再抛一块,再来一轮。演示里看门道:砖不伤人,砖是请柬——它每一次接招,都是在给你签字画押。抛砖玩的是条件反射:它的本能越守规矩,你的双倍越准时。

demo
 fx-baitbrick

二、底层原理:一块飞行砖加一次格挡开窗

模块的机关是一对搭档。飞行砖:砖沿抛物线飞向怪——砖不结伤害账,它是一份"请格挡"的请柬,怪的本能会接下这份请柬。格挡开窗:接到请柬的那一帧,怪挂一点二秒的格挡态——格挡态里它不攻击、不追击、门户大开,挨刀翻倍。和打断那类取消攻击的分野在"打断是摁停,抛砖是请动":打断让它这一招发不出来,抛砖让它多做一个动作——格挡这个动作占用的那一秒二,才是全套机制真正的产出。

它为什么会本能格挡?守规矩的怪对飞行物一律抬手——这份守规矩写在它的行为表第一行,抛砖只是照着它的规矩递了张条子。

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

lua
-- @file BaitBrick.lua
-- 抛砖 —— 一块砖砸出个破绽,接住就是双倍

local BaitBrick = {}

local CONST = {
    BRICK_SPEED   = 320,
    BRICK_ARC     = 60,
    BRICK_GRAV    = 160,
    GUARD_TIME    = 1.2,
    BRICK_CD      = 3.0,
    OPEN_AMP      = 2.0,

    COLOR_BRICK   = "#906848",
    COLOR_DEEP    = "#3e2a14",
    COLOR_GHOST   = "#e8d0b0",

    ZORDER_BRICK  = 134,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1038000,
}

local _bricks     = {}
local _guardT     = 0
local _guardID    = 0
local _cdLeft     = 0
local _scheduler  = nil
local _autoInc    = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "BTB",
        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 OpenGuard(tid)
    _guardT = CONST.GUARD_TIME
    _guardID = tid
    SL:FreezeActorAll(tid, CONST.GUARD_TIME)
    SL:PlayGuardPoseFx(tid)
    SL:TipAbove(tid, "格挡了!")
    ShowTip("它接招了——一秒二破绽,打点上加双倍")
end

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

lua
-- 抛砖入口
function BaitBrick.Throw()
    if _cdLeft > 0 then
        ShowTip("砖在飞——" .. string.format("%.1f", _cdLeft) .. "秒")
        return
    end
    if _guardT > 0 then
        ShowTip("它正格挡——快打!")
        return
    end
    local tid = SL:GetValue("MARK_TARGET_ID")
    local tp = GetActorPos(tid)
    local myID = SL:GetValue("USER_ID")
    local mp = GetActorPos(myID)
    if not tid or not tp or not mp then return end
    _cdLeft = CONST.BRICK_CD
    SL:SpawnProjectile(myID, tp.x - mp.x, CONST.BRICK_ARC,
        CONST.BRICK_SPEED, CONST.BRICK_GRAV,
        function(hitX)
            if math.abs(hitX - tp.x) <= 26 then OpenGuard(tid) end
        end)
    SL:PlayBrickTossFx(myID)
    ShowTip("砖出去了——它一接招破绽就开")
end

-- 破绽出口:格挡期的刀翻倍
SL:RegisterLUAEvent(LUA_EVENT_BEFORE_HURT, "BTB_Amp", function(tid, dmg)
    if _guardT > 0 and tid == _guardID then
        return math.floor(dmg * CONST.OPEN_AMP)
    end
    return dmg
end)

-- 定时器:破绽倒计时
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _guardT > 0 then
            _guardT = _guardT - dt
            local mp = GetActorPos(_guardID)
            if _guardFx and mp then
                GUI:setPosition(_guardFx, mp.x, mp.y - 70)
            end
            if _guardT <= 0 then
                ShowTip("它放下手了——再抛一块")
            end
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("抛砖", function()
        BaitBrick.Throw()
    end)
    ShowTip("技能已加载: 抛砖 (调试按钮触发)")
end, 1.0)

function BaitBrick.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_BEFORE_HURT, "BTB_Amp")
    SafeRemove(_guardFx)
    _guardT = 0
end

return BaitBrick

五、机制问答

问:格挡的砖会砸疼它吗?
答:不会——砖是请柬不是炮弹,零伤害,它的疼在后面那一刀上。

问:破绽期能接几个刀?
答:一个窗口随便打——格挡的一点二秒里刀刀双倍,窗口不认刀数只认时间。

问:它格挡的时候会追人吗?
答:不会——格挡态冻结行动,它举着手臂站在原地,追击的账等放下手再算。

问:砖被别的弹道撞掉了怎么办?
答:白抛——砖是实体,半路被截就没人接招,抛砖的弹道也要挑干净的路走。

问:格挡和眩晕叠加吗?
答:不叠——它只做一个动作,眩晕来了格挡取消,控住挨平价,站着的破绽才翻倍。

问:抛砖和撩拨能配合吗?

答:绝配——砖引它格挡定身,撩拨的火气照涨,格挡完火气满上头冲锋,一套连招把它的行为表全按了一遍。

问:砖会砸醒周围的怪吗?

答:会——砖落地的动静不小,抛砖前看清邻居,别一块砖引来一窝。

问:格挡期能接控制吗?

答:能——格挡冻它的手脚不挡状态,晕住的一个格挡姿势原地保持,破绽和眩晕一起生效。

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

第四笔是窗口的深度:一点二秒对三点砖冷却是"一砖一窗"的循环——窗口太短刀没落它手就放,太长格挡变成定身。第三笔是翻倍的档位:双倍对十点平砍是二十的接招账——翻倍不足一成五的版本抛砖白抛,两倍五的版本格挡期成了处刑台。第二笔是砖的弧线:六十步的抛物高是"看得见起落"的礼数——砖飞得太平像暗器,太高像抛绣球,六十步刚好是一块砖的体面。第一笔是格挡的姿势:它要真的抬臂、真的停步——格挡的姿势越认真,破绽的可信度越高,姿势糊弄的格挡连玩家都骗不过。常见坑三个:格挡态叠上眩晕两套冻结打架;砖的碰撞窗太宽,隔着半个身位也算接招;破绽期的双倍漏乘软刀,气尽加格挡出负收益。

商业服里抛砖是"拳师流派"的开手礼:不直接打,先递一块砖看你接不接——商城里砖的样式做成品级,青砖、铁砖、碑文砖,那道划着弧线飞过去的砖影就是拳师的开手式。运营落地还有两笔:一段是接招教学——教一句"它抬手的那一秒就是你的",流派第一课是懂它的本能;一段是破绽榜——按格挡期打出的总伤排名,接招接得最准时的人有碑。变体做成连环砖:格挡期里再抛一块,它换手接招破绽续期——从一砖一窗到砖砖不绝,拳师的连环手艺。这一篇的演示和整套模块照抄能跑,改的就是 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 技术组