using System.Collections.Generic; using Continentis.MainGame.Card; using Continentis.MainGame.Character; using Continentis.MainGame.Commands; using Continentis.Mods.Basic.Buffs; using SLSUtilities.General; namespace Continentis.Mods.Basic.Cards { /// /// 不屈(Unyielding): /// 骑士技能牌。获得指定量的格挡和 1 层坚守(Firm)Buff。 /// 如果使用者本回合已被攻击过,格挡翻倍。 /// public class Unyielding : CardLogicBase { // 卡牌数据中配置的格挡基础值属性键 private const string BUFF_FIRM_COUNT = "Buff_Firm_Count"; public override void SetUpLogicComponents() { AddLogicComponent(); } // ── 伤害预览 ────────────────────────────────────────────────────────── public override void TargetingEffect(CharacterBase target) { // TargetingEffect 无目标意义(己方技能),复用 Untargeting 逻辑即可 RefreshBlockPreview(); } public override void UntargetingEffect() { RefreshBlockPreview(); } // ── 出牌效果 ────────────────────────────────────────────────────────── public override CommandGroup PlayEffect(List targetList) { return SingleCommandGroup( new Cmd_PlayAnimation(user.characterView, "Skill"), Cmd.Do(() => { int baseBlock = GetAttribute("Block"); // 如果本回合已被攻击过,格挡翻倍 bool isCounterReaction = user.recordSubmodule.WasAttackedThisRound; int finalBlock = isCounterReaction ? baseBlock * 2 : baseBlock; user.AddBlock(finalBlock); int firmStacks = GetAttribute(BUFF_FIRM_COUNT); CreateCharacterBuff(firmStacks).Apply(user, user, this); }) ); } public override void ApplyAttributeChangesByCard() { LogicComponent().SetBlock(); } // ── 私有辅助 ────────────────────────────────────────────────────────── /// /// 根据当前是否被攻击过刷新格挡预览属性。 /// private void RefreshBlockPreview() { int baseBlock = GetAttribute("Block"); bool isCounterReaction = user != null && user.recordSubmodule.WasAttackedThisRound; card.SetAttribute("Display_Block", isCounterReaction ? baseBlock * 2 : baseBlock); } } }