【游戏功能】
prayT = 2.0 —— 念经的两秒,就是超度的全部门槛:对着一具尸体念满两秒,灰烬升起,血回二十,下一刀双倍。挨一下打,念断重来。这篇把整套模块拆开:配置表、超度构件、念诵结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:对尸体念两秒,回二十下一刀双倍
演示场一只小的带一只大的。先撂倒小的:尸体趴在地上,头顶挂着八秒的"尸"字存续。点「超度!」:玩家合掌念诵,身前转起一圈青白的念环——两秒里怪的刀要是拍过来,念环当场砸碎,"念断了"重新来。念满两秒:尸体化作青光散去,"回二十"的绿字爬回血条,"受超度·下一刀双倍"的金字挂起——下一刀二十点。演示里试两种时机:安全期念,和刀口下硬念——念断重来的代价不是两秒,是节奏。超度玩的是险中求稳:尸体的价值要跪着念出来。
fx-salvagepray
二、底层原理:一段念诵引导加一次超度回执
模块的机关是一对搭档。念诵引导:对尸体起念挂两秒的引导——引导认尸体不认距离,念的是最近的一具,挨打即断、断了重来,引导的每一天都在考验站位。超度回执:念满的瞬间尸体化光、回二十、挂"下一刀双倍"的福报——福报认一刀不认时限,用了就散、不用一直在。和吸血那类自动回复的分野在"超度要跪着念":吸血是打出来的被动,超度是念出来的主动——两秒的引导就是这门手艺的手工费。
尸体为什么八秒过期?过期的尸体逼玩家在"打完马上念"和"留着回头念"之间做选择——永不腐烂的尸体把超度变成开局蓄力,八秒的账期让每一具尸体都是限时的功德。
三、核心代码:完整模块(上·骨架)
-- @file SalvagePray.lua
-- 超度 —— 尸体上念两秒,回二十下一刀双倍
local SalvagePray = {}
local CONST = {
PRAY_TIME = 2.0,
CORPSE_LIFE = 8.0,
PRAY_HEAL = 20,
PRAY_CD = 5.0,
COLOR_PRAY = "#a0b8e8",
COLOR_DEEP = "#283a5e",
COLOR_GHOST = "#d8e4fa",
ZORDER_PRAY = 133,
ZORDER_FX = 135,
AUTOINC_BASE = 1032000,
}
local _corpses = {}
local _prayT = 0
local _prayOn = false
local _blessed = false
local _cdLeft = 0
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "SGP",
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 NearestCorpse()
local myID = SL:GetValue("USER_ID")
local mp = GetActorPos(myID)
if not mp then return nil end
local best, bd = nil, 999
for i, c in ipairs(_corpses) do
local d = math.abs(c.x - mp.x)
if d < bd then bd = d; best = i end
end
return best
end
function SalvagePray.Begin()
if _prayOn then
ShowTip("正念着——别断")
return
end
if _cdLeft > 0 then
ShowTip("经在冷却——" .. string.format("%.1f", _cdLeft) .. "秒")
return
end
if not NearestCorpse() then
ShowTip("没尸体可超度——先放倒一只小的")
return
end
_prayOn = true
_prayT = CONST.PRAY_TIME
SL:PlayPrayUpFx(SL:GetValue("USER_ID"))
ShowTip("开始超度——两秒,别让它打断")
end
四、核心代码:完整模块(下·定时器与念断结算)
-- 念断判定:引导期挨打即断
SL:RegisterLUAEvent(LUA_EVENT_BEFORE_HURT, "SGP_Break", function(tid, dmg)
if _prayOn and tid == SL:GetValue("USER_ID") and dmg > 0 then
_prayOn = false
_prayT = 0
SL:TipAboveMe("念断了")
ShowTip("挨了一刀——超度断了,重新念")
end
return dmg
end)
-- 福报出口:下一刀双倍
SL:RegisterLUAEvent(LUA_EVENT_MELEE_HIT, "SGP_Bless", function(tid)
if not _blessed then return 0 end
_blessed = false
return (SL:GetValue("HIT_DAMAGE", tid) or 10)
end)
-- 定时器:念诵推进与尸体腐烂
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
for i = #_corpses, 1, -1 do
_corpses[i].t = _corpses[i].t - dt
if _corpses[i].t <= 0 then table.remove(_corpses, i) end
end
if not _prayOn then return end
_prayT = _prayT - dt
if _prayT <= 0 then
_prayOn = false
_cdLeft = CONST.PRAY_CD
local bi = NearestCorpse()
if bi then table.remove(_corpses, bi) end
SL:RestoreActorHp(SL:GetValue("USER_ID"), CONST.PRAY_HEAL)
SL:PlayPrayDoneFx(SL:GetValue("USER_ID"))
_blessed = true
SL:TipAboveMe("回20")
ShowTip("超度圆满——回二十,下一刀双倍")
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("超度", function()
SalvagePray.Begin()
end)
ShowTip("技能已加载: 超度 (调试按钮触发)")
end, 1.0)
function SalvagePray.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SL:UnregisterLUAEvent(LUA_EVENT_BEFORE_HURT, "SGP_Break")
SL:UnregisterLUAEvent(LUA_EVENT_MELEE_HIT, "SGP_Bless")
_corpses = {}
_prayOn = false
end
return SalvagePray
五、机制问答
问:超度大的尸体回报更多吗?
答:是——大体型的尸体念完回四十,小尸体二十,念经的工钱按尸头的分量结。
问:念诵期自己能走吗?
答:不能——念经要立定,挪半步念就断,这也是超度全部的风险:两秒的定点。
问:福报能囤两份吗?
答:不能——佛只认最新的一念,念满新一份旧的消散,福报是使用权不是存款。
问:尸体腐烂了能念吗?
答:不能——八秒外的尸是土不是功德,对着空气念经账房不认。
问:超度算击杀吗?
答:不算——超度接的是死后的账,击杀早在他倒下时就记完了,超度只是给这段死亡一个体面的收尾。
问:超度能对头目的尸体念吗?
答:能——头目的尸念完回四十,按分量结账的规矩对谁都一样。
六、调参指南与商业服怎么用
第四笔是引导的长度:两秒对怪两点六秒的出手是"一拍之内见分晓"的念期——念太短超度没有紧张感,太长站桩站成活靶。第三笔是尸体的账期:八秒对一场四十秒的架是"每场限量的功德"——账期无限尸体变成常态补给站,太短玩家还没腾出手尸体就化了。第二笔是回血的斤两:二十点对三百血条是半成的安稳——回得太厚超度成了第二口药,太薄没人愿意跪两秒。第一笔是念环的可读:念环转满半圈、半圈、四分之三圈——读环就知道还差几拍,打断的损失看得见才叫风险。常见坑三个:念断的判定漏了持续伤害,毒跳把两秒的念跳成碎片;福报的翻倍写进基础面板,下一刀的双倍和装备暴击乘出四倍;超度的尸体被别的机制清走,念到一半尸体没了。
商业服里超度是"经师流派"的手艺:别人打完就走,他跪下来给每一场死亡收尾——商城里念环的样式做成品级,青环、金环、往生环,那圈围着尸体转的青白念光就是经师的功课。运营落地还有两笔:一段是站位教学——教一句"念之前先看怪的刀表",流派第一课是找安全的两秒;一段是经文榜——按超度切断的总回血与总伤排名,最虔诚的经师有碑。变体做成往生咒:超度大尸体时全场小尸一起化光——一咒超度一片,功德论打赏。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
经师的老话留一句:两秒的经,念的是站位。
再补一笔超度的细账:两秒的经文要挑怪的换箭期念,念在它抬不起手的时候,这两秒的安稳才是真的安稳。
经师还有半句压箱的:超度超的是尸,练的是自己那两秒不慌的手。
香灰落地时,经才算念完。
写完留一句给做引导系的同学:超度卖的是"跪着念出来的安稳"——那圈围着尸体转满两秒的念环,是把每一具尸体都变成功德和回血的两秒仪式。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 火气 = 火气 + 1 —— 每撩一下涨一格的火,三格烧满它就上头:一头冲过来,收不住脚,穿过你的位置一头扎进…
【游戏功能】 它接招的那一秒,就是你的那一秒。抛砖把这句拳谚做成了机制:一块砖头砸过去,它本能抬手格挡——格挡的一秒二里,招…
【游戏功能】 为什么偷袭总被提前发现?因为它的瞭望灯亮着——二百二十步的警戒圈画在暗处,你一踏进去它就开始上弦。瞭望换个思路…
【游戏功能】 桶存活着 = 否 —— 一箭点掉一只桶,爆的却是怪的血条:油桶就摆在它脚边,三十点的爆炸不分敌我地溅——溅不溅…
【游戏功能】 交班计时 = 1.0 —— 交班的那一秒,两个岗哨都在行礼:手离开刀,眼离开敌,全身的门都开着。交班把这一秒做…
【游戏功能】 巡逻道 = { 左桩, 右桩 } —— 巡逻道就是这两根桩之间的一条线:桩在哪,道就在哪;道在哪,它就一辈子走…