【游戏功能】
淬毒为什么要一毒到底?淬毒刃偏要一层一层叠:一刀淬一层毒、毒层一秒六地烂,六层封顶之后一刀下去毒伤三十六——叠的层数就是伤害的斜率。这篇的核心代码照引擎技能脚本的全规格写:配置表、淬毒构件、层表状态机、定时器、调试按钮。
一、效果演示:三层毒,一条上坡
演示场点「淬毒!」:一道紫色的淬毒弧光劈在怪身上,怪身上多一颗紫色层点——头顶挂"毒1层"。再点一下第二层、第三层……六层封顶。毒的跳秒结算一秒一跳:一跳六、三跳十八、六跳三十六六层封顶。层点的视觉也要分层——一层的紫点淡、六层的紫点浓,点的浓度就是毒的浓度。毒的跳秒结算一秒一跳:一跳六、三跳十八、六跳三十六,层数越高跳数越大。演示里先叠三层停手——层点慢慢消退、跳数跟着掉;再补齐六层——跳数顶格不动。层数的起落就是这门机制的活教材。
fx-venomblade
二、底层原理:一张层数表加一份乘法跳秒
模块的账本是一张层数表。每次淬毒往表里加一层、层自带六秒倒计时——各层各自到期。毒的跳秒独立计时:一秒一跳、跳数等于当前层数乘六。和灼羽的分野:灼羽的燃烧是固定十二一跳不随时间变,淬毒的毒是动态跳数随层数变——灼羽的账是平的、淬毒的账是斜坡。层数不衰减:只要持续淬毒保持层满,毒伤就恒定在峰值。层满后再淬只刷时长不加层数,防止毒层无限叠。
三、核心代码:完整模块(上·骨架)
-- @file VenomBlade.lua
-- 淬毒刃 —— 淬毒上刃三刀叠一层毒
local VenomBlade = {}
local CONST = {
POISON_CAP = 6,
POISON_LIFE = 6.0,
POISON_CD = 2.0,
POISON_DMG = 6,
POISON_TICK = 1.0,
COLOR_VENOM = "#a371f7",
COLOR_DEEP = "#3a1a5e",
COLOR_GHOST = "#e8d8fa",
ZORDER_VENOM = 131,
ZORDER_FX = 135,
AUTOINC_BASE = 975000,
}
local _stacks = {}
local _tickT = 0
local _cdLeft = 0
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "VNB",
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 GetStacks()
return #_stacks
end
四、核心代码:完整模块(下·定时器与乘法跳秒)
-- 淬毒入口
function VenomBlade.Cast()
if _cdLeft > 0 then return end
if GetStacks() >= CONST.POISON_CAP then return end
_cdLeft = CONST.POISON_CD
table.insert(_stacks, CONST.POISON_LIFE)
SL:TipAbove(SL:GetValue("MARK_TARGET_ID"),
"毒" .. GetStacks() .. "层")
end
-- 跳秒结算
local function Venom_Tick(tid)
if GetStacks() <= 0 then return end
local dmg = GetStacks() * CONST.POISON_DMG
SL:ActorHurt(tid, dmg)
SL:TipAbove(tid, "-" .. dmg)
end
-- 定时器:层表衰减与跳秒
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
for i = #_stacks, 1, -1 do
_stacks[i] = _stacks[i] - dt
if _stacks[i] <= 0 then
table.remove(_stacks, i)
end
end
if GetStacks() <= 0 then return end
_tickT = _tickT + dt
if _tickT >= CONST.POISON_TICK then
_tickT = _tickT - CONST.POISON_TICK
Venom_Tick(SL:GetValue("MARK_TARGET_ID"))
end
end, 0.02)
end
SL:ScheduleOnce(function()
ShowTip("技能已加载: 淬毒刃 (调试按钮触发)")
end, 1.0)
return VenomBlade
下半场的两层结构是全模块的心跳:层表衰减和毒跳结算各走各的分支——层表每帧减、跳秒一秒一跳,两套时钟不混。倒序遍历边减边删是层表的标准手——正序删除的版本跳格漏层。毒跳的目标从 MARK_TARGET_ID 现读——目标切换后毒跟着换人跳,不会劈腿到旧目标。
五、调参指南与商业服怎么用
调参三笔账。每层六对六层封顶是满层三十六的峰值产值——峰值对玩家普攻的四成是甜区,超过玩家就不打普攻只叠毒。淬毒冷却两秒对层寿六秒是"三刀才能续一层"的节奏——冷却短于一点五秒毒层永动,长于三秒断崖。跳秒一秒是毒系的经典拍——半秒太密数字糊脸,两秒太疏存在感稀。常见坑三个:层表倒序遍历没做、正序删跳格;满层后再淬没刷时长也没提示,玩家不知道满了;跳秒目标切换后旧目标的毒没清。
商业服里淬毒刃是"毒系流派"的入门课:叠层的手法写在每一锥上——会叠的玩家毒层不断、不会的玩家层散重头。商城里淬毒的颜色做成品级——紫毒、绿毒、血毒,叠层的颜色就是毒系的段位。变体做成毒层爆发:六层满时按爆发键一次性结算全部剩余毒伤——攒层和爆发之间多了一个选择的维度。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
层满之后的淬毒也别做成白按——满锥再锥刷的是时长不是层数,刷时长的提示要写"续了"不写"叠了",两种说法传达的是两种不同的操作反馈。
淬毒的弹道特效也别省——紫色的淬毒液从刀锋飞出去钉在怪身上,飞行的弧线和钉中的溅射都要有,只有层数没有弹道的淬毒玩家看不懂。层表的目标切换也要做——目标切了层表跟着换人、旧目标的层表清空,层表跟着目标走不跟着玩家走。
写完留一句给做叠层系的同学:淬毒卖的是"直线的信任"——不搞百分比不玩衰减,六层就是三十六,玩家心算完就敢押。玩家心算完就敢押——六乘六等于三十六,一道小学数学题就是全部的产值账。
淬毒的弹道特效也别忘了做——紫色的淬毒液从刀锋飞出去钉在怪身上,飞行的弧线和钉中的溅射都要有,只有层数没有弹道的淬毒玩家看不懂。层表的目标切换也要查——目标切了层表跟着换人、旧目标的层表清空,层表跟着目标走不跟着玩家走。淬毒的弹道速度也要快——弹速太慢大怪走位就空了,弹速快到怪来不及反应才有钉的感觉。淬毒和连招谱的交叉也值得做——按谱出招的第三招收尾时自动淬一层毒,连招谱的谱尾和淬毒的层数就串成了一条连招链。淬毒的弹道速度也是调参的一环——弹速太慢大怪走位就空了,弹速太快玩家看不到火羽的飞行轨迹。淬毒的弹道特效也别忘了做——紫色的淬毒液从刀锋飞出去钉在怪身上,飞行的弧线和钉中的溅射都要有。淬毒和连招谱的交叉也值得做——按谱出招的第三招收尾时自动淬一层毒,连招谱的谱尾和淬毒的层数就串成了一条连招链。淬毒的弹道速度也要快——弹速太慢大怪走位就空了,弹速快到怪来不及反应才有钉的感觉。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 蓄力技为什么总是单发?影炮偏要贯穿全屏:蓄一秒射一道暗影弹道穿全屏——线上所有目标各挨五十五,弹道从你脚下贯穿…
【游戏功能】 灼烧为什么总烧在皮肤上?灼心偏要烧进心里:心被灼了六秒——六秒里怪每出一招就自损八,出得越多损得越多。这篇的核…
【游戏功能】 魂卫为什么只有三盏就不能多了?魂蜂偏要做成可以积累的:杀掉小怪化一盏魂蜂跟着你走,至多三盏——三盏魂蜂各自两秒…
【游戏功能】 镜墙为什么只能反弹不能冰冻?霜镜偏要双管齐下:弹道撞上霜镜原路画回去——回程的弹道还带着冰冻效果,扎中怪怪也冻…
【游戏功能】 单体射击为什么打不动厚血怪?穿心刺给的答案是:箭伤八加穿心伤,穿心伤等于最大血量百分之六——血越厚的怪越疼。这…
【游戏功能】 影刺的全机制就一句话:化影绕到它身后,从背刺出的那一刀双倍二十四——正面十二、背后二十四,它一转身就变白板。这…