【游戏功能】
先抛一个坑:两只怪为什么只打你?它们的同伴就站在旁边,刀却一爪一爪全落你身上——仇恨锁死在玩家身上,怪和怪之间老死不相往来。嫁祸纹的答案是把这条铁律撬开一道缝:它抬爪的那一拍,纹光一闪,这一爪落在了它同伴头上。双打变互殴,你站圈外看戏。这一篇把整套模块拆开:配置表、嫁祸窗口、目标改写、弹道转移、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:它这一爪,落在同伴头上
演示场两只怪一左一右夹击你,各自照常出爪。点「嫁祸!」:一道紫光在两只怪之间连起一条线——三秒的嫁祸窗口。左边那只抬爪的瞬间,爪风半路拐弯,十六点稳稳落在右边同伴的脑袋上,"替-16"的紫字从同伴头顶蹦出来——你毫发无伤,两只怪的血条各亏各的。窗口一过,爪又归你挨。演示里试两笔账:三秒窗口里白嫖一只怪的一爪,加上同伴挨刀的仇恨涟漪,两头都是赚。嫁祸纹教的是借刀:最强的盾不是挡刀,是让刀落到别处去。
fx-redirect
二、底层原理:一道嫁祸窗口加一次目标改写
模块的机关是一对搭档。嫁祸窗口:按纹的那一帧起算三秒——窗口不是持续生效的常驻,而是等它下一次出手的那一拍,一爪即碎。目标改写:那一爪的伤害结算在半路被截住,目标从玩家改写成它的同伴——伤害值不变、招式不变、变的只有挨打的人。和嘲讽类机制的分野在"嫁祸纹改的是这一爪的落点,嘲讽改的是所有的仇恨":嘲讽是全局引怪,代价是往后的每一刀都冲你来;嫁祸纹只借一爪,落点精确、窗口干净、用完即走。
改写为什么一爪即碎?连改的版本会把两只怪变成互殴到死机关枪——怪之间的仇恨结算会滚雪球,一爪即碎的版本玩家每五秒借一次刀,节奏感有了,机制的闸门也稳了。
三、核心代码:完整模块(上·骨架)
-- @file Redirect.lua
-- 嫁祸纹 —— 它这一爪,落在同伴头上
local Redirect = {}
local CONST = {
WARD_LIFE = 3.0,
WARD_CD = 5.0,
SEARCH_RANGE = 300,
COLOR_REDIR = "#8a68b8",
COLOR_DEEP = "#342458",
COLOR_GHOST = "#d8c8f0",
ZORDER_REDIR = 133,
ZORDER_FX = 135,
AUTOINC_BASE = 1086000,
}
local _wardT = 0
local _cdLeft = 0
local _wardFx = nil
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "RDD",
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 Redirect.FindPartner(tid)
if not tid then return nil end
return SL:FindNearMonster(tid, CONST.SEARCH_RANGE)
end
四、核心代码:完整模块(下·目标改写与窗口结算)
-- 目标改写:窗口内它出手的那一拍半路改写落点
SL:RegisterLUAEvent(LUA_EVENT_BEFORE_HURT, "RDD_Redirect",
function(srcID, dmg)
if _wardT <= 0 then return dmg end
if srcID ~= SL:GetValue("MARK_TARGET_ID") then return dmg end
local partner = Redirect.FindPartner(srcID)
if not partner then
ShowTip("旁边没有同伴——这一爪只能自己收")
return dmg
end
SL:ActorHurt(partner, dmg)
SL:TipAbove(partner, "替-" .. dmg)
SL:PlayTransferFx(srcID, partner)
_wardT = 0
SafeRemove(_wardFx)
ShowTip("这一爪落在它同伴头上了")
return 0
end)
function Redirect.Cast()
if _cdLeft > 0 or _wardT > 0 then return end
local tid = SL:GetValue("MARK_TARGET_ID")
if not tid then return end
if not Redirect.FindPartner(tid) then
ShowTip("它没有同伴——嫁祸无从借刀")
return
end
_cdLeft = CONST.WARD_CD
_wardT = CONST.WARD_LIFE
SafeRemove(_wardFx)
_wardFx = GUI:Layout_Create(GUI:Attach_SceneF(),
GenID("Ward"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(_wardFx, CONST.ZORDER_REDIR)
SL:PlayWardLinkFx(tid)
ShowTip("嫁祸纹开了——它下一爪落在同伴头上")
end
-- 定时器:窗口倒计时与连线的跟画
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _wardT > 0 then
_wardT = _wardT - dt
local tid = SL:GetValue("MARK_TARGET_ID")
local partner = tid and Redirect.FindPartner(tid)
local a = tid and GetActorPos(tid)
local b = partner and GetActorPos(partner)
if _wardFx and a and b then
GUI:setPosition(_wardFx,
(a.x + b.x) / 2, (a.y + b.y) / 2 - 140)
end
if _wardT <= 0 then
SafeRemove(_wardFx)
ShowTip("纹收了——它的爪又归你挨了")
end
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("嫁祸", function()
Redirect.Cast()
end)
ShowTip("技能已加载: 嫁祸纹 (调试按钮触发)")
end, 1.0)
function Redirect.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SL:UnregisterLUAEvent(LUA_EVENT_BEFORE_HURT, "RDD_Redirect")
SafeRemove(_wardFx)
_wardT = 0
end
return Redirect
五、机制问答
问:同伴不在范围内这一爪怎么办?
答:原路照收——改写需要借得到目标,搜索圈里没有同伴,窗口照样烧完但一爪未借,等于白开。
问:被嫁祸的同伴会仇恨玩家吗?
答:不会——挨的是同伴的爪,仇恨记在出爪的那只头上,两只怪的关系变差,跟你的账一分不沾。
问:嫁祸窗口能弹范围攻击吗?
答:不能——纹只改单体落点,范围攻击的地皮不认窗口,站圈里的所有人照旧挨,这也是它只适合单挑夹击局的原因。
问:两只怪互相嫁祸会死循环吗?
答:不会——纹只认玩家立的那一道,怪自己不会立纹,改写是一次性的单程票,不存在来回踢皮球。
问:窗口期内它没出手怎么办?
答:白等——窗口只保一爪,三秒空过纹自动收,掐它抬爪的节拍立纹才是这门手艺的正经玩法。
六、调参指南与商业服怎么用
第四笔是窗口的时长:三秒对二点六秒的出招间隔是"稳罩一爪"的容量——窗口太短掐不准节拍,太长一窗借两爪变成免伤金牌。第三笔是搜索圈的半径:三百步是"同伴就在身边"的口径——圈太大借到远处的怪演出失真,圈太小两只怪站位稍开就借不着。第二笔是一爪即碎:改写一爪立刻收纹是闸门——连改的版本两只怪互殴到死,机制的平衡和演出的节奏全毁在这一处。第一笔是连线的演出:两只怪之间那条紫线要全程可见——线在窗口在,线断纹已收,玩家看线就知道还能不能借。常见坑三个:改写结算没剔除范围伤害导致地皮攻击也跟着搬家;同伴死亡后窗口没有自动收纹还挂着一条空线;嫁祸的仇恨计算把玩家记成了间接受害者引怪回身。
商业服里嫁祸纹是"袖里刀"流派的生财手艺:别人挡刀他借刀——商城里连线的样式做成品级,麻线、银线、金蝉线,那条连在两只怪之间的紫光就是袖里刀的路引。运营落地还有两笔:一段是站位教学——教一句"引两只站近点,借刀才借得着",流派第一课是排位;一段是借刀榜——按借爪的总伤排名,借得最狠的人有碑。变体做成连环嫁祸:借来的一爪若击杀同伴,纹重开一次——从借一爪到借一双,袖里刀越递越顺手。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
写完留一句给做目标系的同学:嫁祸纹卖的是"这一爪不归我"——那条连在两只怪之间的紫线和同伴头顶的"替"字,是把攻击目标当成可议价商品的第一张契纸。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…