using System; using Cielonos.MainGame.Characters; using SLSUtilities.General; using UnityEngine; namespace Cielonos.MainGame.Inventory.Collections { /// /// 过载电池 / Overload Battery /// 过载完成时,下一次【突破等级:重】攻击造成的伤害增加 50%。 /// public class OverloadBattery : PassiveEquipmentBase { private bool _isBuffActive = false; public override void OnObtained() { // 直接订阅由 OverloadSubmodule 抛出的满溢满充爆气事件 if (overloadSm != null) { overloadSm.OnTriggered += TriggerOverloadEffect; } } public void TriggerOverloadEffect() { // 挂载增伤 Buff _isBuffActive = true; // 为下一次攻击进行截流修饰(利用上一个阶段优化提升完毕的 EventSubmodule 架构) Action onStartAttack = OnStartAttack; if (!player.eventSm.onStartAttack.ContainsKey("OverloadBattery")) { player.eventSm.onStartAttack.Add("OverloadBattery", onStartAttack.ToPrioritized()); MainGameManager.BaseCollection.InfoText().Spawn(player.centerPosition, "Overload Battery Boost").SetScale(0.5f); } } private void OnStartAttack(AttackAreaBase attackArea, CharacterBase target, Attack.Context attackContext) { if (!_isBuffActive) return; // 拦截检查:必须是重突破等级(BreakthroughType.Heavy) // 如果不是重攻击,我们就避让不进行任何修饰,且不消耗掉 Buff 的开启状态 if (attackContext.value.breakthroughType != Breakthrough.Type.Heavy) return; // 最终伤害提升 50%。上个方案中我们留下了 damageMultiplier,天然完美支持翻倍操作。 attackContext.value.damageMultiplier += 0.5f; _isBuffActive = false; // "一次性"触发,修饰完毕后从玩家的攻击起手事件池里销毁自身,不沾染下一次无关的攻击。 player.eventSm.onStartAttack.Remove("OverloadBattery"); } public override void OnDiscarded() { base.OnDiscarded(); player.eventSm.onStartAttack.Remove("OverloadBattery"); if (overloadSm != null) { overloadSm.OnTriggered -= TriggerOverloadEffect; } } } }