【游戏功能】
再抛一个坑:风声能不能当武器使?你的名声在怪群里传开,是好是坏?寻常的想法里,名声越响围上来的怪越多——全是坏事。风声纹把这笔账倒了过来:你在一只怪身上扬名,它的同伴听得心惊——闻满三声风,它红着眼主动扑上来,红着眼,也脆着三成。招它来,是给它一个送死的名分。这篇把整套模块拆开:配置表、放风结算、闻风计数、红眼判定、定时器、调试按钮,一段一段照抄能跑。
一、效果演示:你的名声传出去,它红着眼送上门
演示场怪在前面打,同伴在后面观望。点「放风!」:一圈青白色的纹荡开——十二秒风声期。你在前面那只身上每落一刀,后面观望的同伴头顶就浮一颗"闻风"的青点——一刀一声风。三声风攒满,同伴的眼睛红了:脚步快了一半,主动越过同伴朝你冲——冲过来正好挨你三成加成的重刀。风声期的账就是这么算的:你打得越响,它来得越急;它来得越急,死得越快。演示里试两笔账:坐等它慢慢蹭过来的血线消耗和放风招它上门的速决账——风声纹教的是扬名:名声不只是名声,是鱼饵。
fx-windword
二、底层原理:一次放风结算加一次红眼判定
模块的机关是一对搭档。放风结算:纹成期里你在目标身上的每一刀都往外放一声风——风声认的是你的出手,砍谁放谁的另一半都在听。红眼判定:同伴的闻风计数攒满三声,红眼当场发作——移速攻速一起涨,主动转向扑你;红眼是双刃,攻击的劲头涨了,护体的韧度掉了三成。和嘲讽类机制的分野在"风声红眼是它自愿的":嘲讽改它的仇恨让它不得不来,风声勾它的性子让它自己想来——被勾来的怪带着怒气也带着破绽,这份"自愿送死"的戏是风声纹的魂。
红眼为什么三声就发作?一声就红的版本风声太廉价,玩家随便砍两刀就能牵着怪鼻子走;五声又太熬,一场仗放不满一次风——三声刚好是"有蓄力感也兑现得了"的名声分量。
三、核心代码:完整模块(上·骨架)
-- @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
四、核心代码:完整模块(下·放风与红眼)
-- 放风结算:你在目标身上每一刀,同伴听一声风
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 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 上一版的炮台索敌逻辑有个隐蔽报错:炮台永远打同一个怪——即使那只怪已经死了,索敌的游标也不挪窝。追到底索敌的游…
【语法算法】 先抛一个坑:打不完的火系怪怎么办?火抗怪火打不动,换冰系技能要切装备要换面板——切完黄花菜都凉了。元素转换的答…
【语法算法】 上个月的事故复盘会上有个数字被念了三遍:四成——策划写的是"同伴陪疼四成",代码落下去成了"陪疼四十点",两只…
【语法算法】 单行代码拆解:弹射初速=-420——弹射的全部动力就这一行的负初速。负号朝上、四百二十是弹射的初速大小——踩上…
【语法算法】 上一版的减速类模块全按"乘以零点五"来写,帧率无关的版本照搬了这套写法——结果高帧率机上减速效果好,低帧率机上…
【语法算法】 先抛一个坑:怎么把散在四处的怪聚到一起打?逐个拉是笨办法,一个范围技又只能打一片——引力球的答案是一个会动的吸…