【游戏功能】
去年冬天的数值事故到现在还有人念叨:某个喂食类玩法的收益没封顶,玩家把怪喂成了血海巨兽再一刀宰了——喂进去的每一口都在给攻击力加码,喂一百口就是十倍的刀。事故的教训写进了新纹的骨头里:蓄宰纹从第一天起就带着封顶。它的账是一笔颠倒的买卖:先喂它——每一口喂它二十点血,你的刀就重五点;喂到四口封顶,然后把养肥的它连本带利宰回去。这篇把整套模块拆开:配置表、喂食结算、封顶闸门、宰刀结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:先喂它二十血,宰起来更顺手
演示场怪照常横着走。点「喂食!」:一口粉光喂过去——它的血条回了一截,"肥+20"的粉字蹦出来;同时你的刀账上多了一笔:"宰+5"的金字挂在你头顶。再喂三口,四个粉珠在它头顶排成一串,你的刀从十二点重到三十二点。一刀下去,三十二点的金字连着喂进去的血一起清算——它肥没白肥,你喂没白喂。演示里试两笔账:喂满四口再宰和直接开砍——喂的那八十点血加上宰刀的加成,总账反而多出二十多点。蓄宰纹教的是养杀:养它不是为了慈悲,是为了宰得更顺手。
fx-fattencut
二、底层原理:一次喂食结算加一道封顶闸门
模块的机关是一对搭档。喂食结算:每一口往它血条里灌二十点——灌进去的血是真血,它的血条实打实地涨,你不会喂死它,但它确实更难打死了。封顶闸门:喂食的口数四口封顶——四口之后的喂食键按了只回提示,你的刀重封在三十二,闸门就是那场数值事故的墓碑。和吸血类机制的分野在"蓄宰喂的是它的血不是你的":吸血从它身上往回抽,蓄宰往它身上倒着喂——喂养的方向反着走,收益的账却是自己的刀在长。
封顶为什么钉在四口?四口八十点是"怪肥了一成、你刀重近三倍"的平衡点——不封顶的版本喂食变成无本买卖,喂一百口的邪道就是那场事故的原型;四口封顶之后,喂食从策略退化成仪式,仪式感的顶点就是闸门的位置。
三、核心代码:完整模块(上·骨架)
-- @file FattenCut.lua
-- 蓄宰肥纹 —— 先喂它二十血,宰起来更顺手
local FattenCut = {}
local CONST = {
CREST_LIFE = 14.0,
CREST_CD = 2.0,
FEED_HP = 20,
FEED_CAP = 4,
AMP_PER_FEED = 5,
BASE_HIT = 12,
COLOR_FATTEN = "#c07858",
COLOR_DEEP = "#482818",
COLOR_GHOST = "#f0c8b0",
ZORDER_FATTEN = 133,
ZORDER_FX = 135,
AUTOINC_BASE = 1107000,
}
local _crestT = 0
local _cdLeft = 0
local _feedN = 0
local _crestFx = nil
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "FTC2",
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 FattenCut.Amp()
return _feedN * CONST.AMP_PER_FEED
end
function FattenCut.FeedFull()
return _feedN >= CONST.FEED_CAP
end
四、核心代码:完整模块(下·喂食结算与宰刀账)
function FattenCut.Feed()
if _cdLeft > 0 then
ShowTip("纹在养——" ..
string.format("%.1f", _cdLeft) .. "秒")
return
end
if FattenCut.FeedFull() then
ShowTip("喂到头了——四口封顶")
return
end
local tid = SL:GetValue("MARK_TARGET_ID")
if not tid then return end
local hp = SL:GetValue("ACTOR_HP", tid) or 0
local hpM = SL:GetValue("ACTOR_HP_MAX", tid) or 0
SL:SetValue("ACTOR_HP", tid,
math.min(hpM, hp + CONST.FEED_HP))
_feedN = _feedN + 1
_cdLeft = CONST.CREST_CD
SL:TipAbove(tid, "肥+" .. CONST.FEED_HP)
SL:TipAboveMe("宰+" .. FattenCut.Amp())
SL:PlayFeedFx(tid)
ShowTip("喂了" .. _feedN .. "口——它肥了,你的刀重了")
end
-- 宰刀结算:每一刀带着喂出来的加重
SL:RegisterLUAEvent(LUA_EVENT_MELEE_DAMAGE, "FTC2_Slay", function()
return FattenCut.Amp()
end)
function FattenCut.Cast()
if _crestT > 0 then return end
local myID = SL:GetValue("USER_ID")
_crestT = CONST.CREST_LIFE
_feedN = 0
SafeRemove(_crestFx)
_crestFx = GUI:Layout_Create(GUI:Attach_SceneF(),
GenID("Fatten"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(_crestFx, CONST.ZORDER_FATTEN)
SL:PlayFattenUpFx(myID)
ShowTip("蓄宰纹开了——喂它肥它,宰起来顺手")
end
-- 定时器:纹成倒计时与喂珠跟画
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _crestT > 0 then
_crestT = _crestT - dt
local tid = SL:GetValue("MARK_TARGET_ID")
local tp = tid and GetActorPos(tid)
if _crestFx and tp then
GUI:setPosition(_crestFx, tp.x, tp.y - 96)
end
if _crestT <= 0 then
SafeRemove(_crestFx)
ShowTip("纹收了——喂进去的血可退不回来")
end
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("喂食", function()
FattenCut.Feed()
end)
ShowTip("技能已加载: 蓄宰纹 (调试按钮触发)")
end, 1.0)
function FattenCut.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SL:UnregisterLUAEvent(LUA_EVENT_MELEE_DAMAGE, "FTC2_Slay")
SafeRemove(_crestFx)
_crestT = 0
_feedN = 0
end
return FattenCut
五、机制问答
问:喂进去的血能喂到上限吗?
答:能封口——喂食认血量上限,满血的怪喂不进,"肥+20"变"喂不进",所以喂食要赶在它半血之前。
问:喂肥的怪被队友抢了怎么办?
答:白喂——加成只认喂食者本人的刀,队友的刀不带你的宰字,喂出去的血是泼出去的水。
问:四口封顶后还能喂吗?
答:按了只回提示——封顶是硬闸,第五口喂不进去,那场数值事故就是没这道闸闹的。
问:它中途狂暴回血算谁的账?
答:算它的——喂进去的血和它自回的血混在一根血条里分不出来,狂暴怪喂之前先掂量掂量。
问:纹收了喂的加成还在吗?
答:不在——加成随纹走,纹收刀回十二,没宰成等于白喂,蓄宰要一鼓作气。
六、调参指南与商业服怎么用
第四笔是每口的兑价:喂二十重五点是四分之一的兑换率——兑价太高喂两口就回本变无脑连按,太低喂满四口不划算,四分之一是"值得喂但要算"的位置。第三笔是封顶的位置:四口八十点是闸门的斤两——闸门再高就回到数值事故的老路,再低喂食成了摆设,四口是"肥得看得见、宰得有爽感"的天花板。第二笔是喂食的节奏:两秒一口的冷却对十四秒窗口是"最多六口"的额度——冷却太短喂食节奏赶不上封顶,太长一窗喂不满,两秒刚好卡在"想喂第四口要掐表"的位置。第一笔是双色的账目:粉字记它肥、金字记你重——喂食是两本账同时翻页,一种颜色的喂食看不出"肥它"和"重我"的兑换关系。常见坑三个:喂食结算没判血量上限把怪喂穿;封顶后喂食键没锁死按了照涨;喂珠在换目标后还挂在旧怪头顶。
商业服里蓄宰纹是"庖丁阁"的养杀经:别人直接下刀,他先养后宰——商城里喂珠的样式做成品级,谷壳珠、糯米珠、灵芝珠,那一串排在怪头顶的粉珠就是庖丁阁的食槽。运营落地还有两笔:一段是养杀教学——教一句"喂肥的宰回去,血不白喂",流派第一课是耐心;一段是庖丁榜——按喂满四口后的宰刀单发最高伤害排名,养得最肥宰得最狠的人有碑。变体做成共享猪食:喂食的加成全队共享——从独食到大锅饭,庖丁阁的食槽越摆越宽。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
写完留一句给做养成系的同学:蓄宰纹卖的是"养它就是为了宰它"——那串一格格排开的粉珠和带着宰字的重刀,是把敌方的血条当成自家存栏的第一份养殖合同。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…