using System.Collections.Generic; using Continentis.MainGame; using Continentis.MainGame.Card; using Continentis.MainGame.Character; using SLSUtilities.General; namespace Continentis.Mods.Basic.Buffs { /// /// 魔力外溢/奥术充能(法师):必须先持有此 Buff,之后每次打出带 Magic 关键词的卡牌自动叠 1 层。 /// 层数可被特定卡牌消耗以触发爆发效果;本 Buff 不自动消耗。 /// public class ArcaneCharge : CharacterCombatBuffBase { public ArcaneCharge() { Initialize(BuffType.Positive, BuffDispelLevel.Strong); this.contentSubmodule = new ContentSubmodule(this) .AddParameterGetter("Stack", () => unitedStackSubmodule.stackAmount.ToString()); this.iconSubmodule = new IconSubmodule(this).SetTextFunctions("Stack"); // 初始 0 层;层数完全由事件驱动累积 this.unitedStackSubmodule = new UnitedStackSubmodule(this, 0); this.eventSubmodule = new EventSubmodule(this); // 打出 Magic 关键词卡牌后叠 1 层 this.eventSubmodule.onAfterPlayCard.Add("ArcaneCharge_Stack", new PrioritizedAction>(OnAfterPlayCard)); } private void OnAfterPlayCard(CardInstance playedCard, List targets) { if (!playedCard.HasKeyword("Magic")) return; unitedStackSubmodule.AddStack(1); iconSubmodule.Update(); } /// /// 消耗指定数量的层数。供卡牌逻辑调用。 /// 返回实际消耗的层数(受当前层数上限约束)。 /// public int ConsumeStacks(int amount) { int actual = System.Math.Min(amount, unitedStackSubmodule.stackAmount); unitedStackSubmodule.ReduceStack(actual); iconSubmodule.Update(); return actual; } /// 消耗全部层数并返回消耗量。 public int ConsumeAllStacks() { int amount = unitedStackSubmodule.stackAmount; unitedStackSubmodule.ModifyStack(-amount); iconSubmodule.Update(); return amount; } public override bool OnBuffApply(out CharacterCombatBuffBase existingBuff) { MainGameManager.Instance.basePrefabs.GenerateInfoText( contentSubmodule.displayName, attachedCharacter.characterView); // 若已存在则保留现有实例(不重置层数,不二次叠加) if (FindExistingSameBuff(out existingBuff)) { return false; } existingBuff = null; return true; } } }