【游戏功能】
测试服的报错很怪:战斗日志里冒出 accuracy = 130%,命中概率算出了百分之一百三十。概率怎么会超一?追下去是玩家一口气撒了两包迷眼沙,命中减免叠了两层,八十减八十等于负六十,夹逼之后直接弹到上限还没弹对地方。修完这个叠加 bug,迷眼沙这套"致盲"的表现正好值得拆一遍。
一、迷眼、落空、揉眼三段表现
迷眼沙的定位要想清楚:它不是眩晕,不是定身,它只废一样东西——眼睛。撒沙的动作是一捧黄沙从玩家指尖抛出去,一道弧线飞到狼怪脸上炸开,沙粒往下簌簌地落,狼怪头顶浮出两个叉——眼睛没了,"迷眼!"的黄字和四秒的倒计时一起挂上去。致盲期间狼怪的行为要刻意"正常":它照样扑、照样挥爪、攻击节奏一拍不乱,只是每一爪都落在空处——爪子到脸前的一瞬玩家小跳让开,灰字 MISS 和"砍空"两个黄字先后飘起。这份"正常"就是致盲的味道:怪没瘫,是眼瞎了。四秒一到,狼怪抬爪揉两下脸,叉号散掉,"它揉净了眼"的状态提示一出,玩家的好日子到头——恢复要有预告,突然清醒的狼爪比一直清醒的更吓人。
沙的飞行也要讲究:不是直线命中,是一道抛物线——沙从指尖抛出去,弧顶过半、落到狼脸上炸开,飞行的 0.32 秒就是玩家"出手了"的仪式感。沙粒炸开后往下落而不是往四周溅,落在狼怪头顶那一小片区域里簌簌地下,这撮"沙雨"要持续到致盲结束——沙不是一次性的动静,是挂在整个致盲期里的环境。狼怪的"正常"要做得彻底:致盲前后它的攻击前摇、爪击的弧线、扑咬的节奏完全一致,唯一的区别是爪子到玩家脸前那半寸,玩家的小跳和 MISS 灰字补上"落空"的戏份——瞎的是它,表演的其实是玩家。
完整演示在这——点「迷眼沙!」撒它一脸,然后数它挥了几次空爪:
fx-blind
二、幂尔框架实现:命中roll与叠加纪律
幂尔框架里致盲是挂在目标身上的命中减免,攻击结算前先问一次命中率:
local Blind = {}
local BLIND_TIME, ACC_DOWN = 4, 80
function Blind.Throw(target)
SL:PlayActorAct("player", "cast")
SL:FlyProjectile("sand_hand", "player_hand", target, 0.32, function()
SL:ApplyBlind(target, BLIND_TIME, ACC_DOWN)
SL:PlayBurst(target, "sand_burst", 12)
SL:ShowTipAbove(target, "迷眼!")
SL:DrawEyeCross(target, BLIND_TIME) -- 头顶叉号: 全队可读
SL:Stagger(target, 0.4) -- 揉脸的小踉跄
end)
end
local function onAttackRoll(attacker, target)
local acc = 100 - SL:GetBlindAcc(target) -- 致盲减免: 只此一项
local roll = math.random(100)
if roll > acc then
SL:AttackMiss(attacker, target)
SL:ShowTipAbove(target, "MISS")
SL:DodgeHop(target) -- 小跳: 落空的身位反馈
return false -- 拦下本次结算
end
return true
end
function Blind.Refresh(target)
SL:ApplyBlind(target, BLIND_TIME, ACC_DOWN) -- 叠撒: 刷新时长不叠层数
SL:ShowTipAbove(target, "再迷一眼")
end
SL:On("attack_roll", onAttackRoll)
SL:RegClick("sand", Blind.Throw)
return Blind
叠加的账就在 GetBlindAcc 里:致盲只存时长和单层减免,重复撒沙刷新时长、绝不叠加数值——八十减两次还是八十,命中最低夹到零,那行 accuracy = 130% 的事故就是"叠加改成减法"之后没夹紧闹的。
这段实现里 On("attack_roll") 是命中判定的唯一入口:普攻、爪击、飞掷全走这一个事件,致盲只在这一处生效——命中逻辑散在各个招式里各判各的,迷眼沙就要挨个招式挂补丁,漏一个就是"瞎了还能砍中"的玄学工单。DodgeHop 的小跳挂在挨打方而不是出手方身上:狼爪扫过来、玩家小跳、MISS 灰字,三个反馈凑成一台戏。FlyProjectile 的回调闭包里拿到的是落点目标,致盲四秒从命中那一刻起算,不从出手那一刻起算——半个屏幕外先手撒的沙,飞行时间不能白给。
三、命中归零不等于无敌
致盲最怕做成"软眩晕":一旦狼怪致盲时连走都不走、连招都不出,迷眼沙就变成了定身的廉价皮。纪律是"只锁命中一项":移动照旧、攻击节拍照旧、技能照放,只有 roll 命中那一下必空——狼怪致盲期间扑空的爪子和正常的爪子动作帧完全一致,玩家靠 MISS 灰字而不是靠怪物姿态读状态。叉号要画在头顶而不是脚下:全队扫一眼战场,头顶带叉的就是瞎的,谁该上去输出一目了然。恢复前的揉脸动作是给双方的信号——狼怪玩家知道要跑,打怪玩家知道补沙。撒沙的公共冷却两秒、致盲时长四秒,这两个数的差值就是操作空间:一包沙空窗两秒,手法好可以无缝续盲,手法差露出两秒破绽——致盲不炫,但它把"命中"这条最容易被忽略的隐藏属性拉到了台面上,让玩家第一次认真看它的 roll 是怎么走的。
致盲的战术纵深全在"四秒"这个数上:狼怪攻击间隔两秒二,四秒里它挥两爪全空,第三爪赶在沙效末尾、擦着恢复的边——补沙的时机就成了手法题,早撒浪费尾巴,晚撒挨一实爪。撒沙的抛物线还有一层用法:隔着半个屏幕先手撒,狼怪在接近的路上就瞎,贴脸的爪击全部落空——先手致盲是这套玩法的进阶答案,抛物线的射程就是给它留的口子。最后是和闪避类机制的分工:闪避是玩家读前摇的反应活,致盲是把"必中"改成"必空"的化工活,一个靠操作一个靠准备,两条路都通向 MISS 灰字,但账要分开记——致盲期间玩家自己的闪避判定就别再叠了,两套必空叠在一起,MISS 灰字糊屏,谁也说不清该谢谁。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 控制技能的镜像问题是:锁住了怪,自己是不是也闲着?影锁把这道两难摆上台面:影锁四秒,它动不了、你也动不了——它…
【游戏功能】 打断为什么只有"清读条"一种?震魂偏要反过来——不清招、不断势,打在它读条半途的那一劲顺着招震进腑——中劲十秒…
【游戏功能】 蜂群为什么总是一只一只出?蜂王偏要让它们进化:放一只蜂王出来,杀掉小怪喂它——喂三只升一阶,三阶蜂王的毒刺一秒…
【游戏功能】 技能为什么总是不扣自己的血?血刃偏要反着来:开着血刃的每一刀先扣自己二血、命中回三血——净赚一但要打得中,空刀…
【游戏功能】 bn.t = bn.t - dt ——一行旗面倒计时的代码,撑起了破军旗全部的紧迫感:旗立三秒、圈内加攻三成,…
【游戏功能】 淬毒为什么要一毒到底?淬毒刃偏要一层一层叠:一刀淬一层毒、毒层一秒六地烂,六层封顶之后一刀下去毒伤三十六——叠…