【游戏功能】
认领 = true —— 就这一行,把"打谁"变成了"认谁":第一刀落在谁身上,一封朱印就贴在谁的头顶——认过的怪挨你的刀加一成五;印只有一张,换目标印就挪窝。这篇把整套模块拆开:配置表、认领印表、挪印结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:第一刀认领,认过的挨刀加一成五
演示场两只小怪并排站着。开打第一刀落在左边那只:十点灰字之外,它的头顶多出一方朱红的"领"字印——从这一刀起,它挨你的刀加一成五。再点「认领!」:把印掀起来换到另一只头上——左边的加成当场消失,右边的开始吃红字。演示里试两种打法:认着一只打到死,和两只之间反复挪印——前者印的价值吃满,后者纯粹是给自己找乱。认领教的是专一:一成五不多,但它是"从头到尾打一个"的犒赏。
fx-claimmark
二、底层原理:一张认领印表加一次挪印判定
模块的机关是一对搭档。认领印表:第一刀命中即盖印——印认玩家不认怪,同一时间全场只有一枚印,印在谁头上谁的挨刀乘一点一五。挪印判定:手动认领会收旧印盖新印;自动规则是打谁认谁——第一刀盖印之后,打到别处印不挪,只有手动认领才挪窝。和破势那类增伤标记的分野在"印是长期的而破势是窗口的":破绽挂六秒到点收,认领印跟着战斗走全程——长期的印才配得上"认领"两个字。
印为什么手动认领才挪?自动挪的版本玩家切一下目标印就飞,认领变成了"最后打的那只",专一的犒赏无从谈起;手动挪把选择权留给玩家,挪不挪、何时挪,都是算过账的。
三、核心代码:完整模块(上·骨架)
-- @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
四、核心代码:完整模块(下·定时器与挪印结算)
-- 第一刀自动盖印
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 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 火气 = 火气 + 1 —— 每撩一下涨一格的火,三格烧满它就上头:一头冲过来,收不住脚,穿过你的位置一头扎进…
【游戏功能】 它接招的那一秒,就是你的那一秒。抛砖把这句拳谚做成了机制:一块砖头砸过去,它本能抬手格挡——格挡的一秒二里,招…
【游戏功能】 为什么偷袭总被提前发现?因为它的瞭望灯亮着——二百二十步的警戒圈画在暗处,你一踏进去它就开始上弦。瞭望换个思路…
【游戏功能】 桶存活着 = 否 —— 一箭点掉一只桶,爆的却是怪的血条:油桶就摆在它脚边,三十点的爆炸不分敌我地溅——溅不溅…
【游戏功能】 交班计时 = 1.0 —— 交班的那一秒,两个岗哨都在行礼:手离开刀,眼离开敌,全身的门都开着。交班把这一秒做…
【游戏功能】 巡逻道 = { 左桩, 右桩 } —— 巡逻道就是这两根桩之间的一条线:桩在哪,道就在哪;道在哪,它就一辈子走…