【游戏功能】
线上事故引入:早上莲池的机关出了乌龙——玩家踩了白莲回血,怪踩了白莲也回血,莲花不认阵营。这篇把双生莲纹整套写法重写成篇:莲池生花、踩花应效、双花互斥、时辰重开,一段一段照抄能跑。
一、效果演示
演示场莲池里开两朵莲花——白莲和紫莲。点「踏莲!」:侠客踏向白莲——白莲闭合回八点气血;紫莲闭合炸开怪挨十四。踩完一朵两朵都闭合三秒后重开。白莲回血紫莲炸怪踩哪朵看血线。
flowchart TD
A[莲池双花] --> B[踩一朵]
B --> C{踩到哪朵}
C -- 白莲 --> D[回八点]
C -- 紫莲 --> E[炸怪十四]
D --> F[闭合三秒重开]
E --> F
fx-crest-twinlotus
二、底层原理
双生莲的机关是"踩花应效"——白莲踩了回血紫莲踩了炸怪。正解是应效的账第一行读踩的人。白莲回血红莲炸怪是一套双择。三秒的重开花给了双择一个节拍。幂尔框架这边开合收在每拍推进里应效的账写在踩踏判定上。
这套玩法的代码量不到八十行,难的不是开花而是踩花认人——白莲回血红莲炸怪应效的账第一行读踩的人。
白莲回血红莲炸怪的搭配是一套双择:血线低踩白莲回血血线稳踩紫莲打输出。三秒的重开花给了双择一个节拍。
三、核心代码:完整模块(上·骨架)
-- @file CrestTwinLotus.lua
-- 双生莲纹
local M = {}
local CONST = { WHITE_HEAL = 8, PURPLE_DMG = 14, REBLOOM_TIME = 3, AUTOINC_BASE = 1207600 }
local _white = true
local _purple = true
local _bloomT = 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.WhiteOpen() return _white end
function M.PurpleOpen() return _purple end
四、核心代码:完整模块(下·推进与卸载)
-- 踩花应效
function M.Step(w, p)
if w and _white then _white = false ShowTip("白莲回八——气血涨了") return CONST.WHITE_HEAL end
if p and _purple then _purple = false ShowTip("紫莲炸开——十四!") return CONST.PURPLE_DMG end
return 0
end
if not _ticker then
_ticker = SL:Schedule(function(dt)
if _white and _purple then return end
_bloomT = _bloomT + dt
if _bloomT >= CONST.REBLOOM_TIME then _bloomT = 0 _white = true _purple = true ShowTip("双莲重新开花") end
end, 0.05)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("踏白莲", function()
local heal = M.Step(true, false)
ShowTip("白莲回" .. heal .. "点")
end)
SL:BindDebugButton("踏紫莲", function()
local dmg = M.Step(false, true)
ShowTip("紫莲炸" .. dmg .. "点")
end)
ShowTip("技能已加载: 双生莲纹")
end, 1.0)
function M.Unload()
if _ticker then SL:Unschedule(_ticker) end
_white = true
_purple = true
end
return M
五、机制问答
问:白莲和紫莲同时开吗?
答:不会——踩完一朵两朵都闭合三秒后同时重开。
问:不踩莲会怎样?
答:莲自己谢——谢了重开不踩白不踩。
问:白莲回血有上限吗?
答:每次八点血满就白踩。
问:紫莲炸伤和刀伤一样吗?
答:不一样——紫莲炸的是固定十四。
问:三秒重开花管什么?
答:双择的节拍——等待里选下一朵选的学问在三秒里。
六、调参与实战怎么用
参数三个量——开花间隔、白莲回血、紫莲炸伤。三秒重开配八和十四是双择的甜点位。常见坑:应效不认人给怪开药房;花不闭合踩成踩地板。
补充一个设计层面的思考——冰花的脆、锁符的固、魂体的散、匕首的锐、莲花的合、石中剑的沉——形状对了味道就对了,数值只是往对的形状里填的分量。补充一个到达层面的思考——这六式招式各有一套到达的写法:冰花长在身上慢慢变脆、锁符在血线拉一道铁闸、魂体飘到怪身边去打、匕首留在身子里慢慢蓄力、莲花等着人来踩、石中剑等着人来拔——到达方式就是招式的身份,改伤害容易改到达难,到达一改就成了另一个招。调招先调到达的节奏,数值放到最后一步。布置的落点也是到达的一部分——冰花长在哪个部位、雷埋在道口还是道心、图腾立在身边还是远处,位子对了伤害才生效,位置差了伤害调得再大也是白搭。布置的位置还讲究落子的次序——先埋雷后引怪是算计,先引怪后埋雷是救场,同一颗雷两种次序两种戏。补充一个反馈层面的思考——状态类机制的反馈要分成挂上时的那一下和挂着时的每一拍两层:挂上时给一个大响让玩家知道起效了,挂着时给一个持续的小指示让玩家知道还在。只有挂上那一下没有持续指示的机制,玩家到了中段就开始怀疑它还在不在。两层反馈齐了,玩家才对状态有完整的感知。补充一个实战层面的思考——这类机制在实战里的出场时机比出场频率重要:冰花要在怪的甲还没厚的时候种、锁血要在怪的连招来之前开、魂体要在输出窗口的门口出窍、匕首要在怪的硬直里插、莲花要在踩完有收益的节拍里踩、石中剑要在上一把刃的加成耗尽时拔——时机的算计比使用的频率更能区分高低手。补充一个数值层面的思考——状态类机制的数值要分挂上时的那个大数和挂着期间的那些小数:挂上时给一个大数字让玩家有获得感,挂着期间给小数字让玩家持续感知。大数和小数的比例要在三比一到五比一之间——大太多了变成一次性的爆发,小太多了变成温水煮青蛙。补充一个工程层面的思考——冰晶的生长、锁血的铁闸、魂体的坐标、匕首的蓄力、莲花的开合、剑的品阶——每种机制的核心状态都只读一个源头。一个状态一个源头谁也不许从别处抄第二份。到达方式也是到达层面的账——冰花长在身上慢慢变脆、锁符在血线拉一道铁闸、魂体飘到怪身边去打、匕首留在身子里慢慢蓄力、莲花等着人来踩、石中剑等着人来拔——到达方式就是招式的身份,改伤害容易改到达难,到达一改就成了另一个招。调招先调到达的节奏,数值放到最后一步。布置的落点也是到达的一部分——冰花长在哪个部位、雷埋在道口还是道心、图腾立在身边还是远处,位子对了伤害才生效,位置差了伤害调得再大也是白搭。
写完留一句给做机关花的同学:玩家踩的是花也是一道选择题——白莲回血红莲炸怪踩哪朵看血线说话。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…