using Continentis.MainGame; using Continentis.MainGame.Character; using SLSUtilities.General; namespace Continentis.Mods.Basic.Buffs { /// /// 风蚀(Wind 元素):行动开始时移除目标 [层数×2] 点格挡,然后层数 -1。 /// 定位:反格挡,与 Firm(格挡积累)形成元素克制。 /// public sealed class Erosion : CharacterCombatBuffBase { public Erosion(int stack) { Initialize(BuffType.Negative, BuffDispelLevel.Basic); this.contentSubmodule = new ContentSubmodule(this) .AddParameterGetter("Stack", () => unitedStackSubmodule.stackAmount.ToString()) .AddParameterGetter("BlockRemoval", () => (unitedStackSubmodule.stackAmount * 2).ToString()); this.iconSubmodule = new IconSubmodule(this); this.unitedStackSubmodule = new UnitedStackSubmodule(this, stack); this.eventSubmodule = new EventSubmodule(this); this.eventSubmodule.onActionStart.Add("Erosion", new PrioritizedAction(OnActionStart)); } private void OnActionStart() { int blockRemoval = unitedStackSubmodule.stackAmount * 2; // 负值减少格挡,Clamp 至 0 attachedCharacter.ModifyAndClampAttribute(CharacterAttributes.Block, -blockRemoval); unitedStackSubmodule.ReduceStack(1); iconSubmodule.Update(); } public override bool OnBuffApply(out CharacterCombatBuffBase existingBuff) { MainGameManager.Instance.basePrefabs.GenerateInfoText( contentSubmodule.displayName, attachedCharacter.characterView); if (FindExistingSameBuff(out existingBuff)) { existingBuff.unitedStackSubmodule.AddStack(this.unitedStackSubmodule.stackAmount); return false; } return true; } } }