【游戏功能】
五秒里它打你的刀一半弹回去——移祸的账目就这一条:转嫁期开启后,怪的每一记攻击,伤害的一半从你身上弹回它自己身上。它打得越狠弹得越疼,五秒转嫁期就是双方的清算期。这篇把整套模块拆开:配置表、转嫁构件、弹回结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:挨的刀一半转给它,转嫁期刀刀有回响
演示场点「移祸!」:一圈紫光把玩家和怪罩在一起——转嫁开了。怪的下一刀拍过来:"弹-七"的紫字从怪头顶蹦出来——你吃七点,它也吃七点,刀的份量被平分了。转嫁期五秒,怪的刀拍得越勤弹得越多。转嫁散了——"刀刀归位",怪恢复平常。演示里试两拍:转嫁期它照常出手的五秒,和转嫁散了它变本加厉的两秒——转嫁的窗口是白送的,散了的反扑要自己扛。移祸教的是平衡:不减少你挨的刀,只是让刀变成双向的。
fx-blameshift
二、底层原理:一段转嫁期加一次弹回结算
模块的机关是一对搭档。转嫁期:移祸挂上五秒——这五秒里怪的攻击命中你后,伤害的一半立即转嫁回怪自身,你照吃一半它照弹一半。弹回结算:弹回的伤害走真实结算不吃减免——弹回去的每一刀都和它自己出刀的力道成正比。和反甲那些自动反弹的分野在"移祸是主动开启的窗口":反甲永远在,移祸只在五秒的窗口里——窗口的稀缺性就是移祸的战略价值。
弹回为什么是一半而不是全额?全额的版本移祸变成绝对防御加完美反杀,怪的攻击越强对自己伤害越大——一半刚好是"你也在挨打但它的疼不比你轻"的平衡点。
三、核心代码:完整模块(上·骨架)
-- @file BlameShift.lua
-- 移祸 —— 挨的刀一半转给它,五秒转嫁期
local BlameShift = {}
local CONST = {
SHIFT_LIFE = 5.0,
SHIFT_CD = 6.0,
SHARE_PCT = 0.5,
COLOR_SHIFT = "#a078c8",
COLOR_DEEP = "#3a1a58",
COLOR_GHOST = "#d8c8f4",
ZORDER_SHIFT = 132,
ZORDER_FX = 135,
AUTOINC_BASE = 1062000,
}
local _shiftT = 0
local _shiftID = 0
local _cdLeft = 0
local _shiftFx = nil
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "BMS",
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 BlameShift.Cast()
if _cdLeft > 0 or _shiftT > 0 then return end
local tid = SL:GetValue("MARK_TARGET_ID")
if not tid then return end
_cdLeft = CONST.SHIFT_CD
_shiftT = CONST.SHIFT_LIFE
_shiftID = tid
SafeRemove(_shiftFx)
_shiftFx = GUI:Layout_Create(GUI:Attach_SceneF(),
GenID("Shift"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(_shiftFx, CONST.ZORDER_SHIFT)
SL:PlayShiftUpFx(tid)
SL:TipAbove(tid, "移祸!")
ShowTip("转嫁开了——五秒它打你的刀一半弹回去")
end
四、核心代码:完整模块(下·定时器与弹回结算)
-- 弹回结算:转嫁期怪的攻击一半弹回去
SL:RegisterLUAEvent(LUA_EVENT_MONSTER_STRIKE, "BMS_Back", function(tid, dmg)
if _shiftT > 0 and tid == _shiftID and dmg > 0 then
local back = math.floor(dmg * CONST.SHARE_PCT)
SL:ActorHurt(tid, back)
SL:TipAbove(tid, "弹-" .. back)
SL:PlayShiftBackFx(tid)
ShowTip("弹回去了——" .. back .. "点转嫁给它")
end
end)
-- 定时器:转嫁倒计时与紫环跟脚
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _shiftT > 0 then
_shiftT = _shiftT - dt
local tp = GetActorPos(_shiftID)
if _shiftFx and tp then
GUI:setPosition(_shiftFx, tp.x, tp.y - 70)
end
if _shiftT <= 0 or not tp
or SL:GetValue("ACTOR_DEAD", _shiftID) then
_shiftT = 0
SafeRemove(_shiftFx)
ShowTip("转嫁散了——刀刀归位")
end
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("移祸", function()
BlameShift.Cast()
end)
ShowTip("技能已加载: 移祸 (调试按钮触发)")
end, 1.0)
function BlameShift.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SL:UnregisterLUAEvent(LUA_EVENT_MONSTER_STRIKE, "BMS_Back")
SafeRemove(_shiftFx)
_shiftT = 0
end
return BlameShift
五、机制问答
问:转嫁期能喝药吗?
答:能——转嫁不锁手,喝药照喝,这也是移祸比金身实用的地方:防御和回复不互斥。
问:弹回去的伤害能暴击吗?
答:不能——弹回是按比例的返还不是独立攻击,不掷骰不暴击,账目干净玩家才敢围绕它配装。
问:怪停手不打了转嫁白开吗?
答:白开——转嫁认的是它的攻击不是你的意志,它不打弹就无从弹起,逼怪出手也是移祸的技巧。
问:转嫁期被控了还弹吗?
答:弹——转嫁跟着人走不跟着状态走,晕住的时候它的弹回照常运转,这也是移祸比反甲可靠的另一面。
问:五秒后怪变本加厉怎么办?
答:准备好后续手段——散了之后怪照常出手不多不少,变本加厉是心理战不是数值设计。
问:转嫁期的弹回能叠加其他反伤吗?
答:能——转嫁的弹回是独立的一笔结算,反甲照弹、毒照跳,转嫁只是把怪的攻击变成了你额外的一笔收入。
问:移祸的弹回能吃破势加成吗?
答:能——弹回走的是它自己的结算链,你身上挂的破势标记如果影响它受到的伤害,弹回的数字也会跟着涨。
六、调参指南与商业服怎么用
第四笔是比例的档位:五成是"你的疼它也疼"的平分线——比例拉到七成移祸变反弹,压到三成移祸变挠痒。第三笔是窗口的长度:五秒对六秒冷却是"转嫁大于空档"的节奏——窗口太短移祸像闪现,太长变成永久反弹。第二笔是弹回的计法:弹回走真实结算不吃减伤——弹回打折扣的版本高攻怪反而不怕移祸,全额定弹才配叫转嫁。第一笔是紫环的形制:紫环要套在怪的头顶而不是玩家脚下——环在谁头上谁在被转嫁,一眼分清谁是出刀的谁是挨弹的。常见坑三个:转嫁期的溅射伤害也弹,多段攻击弹成机关枪;弹回触发怪的仇恨转移,打着自己人却换了目标;转嫁结束的瞬间怪正好出手,边界判定漏了这一刀。
商业服里移祸是"道人流派"的因果:别人挡刀,他把刀原路寄回——商城里紫环的样式做成品级,紫环、业火环、因果环,转嫁期套在怪身上的那圈紫光就是道人的因果印。运营落地还有两笔:一段是窗口教学——教一句"五秒一开,它打你一半还给你",流派第一课是算时序;一段是因果榜——按转嫁期弹回的总伤排名,因果算得最清的人有碑。变体做成全额因果:转嫁的比例拉到全额——从对半分到全额返还,道人的手段翻了一倍。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
道人的因果只有一条:它打你的刀就是你打它的刀——转嫁期过了别追,因果已了。
道人的因果只有半句:弹回去的不只是刀——是它自己选的因果。
写完留一句给做转移系的同学:移祸卖的是"你的刀替我还"——那圈套在怪头上的紫色转嫁环,是把攻击行为本身变成回旋镖的一次因果调度。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…