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

风声鹤纹:你的名声传出去,它红着眼送上门

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

【游戏功能】

再抛一个坑:风声能不能当武器使?你的名声在怪群里传开,是好是坏?寻常的想法里,名声越响围上来的怪越多——全是坏事。风声纹把这笔账倒了过来:你在一只怪身上扬名,它的同伴听得心惊——闻满三声风,它红着眼主动扑上来,红着眼,也脆着三成。招它来,是给它一个送死的名分。这篇把整套模块拆开:配置表、放风结算、闻风计数、红眼判定、定时器、调试按钮,一段一段照抄能跑。

一、效果演示:你的名声传出去,它红着眼送上门

演示场怪在前面打,同伴在后面观望。点「放风!」:一圈青白色的纹荡开——十二秒风声期。你在前面那只身上每落一刀,后面观望的同伴头顶就浮一颗"闻风"的青点——一刀一声风。三声风攒满,同伴的眼睛红了:脚步快了一半,主动越过同伴朝你冲——冲过来正好挨你三成加成的重刀。风声期的账就是这么算的:你打得越响,它来得越急;它来得越急,死得越快。演示里试两笔账:坐等它慢慢蹭过来的血线消耗和放风招它上门的速决账——风声纹教的是扬名:名声不只是名声,是鱼饵。

demo
 fx-windword

二、底层原理:一次放风结算加一次红眼判定

模块的机关是一对搭档。放风结算:纹成期里你在目标身上的每一刀都往外放一声风——风声认的是你的出手,砍谁放谁的另一半都在听。红眼判定:同伴的闻风计数攒满三声,红眼当场发作——移速攻速一起涨,主动转向扑你;红眼是双刃,攻击的劲头涨了,护体的韧度掉了三成。和嘲讽类机制的分野在"风声红眼是它自愿的":嘲讽改它的仇恨让它不得不来,风声勾它的性子让它自己想来——被勾来的怪带着怒气也带着破绽,这份"自愿送死"的戏是风声纹的魂。

红眼为什么三声就发作?一声就红的版本风声太廉价,玩家随便砍两刀就能牵着怪鼻子走;五声又太熬,一场仗放不满一次风——三声刚好是"有蓄力感也兑现得了"的名声分量。

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

lua
-- @file WindWord.lua
-- 风声鹤纹 —— 你的名声传出去,它红着眼送上门

local WindWord = {}

local CONST = {
    CREST_LIFE    = 12.0,
    CREST_CD      = 4.0,
    RUMOR_CAP     = 3,
    RED_EYE_LIFE  = 6.0,

    COLOR_WIND    = "#98b0c0",
    COLOR_DEEP    = "#384858",
    COLOR_GHOST   = "#d0e4f0",

    ZORDER_WIND   = 133,
    ZORDER_FX     = 135,
    AUTOINC_BASE  = 1127000,
}

local _crestT    = 0
local _cdLeft    = 0
local _rumor     = 0
local _redEyeT   = 0
local _tid       = 0
local _crestFx   = nil
local _scheduler = nil
local _autoInc   = 0

local function GenID(prefix)
    _autoInc = _autoInc + 1
    return string.format("%s_%d", prefix or "WWD",
        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 WindWord.RedEyed()
    return _redEyeT > 0
end

四、核心代码:完整模块(下·放风与红眼)

lua
-- 放风结算:你在目标身上每一刀,同伴听一声风
SL:RegisterLUAEvent(LUA_EVENT_MELEE_HIT, "WWD_Word", function(tid)
    if _crestT <= 0 or not tid or tid ~= _tid then return 0 end
    local listener = SL:FindNearMonster(tid, 300)
    if not listener then return 0 end
    _rumor = math.min(CONST.RUMOR_CAP, _rumor + 1)
    SL:TipAbove(listener, "闻风" .. _rumor)
    if _rumor >= CONST.RUMOR_CAP then
        _redEyeT = CONST.RED_EYE_LIFE
        SL:AddBuff(listener, "RED_EYE", CONST.RED_EYE_LIFE)
        ShowTip("它红眼了——冲得快,也脆三成")
    end
    return 0
end)

-- 红眼判定:红眼状态的怪挨你的刀多三成
SL:RegisterLUAEvent(LUA_EVENT_MELEE_DAMAGE, "WWD_Fragile", function(tid)
    if not WindWord.RedEyed() then return 0 end
    local listener = SL:FindNearMonster(tid, 300)
    if listener then return 0 end
    return 4
end)

function WindWord.Cast()
    if _cdLeft > 0 or _crestT > 0 then return end
    local tid = SL:GetValue("MARK_TARGET_ID")
    if not tid then return end
    _cdLeft = CONST.CREST_CD
    _crestT = CONST.CREST_LIFE
    _rumor = 0
    _tid = tid
    SafeRemove(_crestFx)
    _crestFx = GUI:Layout_Create(GUI:Attach_SceneF(),
        GenID("Wind"), 0, 0, 0, 0, false)
    GUI:setLocalZOrder(_crestFx, CONST.ZORDER_WIND)
    SL:PlayWindUpFx(tid)
    ShowTip("风放出去了——打它一下,同伴听一声风")
end

-- 定时器:风期倒计时与红眼消化
if not _scheduler then
    _scheduler = SL:Schedule(function(dt)
        _cdLeft = math.max(0, _cdLeft - dt)
        if _redEyeT > 0 then
            _redEyeT = _redEyeT - dt
            if _redEyeT <= 0 then
                ShowTip("红眼消了——它又怂回去了")
            end
        end
        if _crestT > 0 then
            _crestT = _crestT - dt
            if _crestT <= 0 then
                SafeRemove(_crestFx)
                ShowTip("风停了——红眼也消了")
            end
        end
    end, 0.02)
end

SL:ScheduleOnce(function()
    SL:BindDebugButton("放风", function()
        WindWord.Cast()
    end)
    ShowTip("技能已加载: 风声纹 (调试按钮触发)")
end, 1.0)

function WindWord.Unload()
    if _scheduler then SL:Unschedule(_scheduler) end
    SL:UnregisterLUAEvent(LUA_EVENT_MELEE_HIT, "WWD_Word")
    SL:UnregisterLUAEvent(LUA_EVENT_MELEE_DAMAGE, "WWD_Fragile")
    SafeRemove(_crestFx)
    _crestT = 0
    _rumor = 0
end

return WindWord

五、机制问答

问:风声对头目有效吗?
答:对头目无效——红眼只对"观望的同伴"发作,头目没有同伴可听风,放风对独行者是白放。

问:红眼的怪攻击力涨吗?
答:不涨——红眼涨的是腿劲和劲头,刀还是那把刀,涨的那三成脆是它自己顶给了你。

问:闻风的计数会过期吗?
答:会攒着——三声没凑满就一直在账上,风声期里随时能凑齐,攒着的风不散。

问:红眼冲过来还能刹车吗?
答:刹不住——红眼六秒是一条道走到黑,冲到你面前挨满重刀,六秒后再怂也晚了。

问:两只观望的怪都闻风怎么办?
答:只有一只入账——风声只认搜索圈里最近的一只耳朵,想放给谁听,站位说了算。

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

第四笔是红眼的发作线:三声风是名声的定价——发作线太低随便砍砍就红眼,太高风声成了摆设,三声刚好是"砍得投入就勾得来"的名声分量。第三笔是红眼的脆度:三成的脆是红眼的双刃刃口——脆度太低它红着眼来白挨不了几刀,太高红眼变成送死键,三成刚好是"来的快死的也快"的账。第二笔是红眼的路劲:移速涨五成是"主动送上门"的油门——油门不够它磨磨蹭蹭,油门太足它瞬移到你脸上,五成刚好是看得见它兴冲冲跑来。第一笔是闻风的青点:一颗青点一声风,三颗攒满红眼发作——青点是名声的进度条,没有青点的风声谁也不知道传到哪了。常见坑三个:放风的计数漏了目标校验打谁都往一只耳朵上记;红眼的移速加成没在风停后还原;青点在怪死亡后还挂在头顶。

商业服里风声纹是"传名声"的把式:别人的增益给自己,他的增益给敌人——商城里风声的样式做成品级,口风、纸鸢风、鹤唳风,那颗颗浮起的青点和红眼冲来的身影就是风声纹的话本。运营落地还有两笔:一段是扬名教学——教一句"把它的同伴喂饱三声风,它自己送上门",流派第一课是造势;一段是风闻榜——按勾来的红眼怪击杀数排名,名声放得最响的人有碑。变体做成风声鹤唳:红眼的怪再传染给下一只——从一只红眼到一群红眼,风声纹的名声越传越玄。这一篇的演示和整套模块照抄能跑,改的就是 CONST 那张表。

写完留一句给做声势系的同学:风声纹卖的是"名声是鱼饵也是刀"——那颗颗浮起的青点和红着眼睛扑上来的身影,是把敌人的好奇明码标价的一声风。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

Lua自动炮台:架一个自动索敌开火

【语法算法】 上一版的炮台索敌逻辑有个隐蔽报错:炮台永远打同一个怪——即使那只怪已经死了,索敌的游标也不挪窝。追到底索敌的游…

2026-10-02 04:50 996 技术组
进阶实战游戏功能

Lua元素转换:火伤转冰伤附带减速

【语法算法】 先抛一个坑:打不完的火系怪怎么办?火抗怪火打不动,换冰系技能要切装备要换面板——切完黄花菜都凉了。元素转换的答…

2026-10-02 04:50 996 技术组
进阶实战游戏功能

Lua连锁引燃:一个着火引燃下一个

【语法算法】 上个月的事故复盘会上有个数字被念了三遍:四成——策划写的是"同伴陪疼四成",代码落下去成了"陪疼四十点",两只…

2026-10-02 04:50 996 技术组
进阶实战游戏功能

Lua弹射地垫:踩上去弹飞到空中

【语法算法】 单行代码拆解:弹射初速=-420——弹射的全部动力就这一行的负初速。负号朝上、四百二十是弹射的初速大小——踩上…

2026-10-02 04:50 996 技术组
进阶实战游戏功能

Lua时间减缓:流速减半的局部时差

【语法算法】 上一版的减速类模块全按"乘以零点五"来写,帧率无关的版本照搬了这套写法——结果高帧率机上减速效果好,低帧率机上…

2026-10-02 04:50 996 技术组
进阶实战游戏功能

Lua引力球:丢出去把怪吸过来

【语法算法】 先抛一个坑:怎么把散在四处的怪聚到一起打?逐个拉是笨办法,一个范围技又只能打一片——引力球的答案是一个会动的吸…

2026-10-02 04:50 996 技术组