魔法盾是法师的保命核心:展开魔法护盾按比例减免受到的伤害,同时持续消耗魔法值,蓝尽盾破。法师的生存公式一半靠走位一半靠魔法盾,它的实现要点是减伤比例、蓝耗 tick 与破碎判定的三段联动。
-- 技能释放触发:魔法盾
function QF.MagicShield(plr)
if plr:HasState(STATE_SHIELD) then return false end
if plr:GetMP() < 50 then return false, "魔法不足" end
local lv = plr:GetSkillLevel("魔法盾")
plr:AddState(STATE_SHIELD, {
expireAt = os.time() + 60000,
reduce = 0.3 + lv * 0.1,
mpPerSec = 5 + lv * 2,
})
return true
end
魔法盾持续 60 秒,减伤比例按技能等级 40% 到 60%,每秒蓝耗 7 到 11 点随等级上升。开启需要至少 50 点魔法,蓝条就是法师的血条在盾期间的直观体现。
-- 受伤结算触发:魔法盾减免
function QF.OnDamage(plr, damage, dmgType)
local shield = plr:GetState(STATE_SHIELD)
if not shield then return damage end
local reduced = math.floor(damage * (1 - shield.reduce))
plr:CostMP(shield.mpPerSec + math.floor(damage * 0.05))
if plr:GetMP() <= 0 then
plr:ClearState(STATE_SHIELD)
plr:SendMsg("魔法盾破碎!")
end
return reduced
end
受伤时按盾的等级减免伤害,盾的维持蓝耗之外每次受击额外扣 5% 伤害的魔法,挨打越多蓝掉越快,蓝尽盾碎全额承伤。破碎瞬间的音效与全屏裂纹特效是法师最不想看到的画面,也是对手最想听到的声音。
盾期间的蓝耗构成(维持与受击)抽样统计,破碎前的末次伤害必然全额的规则用日志断言守护。
受击额外蓝耗的比例曾经过高,法师被围时一秒破盾,比例从 8% 降到 5% 找回平衡。盾破碎瞬间的受击顺序争议持续很久,破碎那一下吃全额还是吃减免的裁定:破碎前的伤害走减免,破碎触发的这一次全额,规则写进注释避免后人再吵。
魔法盾的破碎音效是法师玩家最抗拒听到的声音,音效师在破碎音里混入了玻璃碎裂与叹息两轨采样,情绪化的音效设计让技能的得失有了心理重量。盾的减伤比例 40% 到 60% 的等级成长在技能说明页有表格对照,蓝耗的每秒消耗与受击附加的构成也全程公开,法师的蓝量管理学是这门职业的必修数学。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 把接口串成功能:一个 BOSS 血条窗口覆盖前端的大半接口面——窗口的打开、控件的创建、网络消息的接收、…
实战应用:用在哪里 控件会动才有生命: GUI:ActionMoveTo 、 ActionFadeIn 、 ActionSc…
实战应用:用在哪里 活动图标、在线奖励按钮、红点提示这些常驻元素要钉在主界面的固定区域: GUI:Attach_MainTo…
实战应用:用在哪里 玩家的每个操作都要有回声: SL:ShowSystemTips 是屏幕中央的系统提示(操作失败、领取成功…
实战应用:用在哪里 前端拿到的大量数据是"字符串形态"的:服务端 sendluamsg 的字符串参数、配置表的行文本、本地缓…
实战应用:用在哪里 界面的炫彩体验有一半来自特效: GUI:Effect_Create 把引擎特效挂到界面控件上,按钮的流光…