【游戏功能】
先抛一个坑:一条锁链连着你和怪——怪打你的那一爪为什么它自己也疼?这篇把雷光锁纹整套写法拆开:连锁、锁传、双疼、锁断重连,一段一段照抄能跑。
一、效果演示
演示场雷光锁塔底。点「连锁!」:雷光锁链连两头——怪拍你一爪锁链导电它自己挨十二电击;你打它一刀锁链反传你回六。锁链持续十秒。
flowchart TD
A[连锁] --> B[雷光锁链连两头]
B --> C{怪出爪了吗}
C -- 出爪 --> D[导电 怪自电十二]
C -- 没出爪 --> E[静默]
D --> F[你打它 自己回六]
E --> F
F --> G{锁链断了}
G -- 没断 --> C
G -- 断了 --> H[十秒后再连]
fx-crest-lightninglock
二、底层原理
雷光锁的机关是"双向导电"——锁链连着的两头一头挨打另一头跟着疼。锁链的持续没有固定时辰挂在怪的攻击行为上。幂尔框架这边导电收在受击口里反传收在命中口里。
这套玩法的代码量不到八十行,难的不是导电而是双向——单向反弹是镜子双向导电是锁链。
雷光锁的反传回血给了玩家一个主动找打的动机——怪攻击越频繁你回血越多正循环一旦转起来锁链就成了永动机。
三、核心代码:完整模块(上·骨架)
-- @file CrestLightningLock.lua
-- 雷光锁纹
local M = {}
local CONST = { LINK_TIME = 10, MOB_ECHO = 12, SELF_HEAL = 6, LINK_CD = 10, AUTOINC_BASE = 1208500 }
local _linked = false
local _left = 0
local _cd = 0
local _autoInc = 0
local function ShowTip(msg) if msg and msg ~= "" then SL:ShowSystemTips(msg) end end
local function GenID() _autoInc = _autoInc + 1 return CONST.AUTOINC_BASE + _autoInc end
function M.Linked() return _linked end
function M.Link()
if _cd > 0 then ShowTip("再等" .. math.ceil(_cd) .. "秒") return end
_cd = CONST.LINK_CD
_linked = true
_left = CONST.LINK_TIME
ShowTip("雷光锁链连两头!")
end
四、核心代码:完整模块(下·推进与卸载)
-- 连锁: 导电 反传 时辰
function M.OnHurt()
if not _linked then return end
ShowTip("锁链导电——它自电" .. CONST.MOB_ECHO)
return CONST.MOB_ECHO
end
function M.OnHit()
if not _linked then return end
ShowTip("反传回血——+" .. CONST.SELF_HEAL)
return CONST.SELF_HEAL
end
function M.Link()
if _cd > 0 then ShowTip("再等" .. math.ceil(_cd) .. "秒") return end
_cd = CONST.LINK_CD
_linked = true
_left = CONST.LINK_TIME
ShowTip("雷光锁链连两头!")
end
if not _ticker then
_ticker = SL:Schedule(function(dt)
if _cd > 0 then _cd = _cd - dt end
if not _linked then return end
_left = _left - dt
if _left <= 0 then
_linked = false
ShowTip("锁链断了——十秒后再连")
end
end, 0.05)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("连锁!", function() M.Link() end)
ShowTip("技能已加载: 雷光锁纹")
end, 1.0)
function M.Unload()
if _ticker then SL:Unschedule(_ticker) end
_linked = false
end
return M
五、机制问答
问:双向导电和单向反弹差在哪?
答:单向反弹是镜子双向导电是锁链——锁链两头都要有账。
问:怪不攻击锁链还有用吗?
答:静默——锁链活性跟着怪活性走。
问:反传回血给了什么动机?
答:主动找打——怪攻击越频繁你回血越多。
问:锁链持续怎么定?
答:挂在怪的攻击行为上——行为触发比定时器更有机。
问:十秒一连锁管什么?
答:锁链的稀缺——随便连的锁链是永久电线。
六、调参与实战怎么用
参数三个量——导电伤害、反传回血、锁链时辰。十二点导电配六点反传是"它疼得比你多一倍"的甜点位。常见坑:只做单向反弹锁链成镜子;不设时辰锁链永动。
补充一个设计层面的思考——束缚、裂地、寄生、养成、步法、锁链——六种到达方式六种战斗哲学。每种到达方式自带一门战斗课玩家学会的就是那门课的考试。
补充一个维护层面的思考——锁链要断、虫要散、菇要化、玉要碎、风灵要封顶、裂缝要合拢——每一种机制都要有它的收势写在卸载口里。收势不是装饰是账本闭环的最后一笔。
补充一个工程层面的思考——蛛网的扇面、裂缝的坐标、菇伞的节拍、血玉的计时器、风灵的层数、锁链的双向——每种机制的核心状态只读一个源头。一个状态一个源头谁也不许从别处抄第二份。补充一个到达层面的思考——这六式招式各有一套到达的写法:蛛网是扇面罩过去、裂缝是地上追过去、菇伞是一张一合泵过去、血玉是插进去养出来、风灵是闪步攒出来、雷光是锁链连过去——到达方式就是招式的身份,改伤害容易改到达难,到达一改就成了另一个招。调招先调到达的节奏,数值放到最后一步。布置的落点也是到达的一部分——网吐在怪要走的道上、裂缝从近处往远处追、菇种落在怪脚下、血玉插在肩膀血流丰富、风灵攒在身侧跟着走、锁链连在攻击路线上,位子对了伤害才生效,位置差了伤害调得再大也是白搭。布置的位置还讲究落子的次序——先埋伏后引怪是算计,先引怪后埋伏是救场,同一颗雷两种次序两种戏。补充一个反馈层面的思考——状态类机制的反馈要分成挂上时的那一下和挂着时的每一拍两层:挂上时给一个大响让玩家知道起效了,挂着时给一个持续的小指示让玩家知道还在。只有挂上那一下没有持续指示的机制,玩家到了中段就开始怀疑它还在不在;只有持续指示没有挂上大响的机制,玩家根本不知道它什么时候开始起效。两层反馈齐了,玩家才对状态有完整的感知。反馈的演出也要有品质:蛛网的化雾、裂缝的合拢、菇的化粉、玉的碎裂、风灵的光、锁链的电——每种消退都该有自己独特的告别仪式,消退不是消失是演完整场戏的最后一段。补充一个实战层面的思考——这类机制在实战里的出场时机比出场频率重要:蛛网要在怪扑过来的路上吐、裂缝要在怪站定的时候锤、菇要在怪的必经之路上种、血玉要在怪刚进场的时候插、风灵要在怪的攻击间隙闪、锁链要在怪最凶的时候连——时机的算计比使用的频率更能区分高低手。设计的重心应该放在让时机可读而不是让使用变容易——时机可读的机制教玩家读战场,时机不可读的机制教玩家按快补充一个数值层面的思考——状态类机制的数值要分挂上时的那个大数和挂着期间的那些小数:挂上时给一个大数字让玩家有获得感,挂着期间给小数字让玩家持续感知。大数和小数的比例要在三比一到五比一之间——大太多了变成一次性的爆发,小太多了变成温水煮青蛙什么感觉都没有。数值的节奏和机制的节奏要配:连发型的机制数值碎、蓄力型的机制数值厚、触发型的机制数值尖。
写完留一句给做锁链系的同学:玩家连的是锁链也是一场双向的赌——它打得越勤你回得越多正循环一旦转起来锁链就成了永动机。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 先抛一个坑:幻影分身和你长得一模一样——怪分不清哪个是真的你怎么办?这篇把幻影分纹整套写法拆开:出影、影动、影…
【游戏功能】 隐蔽报错引入:一个很隐蔽的报错——骨刺明明迸了五根,怪的身上只扎到了三根。这篇把骨刺迸纹整套写法拆开:标记、迸…
【游戏功能】 单行代码拆解:先看一行代码: 冰路一铺,踩上滑三步 ——冰霜路的全部机关就这一行。这篇把冰霜路纹整套写法拆开:…
【游戏功能】 先抛一个坑:蜂群放出去,怎么让它们只咬怪不咬自己?这篇把蜂群召纹整套写法拆开:放蜂、追身、蛰刺、蜂散,一段一段…
【游戏功能】 隐蔽报错引入:一个很隐蔽的报错——铁壁明明立了,怪的爪子还是穿过来了。这篇把铁壁弹纹整套写法重写成篇:立壁、弹…
【游戏功能】 线上事故引入:早上温泉的血泉出了怪相——血泉涌的节奏快过了怪的出爪节奏。这篇把血泉涌纹整套写法重写成篇:引泉、…