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

借刀:站到它队友身后,借它自己的刀劈它

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

【游戏功能】

P.x, C.x = C.x, P.x —— 一行换位,借刀的全部机关就藏在这一笔里:玩家和小怪换个位置,怪的大横扫抡下来,站在刀圈里的就变成了它自己的队友。这篇把整套模块拆开:配置表、换位构件、横扫判定、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:让它的刀,劈它自己人

演示场一只横扫大怪带一只凑热闹的小怪,地上淡红的框就是大怪的扫击圈。小怪朝你走,你也朝它走——点「换位!」:玩家和小怪瞬间互换了脚下的位置,两圈蓝光在两点各炸一下。大怪的横扫三秒一抡:扫击圈罩住的是小怪——"借刀二十二"的大字蹦出来,小怪被它自己人的刀拍得半死。三刀之后小怪倒地,死因写着队友的名字。演示里盯两处:换位的两道蓝光要干脆,扫击圈的红框就是"别站进来"的警示。借刀教的不是伤害,是站位学:把对的人,骗到错的刀下。

demo
 fx-knifeloan

二、底层原理:一次镜像互换加一份友军误伤判定

模块的机关是一对搭档。镜像互换:按钮一拍,玩家和小怪互换脚下坐标——互换是瞬时的,两道残影各留一半,位置的全部意义在互换的这一刻重新分配。友军误伤判定:怪的横扫是范围结算,认"圈里有谁"不认"圈里是谁"——队友站进来照劈不误,伤害照单全收,击杀记在大怪账上。和嘲讽那些仇恨操纵的分野在"挪的是人不是心":嘲讽骗它的注意力,借刀骗它的刀路——它的脑子一点没变,变的是站进刀圈里的那个倒霉蛋。

小怪为什么站着不动任你换?小怪的巡逻习惯照常走两步,但换位的瞬移不打断它的节奏——它甚至不知道自己刚从安全区走进了刑场,这份"不自知"正是借刀好笑又好用的根源。

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

lua
-- @file KnifeLoan.lua
-- 借刀 —— 站到它队友身后,借它自己的刀劈它

local KnifeLoan = {}

local CONST = {
    SWING_RADIUS  = 170,
    SWING_INNER   = 40,
    SWING_DMG     = 22,
    SWING_GAP     = 3.0,
    SWAP_CD       = 2.0,

    COLOR_SWAP    = "#88b0d0",
    COLOR_DEEP    = "#2a3e52",
    COLOR_GHOST   = "#d0e4f4",

    ZORDER_ZONE   = 128,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1012000,
}

local _cdLeft    = 0
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "KFL",
        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 LeaveGhost(id, x, y)
    local spr = SL:GetActorSprite(id)
    SL:DropGhostAt(id, x, y)
end

function KnifeLoan.Swap()
    if _cdLeft > 0 then
        ShowTip("脚在换——" .. string.format("%.1f", _cdLeft) .. "秒")
        return
    end
    local myID = SL:GetValue("USER_ID")
    local palID = SL:GetValue("MARK_SMALL_ID")
    local mp = GetActorPos(myID)
    local pp = GetActorPos(palID)
    if not mp or not pp then return end
    _cdLeft = CONST.SWAP_CD
    LeaveGhost(myID, mp.x, mp.y)
    LeaveGhost(palID, pp.x, pp.y)
    SL:SetActorPos(myID, pp.x, pp.y)
    SL:SetActorPos(palID, mp.x, mp.y)
    SL:PlaySwapFx(myID, palID)
    ShowTip("换位了——大的横扫圈里站的是它自己人")
end

四、核心代码:完整模块(下·定时器与横扫误伤)

lua
-- 横扫结算:圈里认谁劈谁
local function DoSwing(bigID)
    local bp = GetActorPos(bigID)
    if not bp then return end
    local zoneL = bp.x - CONST.SWING_RADIUS
    local zoneR = bp.x - CONST.SWING_INNER
    local hitAny = false
    local palID = SL:GetValue("MARK_SMALL_ID")
    if palID and not SL:GetValue("ACTOR_DEAD", palID) then
        local pp = GetActorPos(palID)
        if pp and pp.x >= zoneL and pp.x <= zoneR then
            SL:ActorHurt(palID, CONST.SWING_DMG)
            SL:TipAbove(palID, "借刀-22")
            hitAny = true
        end
    end
    local myID = SL:GetValue("USER_ID")
    local mp = GetActorPos(myID)
    if mp and mp.x >= zoneL and mp.x <= zoneR then
        SL:ActorHurt(myID, 14)
        SL:TipAbove(myID, "-14")
        hitAny = true
    end
    if not hitAny then
        SL:TipAbove(bigID, "劈空")
    end
end

-- 定时器:横扫节拍
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        local bigID = SL:GetValue("MARK_TARGET_ID")
        if not bigID or SL:GetValue("ACTOR_DEAD", bigID) then
            return
        end
        _gap = (_gap or CONST.SWING_GAP) - dt
        if _gap <= 0 then
            _gap = CONST.SWING_GAP
            SL:PlaySwingFx(bigID)
            DoSwing(bigID)
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("换位", function()
        KnifeLoan.Swap()
    end)
    ShowTip("技能已加载: 借刀 (调试按钮触发)")
end, 1.0)

function KnifeLoan.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
end

return KnifeLoan

五、机制问答

问:换位能换大怪吗?
答:不能——换的是小的那只,把大怪换进自己刀圈的说法本身就不成立,刀是它的,圈随它走。

问:横扫误伤算玩家的击杀吗?
答:不算——刀是大怪抡的,账记大怪头上,玩家拿的是"策划"的功劳,战绩页各记各的。

问:小怪被劈时会还手吗?
答:会——误伤判定不改仇恨,被劈的小怪转头打大怪,两只自己人打起来,借刀的高潮就在这一幕。

问:玩家站在圈里挨刀算失误吗?
答:算——借刀的全部纪律就是别站进红框,站在圈里蹭刀的玩家,扣的血是学费。

问:一次能骗两只小的进圈吗?
答:能——圈里认数量,两只都站进去就一起挨,双倍误伤的场面就是站位学的满分卷。

问:换位那一下小怪会反击吗?

答:来不及——互换是瞬移,它的转身跟不上落位,落定之后各归各位,它才想起来你站过它的地方。

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

第四笔是圈的空间感:一百七十步到四十步的环带是"站得进、看得清"的刀路——环带太宽站位学变表格题,太窄换位的容错只有一拍。第三笔是误伤的力度:二十二点对六十血的小怪是三刀借完的节奏——力度太轻小怪劈不死,白借;太重一刀了账,站位课没上完就散学。第二笔是节拍的规律:三秒一抡的横扫是"可背板的刀路"——节拍随机的版本借刀变赌博,可背板的刀才骗得进人。第一笔是红框的诚实:扫击圈的边界要和判定严丝合缝——框大一分玩家白躲,小一分玩家喊冤,视觉和判定的账必须一比一。常见坑三个:换位把玩家换进怪的身体里,落点没做占位校验;横扫的误伤没查阵营,劈了友方玩家;小怪的巡逻走出圈后不回位,借一次就失效。

商业服里借刀是"棋手流派"的落子:不动一刀一枪,全靠把对的人放进错的位置——商城里换位的特效做成品级,蓝光、棋纹光、八卦光,两道交换的光就是棋手的手谈。运营落地还有两笔:一段是横扫怪图鉴——每种大怪的刀路宽度写进页脚,棋手玩家按图摆子;一段是借刀榜——按借刀误伤的总伤排名,借得最狠的人有碑。变体做成连环借:小怪被劈死前的反手一击也算借——死前回光返照那一刀,账还是大怪的。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

棋手的复盘只有一行:它出刀之前,圈里站的最好不是你。

落子的分寸也就这一格:圈里有人,刀就不空。

写完留一句给做站位系的同学:借刀卖的是"它的刀不认人"——那一行换位的代码和两道蓝光,是把敌我识别这层纸捅破的手指,捅破了,全场都是你的兵器。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

焚香:点一炷香,香烧着时三刀一回血

【游戏功能】 香烧着的时候,人心最定。焚香把这句老话做成了机制:点一炷八秒的香,香烧着的三刀一叩首——每叩一回,血回六点。香…

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

下战书:战期六秒,两边都往死里打

【游戏功能】 下一封战书是什么概念?是你和它同时签下"六秒内往死里打"的字据:你加三,它加四——它的刀更疼,你的刀也不再客气…

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

摘珠:它有两颗回血珠,摘一颗赚一颗

【游戏功能】 日志里躺着一条没人在意的细节:某只头目的治疗明细里,回血来源写着一颗珠子的名字——两颗珠子轮流替它回血,每两秒…

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

挑灯:灯油就是你的弹匣,烧的是时间

【游戏功能】 oil = oil - 1 —— 灯芯上两秒烧掉的一滴油,就是挑灯的全部家底:灯亮着,刀足十;油见底,刀软成五…

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

墨守:墨线画三笔,成阵挡一刀

【游戏功能】 守塔组出过一单静悄悄的失误:同一批怪,同样的守塔人,有的晚上一血没掉,有的被摸了三回——查录像才发现,守得住的…

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

匀气:刀刀要吃气,歇两口气才回满

【游戏功能】 为什么有些玩家越打越软?前二十刀刀刀十点,二十刀之后刀刀四点——装备没变,变的是气。匀气把这件事做成了明账:五…

2026-10-01 13:57 996 技术组