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

磁引:四秒磁点,它的箭全拐进这点碎掉

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

【游戏功能】

磁点一开,它的箭全拐——四秒里它射出的每一支箭都拐向同一个聚点,到了聚点整支碎掉,一支都够不着你。磁引把"躲箭"改成了"收箭":你不闪不避,开个磁点看它的箭一箭一箭撞碎在空气里。这篇把整套模块拆开:配置表、磁点构件、聚碎结算、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:四秒磁点,它的箭全拐进这点碎掉

演示场的怪是个勤快的弓手,一点六秒一支箭。点「磁引!」:一枚紫色的磁点在半场亮起——它射出的箭飞到半路齐齐拐弯,一支支钻进磁点碎成紫光。四秒里拦下三支,"已碎三支·省三十六点"的账挂在角落——三十六点血是省下来的实打实。磁散了,它的箭恢复直飞——该躲还得躲。演示里算一笔账:磁引的四秒配上它的勤快,等于白送半管血。磁引玩的是改写:箭还是那些箭,路不是那条路了。

demo
 fx-magnetpull

二、底层原理:一枚磁点构件加一次聚碎判定

模块的机关是一对搭档。磁点构件:磁引的四秒里半场立一个聚点——它的每一支箭飞到聚点十四步内就整体碎裂,碎箭不出紫环不出伤。聚碎判定:碎箭不结伤害只记减免——每碎一支在减免账上记十二点,账目挂在角落一格格念。和迟箭那类弹道减速的分野在"迟箭让箭变慢、磁引让箭改道":迟箭的箭还能飞到终点,磁引的箭半路就没了——一个是给箭降速,一个是给箭判死刑。

碎箭为什么不算玩家的输出?碎箭是防守减免不是进攻输出——记在承伤减免的账上,输出榜的干净就是这么守出来的。

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

lua
-- @file MagnetPull.lua
-- 磁引 —— 四秒磁点,它的箭全拐进这点碎掉

local MagnetPull = {}

local CONST = {
    MAG_LIFE      = 4.0,
    MAG_CD        = 5.0,
    MAG_POINT_X   = 340,
    MAG_POINT_Y   = -60,
    EAT_RADIUS    = 14,

    COLOR_MAG     = "#8868b8",
    COLOR_DEEP    = "#2a1a52",
    COLOR_GHOST   = "#d8c8f4",

    ZORDER_MAG    = 130,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1058000,
}

local _magT      = 0
local _magX      = CONST.MAG_POINT_X
local _saved      = 0
local _cdLeft    = 0
local _magFx     = nil
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "MGP",
        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

function MagnetPull.Cast()
    if _cdLeft > 0 or _magT > 0 then return end
    local tid = SL:GetValue("MARK_TARGET_ID")
    if not tid then return end
    _cdLeft = CONST.MAG_CD
    _magT = CONST.MAG_LIFE
    SafeRemove(_magFx)
    _magFx = GUI:Layout_Create(GUI:Attach_SceneF(),
        GenID("Mag"), CONST.MAG_POINT_X, 0, 0, 0, false)
    GUI:setLocalZOrder(_magFx, CONST.ZORDER_MAG)
    SL:PlayMagnetUpFx(CONST.MAG_POINT_X)
    SL:TipAboveMe("磁引!")
    ShowTip("磁点开了——四秒里它的箭全拐进这点")
end

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

lua
-- 聚碎结算:磁期箭体到点即碎
SL:RegisterLUAEvent(LUA_EVENT_BOLT_TICK, "MGP_Eat", function(list)
    if _magT <= 0 then return end
    for i = #list.enemy, 1, -1 do
        local b = list.enemy[i]
        if math.abs(b.x - _magX) <= CONST.EAT_RADIUS then
            SL:PlayShatterFx(b.x, b.y)
            _saved = _saved + 1
            table.remove(list.enemy, i)
            ShowTip("拦下一支——已经省了" .. _saved * 12 .. "点血")
        end
    end
end)

-- 定时器:磁点倒计时与磁环跟脚
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _magT > 0 then
            _magT = _magT - dt
            if _magFx then
                GUI:setPosition(_magFx, _magX,
                    GetActorPos(SL:GetValue("USER_ID"))
                    and select(2, GetActorPos(SL:GetValue("USER_ID")))
                    or 0)
            end
            if _magT <= 0 then
                SafeRemove(_magFx)
                _magFx = nil
                ShowTip("磁散了——它的箭恢复直飞")
            end
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("磁引", function()
        MagnetPull.Cast()
    end)
    ShowTip("技能已加载: 磁引 (调试按钮触发)")
end, 1.0)

function MagnetPull.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_BOLT_TICK, "MGP_Eat")
    SafeRemove(_magFx)
    _magT = 0
    _saved = 0
end

return MagnetPull

五、机制问答

问:磁点吸自己的箭吗?
答:不吸——磁点只对敌方弹道生效,自己的箭该飞哪儿飞哪儿,磁引是护盾不是搅拌机。

问:碎箭的减免有上限吗?
答:没有——磁期四秒里来多少碎多少,勤快的弓手怪就是磁引的提款机。

问:磁点能跟着怪移动吗?
答:不能——磁点定在开磁的位置不动,怪绕着飞就能绕开,磁点的位置选择是门学问。

问:被拐弯的箭能伤到别的怪吗?
答:不能——碎箭不结任何伤害对谁都一样,磁点的世界只有"吸"和"碎"两个动作。

问:磁散的瞬间半路的箭怎么办?
答:恢复直飞——散磁前已经拐进来的照碎,半路刚拐的箭把完这段弯再直飞,账目按帧结清。

问:磁点能立在怪脚下吗?

答:能但亏——磁点立在它脚边,箭刚出膛就碎省是省了,但立在箭路正中能白吃满四秒的箭。

问:磁引能吸飞刀吗?

答:能——磁点认一切敌方弹道,飞刀飞斧飞刺一视同仁,吸的就是全部。

问:磁引期能开第二枚吗?

答:不能——冷却五秒比磁期四秒长,一秒真空是节拍,双磁点并存的版本就没法躲了。

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

第四笔是磁期的长度:四秒对一点六秒的箭速是"两到三箭的收成"——磁期太短收成不够本,太长弓手怪收弓改行。第三笔是吸点的半径:十四步的碎裂距离是"贴上就碎"的收口——半径太大磁点变成黑洞,太小箭擦边而过。第二笔是减免的记账:一支十二点一格格念——减免的账目可视化是这门机制的正名书,玩家看得见省了多少才觉得值。第一笔是磁环的双环:内环急转外环缓转——双环的转速差就是磁力的强弱读数,读环就知道磁还剩几秒。常见坑三个:磁点吸走了友方的箭,自己的输出被自己拆台;磁散后拐弯的箭轨迹没复原,箭在天上画圈;减免账只在本地记,换场景清零被玩家当成"省血是假的"。

商业服里磁引是"聚星师流派"的聚宝盆:别人的盾挡刀,他的磁点收箭——商城里磁环的样式做成品级,紫环、星环、虚空环,满屏箭支拐向一点齐齐碎裂的场面就是聚星师的招牌。运营落地还有两笔:一段是磁位教学——教一句"磁点立在它的箭路正中",流派第一课是找箭路;一段是聚星榜——按单局碎箭的省伤总量排名,收得最干净的人有碑。变体做成移动磁点:磁点缓慢追踪怪的站位——追着箭路收箭,聚星师的磁点长了腿。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

聚星师的老话只有一句:箭路在哪,磁点就在哪。

聚星师的第二课:磁点的四秒里你一箭不发也稳赚,忍住别抢输出。

聚星师的第三课:磁点立哪不重要,重要的是它的箭路必经哪。

写完留一句给做弹道系的同学:磁引卖的是"它的箭路归你管"——那枚一格格收账的磁点和满屏拐弯的箭,是把"躲"这门防守课直接改成"收"这门进账课的改写。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

磁引:四秒磁点,它的箭全拐进这点碎掉

【游戏功能】 磁点一开,它的箭全拐——四秒里它射出的每一支箭都拐向同一个聚点,到了聚点整支碎掉,一支都够不着你。磁引把"躲箭…

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

钟摆:半场一摆,谁站线上谁挨砸

【游戏功能】 半场一摆两秒一趟的钟摆,砸中站线上的一切——包括被你引过去的怪。钟摆把"地形"变成了武器:它本身不认敌我,你引…

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

铰击:两键同按,铰它一下二十

【游戏功能】 两键同按零点一五秒内——铰击:两把刃铰在一起砸它二十,外加半秒的僵。单按一键只有十点白给。这篇把整套模块拆开:…

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

三环扣:三角链死一伤二,连环清场

【游戏功能】 三只怪三角连着链:死一只,另外两只各挨十五;链上再倒一只,最后那只又挨十五——三环扣把"清怪"变成了"连环",…

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

蓄盾爆:按住攒盾,盾值就是弹量

【游戏功能】 按住攒盾,盾值就是弹量,松手引爆贴脸的怪——蓄盾爆把"防御"改写成了"蓄弹药":盾攒得越厚炸得越疼,攒盾的两秒…

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

三键诀:劈刺扫按对了顺序,一记四十

【游戏功能】 按对 劈→刺→扫 三键,一记四十;按错一环,只值八点平砍。三键诀把连招的顺序做成了考卷:三枚键摆在你面前,顺序…

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