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

认领:第一刀认领,认过的怪挨你的刀加一成五

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

【游戏功能】

认领 = true —— 就这一行,把"打谁"变成了"认谁":第一刀落在谁身上,一封朱印就贴在谁的头顶——认过的怪挨你的刀加一成五;印只有一张,换目标印就挪窝。这篇把整套模块拆开:配置表、认领印表、挪印结算、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:第一刀认领,认过的挨刀加一成五

演示场两只小怪并排站着。开打第一刀落在左边那只:十点灰字之外,它的头顶多出一方朱红的"领"字印——从这一刀起,它挨你的刀加一成五。再点「认领!」:把印掀起来换到另一只头上——左边的加成当场消失,右边的开始吃红字。演示里试两种打法:认着一只打到死,和两只之间反复挪印——前者印的价值吃满,后者纯粹是给自己找乱。认领教的是专一:一成五不多,但它是"从头到尾打一个"的犒赏。

demo
 fx-claimmark

二、底层原理:一张认领印表加一次挪印判定

模块的机关是一对搭档。认领印表:第一刀命中即盖印——印认玩家不认怪,同一时间全场只有一枚印,印在谁头上谁的挨刀乘一点一五。挪印判定:手动认领会收旧印盖新印;自动规则是打谁认谁——第一刀盖印之后,打到别处印不挪,只有手动认领才挪窝。和破势那类增伤标记的分野在"印是长期的而破势是窗口的":破绽挂六秒到点收,认领印跟着战斗走全程——长期的印才配得上"认领"两个字。

印为什么手动认领才挪?自动挪的版本玩家切一下目标印就飞,认领变成了"最后打的那只",专一的犒赏无从谈起;手动挪把选择权留给玩家,挪不挪、何时挪,都是算过账的。

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

lua
-- @file ClaimMark.lua
-- 认领 —— 第一刀认领,认过的怪挨你的刀加一成五

local ClaimMark = {}

local CONST = {
    CLAIM_AMP     = 1.15,
    STAMP_CD      = 3.0,

    COLOR_CLAIM   = "#c85848",
    COLOR_DEEP    = "#4e1810",
    COLOR_GHOST   = "#f0b0a8",

    ZORDER_SEAL   = 134,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1031000,
}

local _markID    = 0
local _cdLeft    = 0
local _sealFx    = nil
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "CKM",
        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 StampSeal(tid)
    SafeRemove(_sealFx)
    local tp = GetActorPos(tid)
    if tp then
        _sealFx = GUI:Layout_Create(GUI:Attach_SceneF(),
            GenID("Seal"), tp.x, tp.y - 142, 0, 0, false)
        GUI:setLocalZOrder(_sealFx, CONST.ZORDER_SEAL)
    end
end

function ClaimMark.Stamp()
    if _cdLeft > 0 then
        ShowTip("印在盖——" .. string.format("%.1f", _cdLeft) .. "秒")
        return
    end
    local tid = SL:GetValue("MARK_TARGET_ID")
    if not tid then return end
    _cdLeft = CONST.STAMP_CD
    _markID = tid
    StampSeal(tid)
    SL:PlayClaimFx(tid)
    SL:TipAbove(tid, "认领")
    ShowTip("认领了这只——挨你的刀加一成五")
end

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

lua
-- 第一刀自动盖印
SL:RegisterLUAEvent(LUA_EVENT_MELEE_HIT, "CKM_First", function(tid)
    if _markID == 0 and not SL:GetValue("ACTOR_DEAD", tid) then
        _markID = tid
        StampSeal(tid)
        ShowTip("第一刀认了领——这只以后挨你加一成五")
    end
end)

-- 认领增伤出口
SL:RegisterLUAEvent(LUA_EVENT_BEFORE_HURT, "CKM_Amp", function(tid, dmg)
    if _markID ~= 0 and tid == _markID then
        return math.floor(dmg * CONST.CLAIM_AMP)
    end
    return dmg
end)

-- 定时器:印的跟脚与失效守护
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _markID ~= 0 then
            local mp = GetActorPos(_markID)
            if _sealFx and mp then
                GUI:setPosition(_sealFx, mp.x, mp.y - 142)
            end
            if not mp or SL:GetValue("ACTOR_DEAD", _markID) then
                _markID = 0
                SafeRemove(_sealFx)
                ShowTip("认领的这只倒了——换下一只再认")
            end
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("认领", function()
        ClaimMark.Stamp()
    end)
    ShowTip("技能已加载: 认领 (调试按钮触发)")
end, 1.0)

function ClaimMark.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_MELEE_HIT, "CKM_First")
    SL:UnregisterLUAEvent(LUA_EVENT_BEFORE_HURT, "CKM_Amp")
    SafeRemove(_sealFx)
    _markID = 0
end

return ClaimMark

五、机制问答

问:认领印对队友的刀有效吗?
答:无效——印认盖印人,队友打的照旧原价,一成一五是私账不是团贴。

问:认领的怪死了印去哪?
答:印随尸销——想续印得对新目标重新盖,死掉的领主带不走它的印。

问:破势和认领叠吗?
答:叠——认领是长期乘区,破势是窗口乘区,两层叠上的刀是长短期收益的双丰收。

问:盖印那一刀吃加成吗?
答:吃——印随第一刀同帧生效,盖印刀就是加成刀,没有"下一刀才生效"的空档。

问:能主动撕印吗?
答:能——手动认领新目标旧印即撕,撕印不要钱,挪窝的代价只是三秒的盖印冷却。

问:认领的怪被队友先杀了印归谁?

答:印随尸销——击杀是他的,印是我的,两清,下一只怪重新认。

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

第四笔是加成的斤两:一成五对十点平砍是一点五的明账——斤两太高认领变成必点开关,太低印的存在感全靠那方朱红,一成五刚好是"专一的人看得见回报"。第三笔是挪印的冷却:三秒盖印冷却管住反复横跳——冷却太短印在两只怪之间飞来飞去,太长误认了领改不回来。第二笔是失效的规则:认领的怪死亡印随尸销——死亡继承的版本印会飞到刷新的新怪身上,专一的账就乱了辈分。第一笔是印的形制:朱红方印加一个"领"字——印要像官府的朱签不像光效,认领的仪式感全在这方印上。常见坑三个:认领目标死亡印没销,新刷的怪顶着旧印出生;挪印的冷却漏盖,三秒内连盖两印;增伤出口写进怪的防御面板,认领和破甲互相污染。

商业服里认领是"猎头流派"的落名帖:开打先递帖,帖到哪打到哪——商城里认领印的样式做成品级,朱印、银印、赤金印,头顶那方朱红的"领"字就是猎头的点名册。运营落地还有两笔:一段是专一教学——教一句"印给谁就打谁,挪一次亏一次节奏",流派第一课是管住目标键;一段是认领榜——按认领期打出的总伤排名,最专一的人有碑。变体做成三印连认:连续认领三只不重样,第三只挨刀翻倍——花心的打法居然也有奖励,但奖励属于算得清的人。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

猎头的落款只有一方印,印落之处,账开始算。

再补一笔认领的细账:印只加自己的刀,队友的刀是别人的账——认领之前,先确认这一程只有你一个人走。

猎头还有半句压箱的:印是好印,就是别盖在打不死的怪身上。

印落无声,账起有声。

写完留一句给做标记系的同学:认领卖的是"打谁要认谁"——那方贴在怪头顶的朱红小印,是把三心二意的代价和一心一意的犒赏一起写在头顶的告示。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

撩拨:撩它三下它就上头,一头撞进坑里

【游戏功能】 火气 = 火气 + 1 —— 每撩一下涨一格的火,三格烧满它就上头:一头冲过来,收不住脚,穿过你的位置一头扎进…

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

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

【游戏功能】 它接招的那一秒,就是你的那一秒。抛砖把这句拳谚做成了机制:一块砖头砸过去,它本能抬手格挡——格挡的一秒二里,招…

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

瞭望:扑了它的灯,警戒圈缩一半

【游戏功能】 为什么偷袭总被提前发现?因为它的瞭望灯亮着——二百二十步的警戒圈画在暗处,你一踏进去它就开始上弦。瞭望换个思路…

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

爆桶:油桶就在它脚边,一箭的事

【游戏功能】 桶存活着 = 否 —— 一箭点掉一只桶,爆的却是怪的血条:油桶就摆在它脚边,三十点的爆炸不分敌我地溅——溅不溅…

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

交班:双岗交班那一秒,谁都不设防

【游戏功能】 交班计时 = 1.0 —— 交班的那一秒,两个岗哨都在行礼:手离开刀,眼离开敌,全身的门都开着。交班把这一秒做…

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

挪桩:挪一根路标,把它遛进你算好的道

【游戏功能】 巡逻道 = { 左桩, 右桩 } —— 巡逻道就是这两根桩之间的一条线:桩在哪,道就在哪;道在哪,它就一辈子走…

2026-10-01 15:00 996 技术组