【游戏功能】
石肤护体,减伤五成但走路慢一半——石肤的天平两端:甲厚了脚步沉,脚步轻了甲就薄。这篇把整套模块拆开:配置表、石肤构件、减伤结算、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:石肤护体,减伤但减速
演示场点「石肤!」:玩家周身亮起一圈石纹——"石肤 八秒"。接下来的八秒里怪的刀拍过来:十四点变七点,减伤五成。但走路也慢了一半——你追不上它,它也追不上你。八秒一到石纹碎裂,恢复血肉之躯。演示里试两笔账:石肤期硬抗五刀只掉三十五点,和没有石肤硬抗五刀掉七十点——同样的五刀,差距就是一倍。石肤教的是交换:防御换速度,站得住的人走不快。
fx-stoneskin
二、底层原理:一面石肤表加一次减伤结算
模块的机关是一对搭档。石肤表:激活的八秒里玩家的受击乘零点五——减伤比例是固定的五成,不是按次数递减的阶梯。速度惩罚:石肤期间移速乘零点五——走得慢但走得稳,防御的代价写在脚上。和金身那类全免伤害的分野在"石肤是折扣不是免死":金身不受伤但有时限,石肤受伤但受伤减半——石肤是可以长期维持的战斗姿态,金身是一瞬间的无敌帧。
减伤为什么固定五成而不是递增?递增的版本玩家会为了追求最高减伤而一直站着不动,石肤从战斗姿态变成了龟缩策略;固定五成让每一秒的石肤期都有相同的价值,节奏不会崩。
三、核心代码:完整模块(上·骨架)
-- @file StoneSkin.lua
-- 石肤 —— 石肤护体,减伤但减速
local StoneSkin = {}
local CONST = {
SKIN_LIFE = 8.0,
SKIN_CD = 6.0,
CUT_PCT = 0.5,
MOVE_MULT = 0.5,
COLOR_SKIN = "#a8a890",
COLOR_DEEP = "#4a4a32",
COLOR_GHOST = "#e0e0d0",
ZORDER_SKIN = 131,
ZORDER_FX = 135,
AUTOINC_BASE = 1067000,
}
local _skinT = 0
local _cdLeft = 0
local _skinFx = nil
local _scheduler = nil
local _autoInc = 0
local function GenID(prefix)
_autoInc = _autoInc + 1
return string.format("%s_%d", prefix or "SSK",
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 StoneSkin.Cast()
if _cdLeft > 0 or _skinT > 0 then return end
local myID = SL:GetValue("USER_ID")
if not myID then return end
_cdLeft = CONST.SKIN_CD
_skinT = CONST.SKIN_LIFE
SL:SetActorRate(myID, "move", CONST.MOVE_MULT)
SafeRemove(_skinFx)
_skinFx = GUI:Layout_Create(GUI:Attach_SceneF(),
GenID("Skin"), 0, 0, 0, 0, false)
GUI:setLocalZOrder(_skinFx, CONST.ZORDER_SKIN)
SL:PlayStoneUpFx(myID)
SL:TipAboveMe("石肤!")
ShowTip("石肤护体——八秒减伤五成但走路慢一半")
end
四、核心代码:完整模块(下·定时器与减伤出口)
-- 减伤出口:石肤期的刀打五折
SL:RegisterLUAEvent(LUA_EVENT_BEFORE_HURT, "SSK_Cut", function(tid, dmg)
if _skinT > 0 and tid == SL:GetValue("USER_ID") then
return math.floor(dmg * CONST.CUT_PCT)
end
return dmg
end)
-- 定时器:石肤倒计时与石纹跟脚
if not _scheduler then
_scheduler = SL:Schedule(function(dt)
_cdLeft = math.max(0, _cdLeft - dt)
if _skinT > 0 then
_skinT = _skinT - dt
local myID = SL:GetValue("USER_ID")
local mp = GetActorPos(myID)
if _skinFx and mp then
GUI:setPosition(_skinFx, mp.x, mp.y - 52)
end
if _skinT <= 0 then
SafeRemove(_skinFx)
ShowTip("石肤碎了——恢复常态")
end
end
end, 0.02)
end
SL:ScheduleOnce(function()
SL:BindDebugButton("石肤", function()
StoneSkin.Cast()
end)
ShowTip("技能已加载: 石肤 (调试按钮触发)")
end, 1.0)
function StoneSkin.Unload()
if _scheduler then SL:Unschedule(_scheduler) end
SL:UnregisterLUAEvent(LUA_EVENT_BEFORE_HURT, "SSK_Cut")
SafeRemove(_skinFx)
_skinT = 0
end
return StoneSkin
五、机制问答
问:石肤期能出刀吗?
答:能——石肤只减伤不封攻击,你照砍它照打,这是石肤和金身最大的分别:金身不还手,石肤还手打五折。
问:石肤和血契叠加吗?
答:不冲突——石肤减伤五成,血契加输出五成,两套叠加就是"挨七打三十"的奇怪平衡,能用但不建议常态开。
问:石肤能提前解除吗?
答:不能——八秒就是八秒,石肤是硬时长的战斗姿态不是可开关的护盾。
问:石肤期能喝水吗?
答:能——喝药走治疗链和减伤链互不干扰,石肤期喝水效率照旧。
问:石肤碎了有惩罚吗?
答:没有——八秒到了自动消失,没有虚弱期,没有碎裂反噬,石肤是一面干净的盾。
问:石肤期能吃治疗吗?
答:能——石肤减的是伤害不是治疗,治疗照加不加折扣,石肤期喝药效率照旧。
问:石肤期的攻击有加成吗?
答:没有——石肤是纯防御姿态不加攻击,它的价值全在"站得久"不在"打得重",这是它和血契最大的分别。
六、调参指南与商业服怎么用
第四笔是减伤的深度:五成是"抗得住但不无敌"的档——七成以上石肤变成站桩输出器,三成以下石肤形同虚设。第三笔是减速的代价:移速乘零点五是"明显变慢但不至于爬行"的档——太慢石肤成了活靶子,太快失去了防御的代价。第二笔是冷却的节拍:六秒冷却对八秒时长是"无缝但有真空一秒"的节奏——冷却等于时长的版本石肤变成了永久形态,稍短的冷却制造一拍切换窗口。第一笔是石纹的质感:减伤期的石纹要有一圈石头的纹理而不是纯色圆环——纹理感决定了"石头"的视觉暗示,玩家看一眼就知道这是硬甲不是光盾。常见坑三个:减伤的乘区和装备减伤叠加后伤害变成负数;石肤期的走位速度没有生效,玩家以为在走其实没变慢;石纹的显示在移动时抖动,纹理跟脚没做好。
商业服里石肤是"铁壁流派"的看家甲:别人比输出他比站得久——商城里石肤的纹理做成品级,砂岩纹、花岗纹、龙鳞纹,那一圈转满石肤期的石纹就是铁壁玩家的勋章。运营落地还有两笔:一段是站桩教学——教一句"会扛的人才有输出",流派第一课是站得稳;一段是铁壁榜——按石肤期吸收的总伤排名,站得最硬的人有碑。变体做成裂石:石肤到期时碎裂的石片弹出去伤怪——从纯防御到防御带反击,铁壁流派的第二课。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。
铁壁的心法就一句:慢慢走也走得远,快快跑也跑不远。
铁壁还有半句压箱的:石肤期不是让你站的,是让你走近了打的。
石肤的铁律就一条:甲厚了脚步沉——这条公平写在了公式里。
铁壁流派的口诀也只有一句话:甲在人在。
写完留一句给做防御系的同学:石肤卖的是"站得住就赢了一半"——那一圈石纹和减半的刀伤,是把"挨打"从被动变成主动选择的分界线。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…
【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…
【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…
【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…
前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…
【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…