CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
进阶实战游戏功能996引擎

石肤:石肤护体,减伤但减速

2026-10-01 18:51 作者:996 技术组 996引擎Lua教程传奇脚本进阶实战游戏功能996引擎

【游戏功能】

石肤护体,减伤五成但走路慢一半——石肤的天平两端:甲厚了脚步沉,脚步轻了甲就薄。这篇把整套模块拆开:配置表、石肤构件、减伤结算、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:石肤护体,减伤但减速

演示场点「石肤!」:玩家周身亮起一圈石纹——"石肤 八秒"。接下来的八秒里怪的刀拍过来:十四点变七点,减伤五成。但走路也慢了一半——你追不上它,它也追不上你。八秒一到石纹碎裂,恢复血肉之躯。演示里试两笔账:石肤期硬抗五刀只掉三十五点,和没有石肤硬抗五刀掉七十点——同样的五刀,差距就是一倍。石肤教的是交换:防御换速度,站得住的人走不快。

demo
 fx-stoneskin

二、底层原理:一面石肤表加一次减伤结算

模块的机关是一对搭档。石肤表:激活的八秒里玩家的受击乘零点五——减伤比例是固定的五成,不是按次数递减的阶梯。速度惩罚:石肤期间移速乘零点五——走得慢但走得稳,防御的代价写在脚上。和金身那类全免伤害的分野在"石肤是折扣不是免死":金身不受伤但有时限,石肤受伤但受伤减半——石肤是可以长期维持的战斗姿态,金身是一瞬间的无敌帧。

减伤为什么固定五成而不是递增?递增的版本玩家会为了追求最高减伤而一直站着不动,石肤从战斗姿态变成了龟缩策略;固定五成让每一秒的石肤期都有相同的价值,节奏不会崩。

三、核心代码:完整模块(上·骨架)

lua
-- @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

四、核心代码:完整模块(下·定时器与减伤出口)

lua
-- 减伤出口:石肤期的刀打五折
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 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

进阶实战游戏功能

别再全局变量满天飞:996引擎消息通知机制入门

评审二开代码的时候,我看到最多的坏味道不是写错,是"穿墙":怪物死亡的函数里直接调 UI 刷新,UI 按钮回调里直接改怪物状…

2026-10-03 06:06 996 技术组
进阶实战游戏功能

别再全局变量满天飞:996引擎消息通知机制入门

评审二开代码的时候,我看到最多的坏味道不是写错,是"穿墙":怪物死亡的函数里直接调 UI 刷新,UI 按钮回调里直接改怪物状…

2026-10-03 05:55 996 技术组
进阶实战游戏功能

别再全局变量满天飞:996引擎消息通知机制入门

评审二开代码的时候,我看到最多的坏味道不是写错,是"穿墙":怪物死亡的函数里直接调 UI 刷新,UI 按钮回调里直接改怪物状…

2026-10-03 05:52 996 技术组
进阶实战游戏功能

别再全局变量满天飞:996引擎消息通知机制入门

评审二开代码的时候,我看到最多的坏味道不是写错,是"穿墙":怪物死亡的函数里直接调 UI 刷新,UI 按钮回调里直接改怪物状…

2026-10-03 05:51 996 技术组
进阶实战游戏功能

背包一卡卡三年:GUIQuickCell懒加载列表救了你

做排行榜、背包、邮件列表的兄弟,迟早会遇到同一张工单:"列表一打开掉帧,滑动像幻灯片"。99% 的原因是把一千行数据老老实实…

2026-10-03 05:46 996 技术组
进阶实战游戏功能

i2、C32、i8s都是什么鬼?996引擎网络协议类型系统速查

新接手 996 引擎客户端的人,打开 network/networkUtil.lua 看到满屏的 i1 、 I4 、 C32…

2026-10-03 05:40 996 技术组