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

遗泽:倒下的怪留一圈遗泽,站进去三秒加两成五

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

【游戏功能】

怪倒下的地方为什么值得多站一会儿?遗泽给了个温柔的说法:它倒下的那一片地会留下十二秒的泽环——站在环里满三秒,泽气上身,六秒里刀刀加两成五。急着走的白走,肯停的得实惠。这篇把整套模块拆开:配置表、泽环表、踏泽结算、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:倒下的怪留一圈遗泽,站进去三秒加两成五

演示场两只小怪带一只头目。普攻撂倒一只小的:它倒下的位置亮起一圈青绿的泽环,环上挂着十二秒的存续。玩家就站在环边——站满三秒的瞬间"泽+25%"蹦出来,六秒里刀刀十二点。点「踏泽!」:不用等三秒,直接把最近一环的泽气一口吸干——加成立到,环当场消失。演示里算两种路线:站环等三秒白得,和踏泽即得但环没了——站环是细水,踏泽是急用,两种喝法各有各的场合。遗泽教的是战场的节奏:怪倒下的地方不是终点,是补给点。

demo
 fx-legacyring

二、底层原理:一张泽环表加一次踏泽结算

模块的机关是一对搭档。泽环表:小怪死亡的那一帧在尸位落环——环存续十二秒、半径六十步,站进环里累计满三秒触发泽气。踏泽结算:按钮把最近一环的存续一口吸干——不等三秒直接上身六秒加成,环随之消散,攒着的多环可以一口气连踏。和领域类常驻圈的分野在"环是消耗品不是阵地":领域圈着就有效,泽环站满即耗尽——每环一口,喝完就没,补给的经济感全在"耗"字上。

泽气为什么要求站满三秒?三秒的等待是"肯停"的门槛——零门槛的版本玩家根本不会为站位做取舍,三秒的停顿让"在哪里杀怪"变成了一个值得规划的问题。

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

lua
-- @file LegacyRing.lua
-- 遗泽 —— 倒下的怪留一圈遗泽,站进去三秒加两成五

local LegacyRing = {}

local CONST = {
    RING_LIFE     = 12.0,
    RING_RADIUS   = 60,
    STAND_NEED    = 3.0,
    BUFF_LIFE     = 6.0,
    BUFF_AMP      = 1.25,

    COLOR_RING    = "#5aa068",
    COLOR_DEEP    = "#1e4a28",
    COLOR_GHOST   = "#c0ecd0",

    ZORDER_RING   = 128,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1030000,
}

local _rings     = {}
local _standT    = 0
local _buffT     = 0
local _cdLeft    = 0
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "LGR",
        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 GrantBuff()
    _buffT = CONST.BUFF_LIFE
    _standT = 0
    SL:PlayLegacyBuffFx(SL:GetValue("USER_ID"))
    SL:TipAboveMe("泽+25%")
    ShowTip("泽气上身——六秒里刀刀加两成五")
end

local function DropRing(x)
    table.insert(_rings, { x = x, t = CONST.RING_LIFE })
    ShowTip("小的倒下留了一圈泽——站进去或踏掉都行")
end

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

lua
-- 死亡钩子:尸位落环
SL:RegisterLUAEvent(LUA_EVENT_ACTOR_DEATH, "LGR_Drop", function(tid)
    if not SL:GetValue("ACTOR_IS_SMALL", tid) then return end
    local tp = GetActorPos(tid)
    if tp then DropRing(tp.x) end
end)

-- 踏泽出口:吸干最近一环
function LegacyRing.Step()
    if _cdLeft > 0 then
        ShowTip("泽在吸——" .. string.format("%.1f", _cdLeft) .. "秒")
        return
    end
    local myID = SL:GetValue("USER_ID")
    local mp = GetActorPos(myID)
    if not mp then return end
    local best, bd = nil, 999
    for i, r in ipairs(_rings) do
        local d = math.abs(r.x - mp.x)
        if d < bd then bd = d; best = i end
    end
    if not best then
        ShowTip("地上没泽环——先放倒一只小的")
        return
    end
    _cdLeft = 6.0
    table.remove(_rings, best)
    GrantBuff()
end

-- 定时器:站环累计与泽环寿命
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _buffT > 0 then
            _buffT = _buffT - dt
            if _buffT <= 0 then ShowTip("泽气散了——下一环再踏") end
        end
        local myID = SL:GetValue("USER_ID")
        local mp = GetActorPos(myID)
        local inRing = false
        for i = #_rings, 1, -1 do
            local r = _rings[i]
            r.t = r.t - dt
            if r.t <= 0 then table.remove(_rings, i)
            elseif mp and math.abs(r.x - mp.x) <= CONST.RING_RADIUS then
                inRing = true
            end
        end
        if inRing and _buffT <= 0 then
            _standT = _standT + dt
            if _standT >= CONST.STAND_NEED then GrantBuff() end
        else
            _standT = math.max(0, _standT - dt)
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("踏泽", function()
        LegacyRing.Step()
    end)
    ShowTip("技能已加载: 遗泽 (调试按钮触发)")
end, 1.0)

function LegacyRing.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_ACTOR_DEATH, "LGR_Drop")
    _rings = {}
end

return LegacyRing

五、机制问答

问:头目倒下也留环吗?
答:留大的——头目的泽环比小怪宽一圈、存续翻倍,终局的泽是全场最大的补给。

问:站在两环重叠处算两份吗?
答:不算——泽气一人一份,重叠站只按一份起算,贪多的站法浪费的是站位不是收益。

问:泽气期能续吗?
答:不能续只能重新起——泽气过了得再站三秒或再踏一环,两段泽气之间总有空档,空档就是节奏。

问:环里的队友能蹭我的三秒吗?
答:各站各的——泽气认站不认人,队友站满他自己的三秒得他自己的加成,环是公共的自助餐。

问:环被踏掉还能站吗?
答:不能——踏泽连环带泽一口吸干,环没了站的是空气,踏与站只能选一头。

问:泽气期被控会掉加成吗?

答:不会——泽气认时长不认状态,晕住的六秒照样算,泽气上身后谁也收不回去。

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

第四笔是环的寿命:十二秒对一场四十秒的架是"前半场的环后半场过期"——寿命太长地上环越攒越多,太短玩家还没赶到就化。第三笔是站立的门槛:三秒对六十步的环径是"走两步就够得着"的宽度——门槛五秒站成罚站,一站即得没有取舍。第二笔是加成的斤两:两成五对十点平砍是十二点五的泽刀——加成太薄站环像上香,太厚环里环外两份职业。第一笔是环的呼吸:泽环的光随存续收窄——环越暗剩下的时间越少,读环就能读出"要不要赶这一趟"。常见坑三个:头目的尸环和尸爆的火圈叠在一起,圈套圈看不清;泽气期切换场景没清,带着加成跨图;站环判定只认横坐标,斜着站出环也算站。

商业服里遗泽是"守泽人流派"的家学:别人追着怪跑,他算着怪倒在哪——商城里泽环的样式做成品级,青环、玉环、祖泽环,倒下位置亮起的那一圈青光就是守泽人的田。运营落地还有两笔:一段是落点教学——教一句"把它引到你站位好的地方再杀",流派的第一课是让怪选地方死;一段是守泽榜——按泽气期的总伤排名,最会养泽的人有碑。变体做成祖泽:头目的泽环谁站谁得、不设人数——全队站进祖泽的场面就是守泽流派的高光。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

守泽人的账本就一句话:让它死在我站的地方。

再补一笔守泽的细账:环要十二秒过期,泽气只要六秒——一环一口刚刚好,贪第二口就得指望第二只怪。

守泽还有半句压箱的:泽环十二秒,贪第三口的人先算算自己的血。

写完留一句给做区域系的同学:遗泽卖的是"倒下的地方值得停一停"——那一圈圈青光亮起的尸位,是把每场击杀都变成补给站的地契。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

撩拨:撩它三下它就上头,一头撞进坑里

【游戏功能】 火气 = 火气 + 1 —— 每撩一下涨一格的火,三格烧满它就上头:一头冲过来,收不住脚,穿过你的位置一头扎进…

2026-10-01 15:00 996 技术组
进阶实战游戏功能

抛砖:一块砖砸出个破绽,接住就是双倍

【游戏功能】 它接招的那一秒,就是你的那一秒。抛砖把这句拳谚做成了机制:一块砖头砸过去,它本能抬手格挡——格挡的一秒二里,招…

2026-10-01 15:00 996 技术组
进阶实战游戏功能

瞭望:扑了它的灯,警戒圈缩一半

【游戏功能】 为什么偷袭总被提前发现?因为它的瞭望灯亮着——二百二十步的警戒圈画在暗处,你一踏进去它就开始上弦。瞭望换个思路…

2026-10-01 15:00 996 技术组
进阶实战游戏功能

爆桶:油桶就在它脚边,一箭的事

【游戏功能】 桶存活着 = 否 —— 一箭点掉一只桶,爆的却是怪的血条:油桶就摆在它脚边,三十点的爆炸不分敌我地溅——溅不溅…

2026-10-01 15:00 996 技术组
进阶实战游戏功能

交班:双岗交班那一秒,谁都不设防

【游戏功能】 交班计时 = 1.0 —— 交班的那一秒,两个岗哨都在行礼:手离开刀,眼离开敌,全身的门都开着。交班把这一秒做…

2026-10-01 15:00 996 技术组
进阶实战游戏功能

挪桩:挪一根路标,把它遛进你算好的道

【游戏功能】 巡逻道 = { 左桩, 右桩 } —— 巡逻道就是这两根桩之间的一条线:桩在哪,道就在哪;道在哪,它就一辈子走…

2026-10-01 15:00 996 技术组