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

锁地:打它脚边的地,它进不了身

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

【游戏功能】

打它脚边的地,它进不了身——锁地的全部机关就这一条:对怪脚下的地面施术,三秒里这块地变成它的禁区——它攻得出但走不进,站在圈外干瞪眼。这篇把整套模块拆开:配置表、锁地构件、禁区判定、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:打它脚边的地,它进不了身

演示场点「锁地!」:一道绿光打在怪脚边——地上亮起一圈绿色的锁地图案,怪当场刹住脚步。三秒里它出拳照打、嘴里照吼,就是脚下一动不能动——离你六十步的距离成了它永远跨不过的鸿沟。三秒一到地解封了——它缓过来第一步就是冲你来的。演示里试两笔账:锁地期你的刀照砍不误,和地解封后它变本加厉的第一扑——锁地的三秒是白送的输出窗口,解封后的反扑要提前备好后续手段。锁地教的是战场地理:它强不是因为力气大,是因为它站的地方对。

demo
 fx-groundlock

二、底层原理:一面锁地图案加一段禁区判定

模块的机关是一对搭档。锁地图案:按钮落术的那一帧在怪脚边画圈——圈心定在怪的当前坐标不跟怪走,圈内的地面三秒变成禁区。禁区判定:圈亮的三秒里怪的一切位移指令被驳回——走、跑、冲、闪全被挡,攻击链照转不误。和定身那些全封控制的分野在"锁地只封脚不封手":定身是连手带脚全封的硬控,锁地只是把脚下的地变成禁区——它照常出招照常嘶吼,只是寸步难行,这份"能动但走不了"的微妙就是锁地的全部性格。

锁地为什么不锁攻击?锁攻击的版本锁地变成沉默加定身的复合控制,一套按钮管三件事太多了;只锁脚的锁地留了还手的口子,三秒里它打你的刀是你的走位课的学费。

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

lua
-- @file GroundLock.lua
-- 锁地 —— 打它脚边的地,它进不了身

local GroundLock = {}

local CONST = {
    LOCK_LIFE     = 3.0,
    LOCK_CD       = 5.0,
    LOCK_RADIUS   = 50,

    COLOR_LOCK    = "#708858",
    COLOR_DEEP    = "#2a3a18",
    COLOR_GHOST   = "#c8e0a0",

    ZORDER_LOCK   = 130,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1065000,
}

local _lockT     = 0
local _lockID    = 0
local _lockX     = 0
local _cdLeft    = 0
local _lockFx    = nil
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "GLC",
        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 GroundLock.Cast()
    if _cdLeft > 0 or _lockT > 0 then return end
    local tid = SL:GetValue("MARK_TARGET_ID")
    local tp = GetActorPos(tid)
    if not tid or not tp then return end
    _cdLeft = CONST.LOCK_CD
    _lockT = CONST.LOCK_LIFE
    _lockID = tid
    _lockX = tp.x
    SL:FreezeActorMove(tid, CONST.LOCK_LIFE)
    SafeRemove(_lockFx)
    _lockFx = GUI:Layout_Create(GUI:Attach_SceneF(),
        GenID("Lock"), _lockX, tp.y, 0, 0, false)
    GUI:setLocalZOrder(_lockFx, CONST.ZORDER_LOCK)
    SL:PlayLockFx(tid)
    SL:TipAbove(tid, "锁地!")
    ShowTip("地封了——三秒里它进不了身")
end

四、核心代码:完整模块(下·定时器与位移驳回)

lua
-- 位移驳回:锁足期一切移动指令无效
SL:RegisterLUAEvent(LUA_EVENT_MOVE_REQUEST, "GLC_Stop", function(tid)
    if _lockT > 0 and tid == _lockID then
        return false
    end
    return true
end)

-- 定时器:锁地倒计时与图案跟脚
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _lockT > 0 then
            _lockT = _lockT - dt
            local tp = GetActorPos(_lockID)
            if _lockFx and tp then
                GUI:setPosition(_lockFx, _lockX, tp.y)
            end
            if _lockT <= 0 or not tp
                or SL:GetValue("ACTOR_DEAD", _lockID) then
                _lockT = 0
                SafeRemove(_lockFx)
                ShowTip("地解封了——它又能动了")
            end
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("锁地", function()
        GroundLock.Cast()
    end)
    ShowTip("技能已加载: 锁地 (调试按钮触发)")
end, 1.0)

function GroundLock.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_MOVE_REQUEST, "GLC_Stop")
    if _lockT > 0 then SL:ThawActorMove(_lockID) end
    SafeRemove(_lockFx)
    _lockT = 0
end

return GroundLock

五、机制问答

问:锁地能对空中的怪用吗?
答:看落地——怪跳起来在空中时脚下没有地面可以锁,锁地要贴着地面念,空中目标写明"落地可锁"。

问:锁地圈里的玩家能走吗?
答:能——锁地只封怪的脚不封玩家的脚,圈是它的禁区不是你的,你的走位不受任何影响。

问:锁地和禁足有什么分别?
答:锁地只封脚不封手,禁足连手带脚全封——锁地的怪能打你但追不上你,禁足的怪连打都不能打。

问:锁地被驱散了怎么办?
答:驱散类清地效,锁地图案当场碎裂,三秒变成零秒——驱散怪是锁地的天敌,先清驱散再锁地是进阶课。

问:锁地圈里能放火墙吗?
答:能——锁地封走位不管地面属性,火墙照烧、毒圈照铺,两套地域效果叠加是进阶连招。

问:锁地和冰冻能一起用吗?

答:能——锁地封走位不封攻击,冰冻封攻击不封走位,两套叠上怪既走不了也打不了,但冰冻的时长比锁地短,先锁地再冰冻是进阶连招。

六、调参指南与商业服怎么用

第四笔是圈径的宽度:五十步的圈径对怪六十步的攻击距离是"出得了手走不了路"的档——圈太大怪的攻击够不着你变成了白锁,太小怪的爪子照拍你照疼没有封锁感。第三笔是锁地的时长:三秒对冷却五秒是"封完歇两秒"的节奏——锁太久地变成了永久陷阱,太短玩家刚到位就解封了。第二笔是图案的层级:锁地图案要画在地面上层但模型下层——图案压住怪的脚但不挡怪的身体,层级对了怪被"钉"在地上而不是被"盖"在地上。第一笔是解封的预告:解封前半秒锁环闪两下——闪是预告,玩家撤一步反扑落空,没有预告的解封就是坑。常见坑三个:锁地圈跟着怪走,圈变成移动禁区而不是固定陷阱;锁地期间怪的受击退效果把怪推出圈外,圈外不受锁但视觉还画着圈;多层锁地叠加不互斥,两层锁地三秒变六秒。

商业服里锁地是"封地师流派"的地契:别人的控制术封人,他的控制术封地——商城里锁地图案的样式做成品级,土契、石契、龙纹地契,那道一圈绿光钉在地上的锁印就是封地师的地契。运营落地还有两笔:一段是封地教学——教一句"封它的脚,不封它的手",流派第一课是理解控制的边界;一段是封地榜——按锁地期间打出的总伤排名,封得最准的人有碑。变体做成封地阵:锁地图案扩大成三步宽的阵——从锁一只到锁一片,封地师的地契越写越大。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

封地师的老话再念一遍:先封它的地,再封它的命。

写完留一句给做封锁系的同学:锁地卖的是"你脚下的地归我管"——那道一圈绿光钉在地上的锁印和三秒寸步难行的怪,是对一切走位最直接的一句话:这地方,我封了。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

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

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

LATEST ARTICLES

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

进阶实战游戏功能

走一格为什么是半秒?拆开996引擎走路状态机

接手二开的兄弟几乎都撞过同一堵墙:玩家嫌走路"一格一格像机器人",老板拍板要"丝滑移动",改服务端速度?不对。改客户端动画帧…

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

特效总挂在脚后跟上?挂点表选对一行顶十行

【游戏功能】 先看一个熟场面:法师的火球特效挂在怪的脚后跟上,明明技能说明写着"焚烧其面",火星子却在地上打滚。群里有位策划…

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

刀刀都判命中,玩家为什么喊挥空?命中表现差的那一拍

【游戏功能】 上周有个开服的老板在群里发了一段录屏:他的战士明明刀刀都砍中了,观众却一片"这刀挥空了吧"。他原话是"判定日志…

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

怪的皮一会儿绿一会儿红?状态染色的色号表就三列

【游戏功能】 先说结论放在开头:怪的皮一会儿绿一会儿红,不是美术换了几套贴图,是染色系统在怪身上盖了一层"色镜"。开服群里有…

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

996引擎Buff系统解剖:中毒变绿、冰冻发白是怎么挂上去的

前两天群里有个架设的朋友问了个需求:中毒的人要变绿、每两秒掉一次血、毒还能叠五层,问是不是要在服务端把整套状态机重写。我说你…

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

编钟纹:五口钟排着敲,一口更比一口疼

【游戏功能】 先抛一个坑:五口钟一模一样大,为什么一口比一口疼?先后次序动不得吗?倒过来敲会怎样?这篇把编钟纹整套写法拆开:…

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