Files
Continentis/Assets/Mods/Basic/Cards/Scripts/Knight/Skill/Unyielding.cs
SoulliesOfficial ac98ec3aef 更新
2026-04-17 12:01:50 -04:00

77 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
{
/// <summary>
/// 不屈Unyielding
/// 骑士技能牌。获得指定量的格挡和 1 层坚守FirmBuff。
/// 如果使用者本回合已被攻击过,格挡翻倍。
/// </summary>
public class Unyielding : CardLogicBase
{
// 卡牌数据中配置的格挡基础值属性键
private const string BUFF_FIRM_COUNT = "Buff_Firm_Count";
public override void SetUpLogicComponents()
{
AddLogicComponent<CardLogicComponent_Defense>();
}
// ── 伤害预览 ──────────────────────────────────────────────────────────
public override void TargetingEffect(CharacterBase target)
{
// TargetingEffect 无目标意义(己方技能),复用 Untargeting 逻辑即可
RefreshBlockPreview();
}
public override void UntargetingEffect()
{
RefreshBlockPreview();
}
// ── 出牌效果 ──────────────────────────────────────────────────────────
public override CommandGroup PlayEffect(List<CharacterBase> 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<Firm>(firmStacks).Apply(user, user, this);
})
);
}
public override void ApplyAttributeChangesByCard()
{
LogicComponent<CardLogicComponent_Defense>().SetBlock();
}
// ── 私有辅助 ──────────────────────────────────────────────────────────
/// <summary>
/// 根据当前是否被攻击过刷新格挡预览属性。
/// </summary>
private void RefreshBlockPreview()
{
int baseBlock = GetAttribute("Block");
bool isCounterReaction = user != null && user.recordSubmodule.WasAttackedThisRound;
card.SetAttribute("Display_Block", isCounterReaction ? baseBlock * 2 : baseBlock);
}
}
}